求解S7-300STL程序

L     DW#16#84000000
      T     #afPointerBuffer
      L     #nStepNo
      L     1
      -I    
      L     2
      *I    
      L     #nStartAddress
      +I    
      L     8
      *I    
      ITD   
      L     #afPointerBuffer
      OD    
      T     #lPointer

      OPN   "RecipeParametersDB"
      L     #RPPointer
      LAR1  
      L     DBW [AR1,P#0.0]
      T     #nReturnValue

问题补充:
请高人帮忙翻译一下,最好每条都加上备注。特别是乘以8的作用是什么。

最佳答案

1、首先要理解指针寻址的格式:
、当是对DB区域寻址时指针为:AR=840xxxxx。
、32位指针为:其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。  
  AR:  0000 0000 0000 0BBB BBBB BBBB BBBB BXXX  
、例如: 当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,例如: 
  0000 0000 0000 0000 0000 0000 0000 1010 = 1.2 
2、程序:
      L     DW#16#84000000
      T     #afPointerBuffe r//缓存区指针设置为对DB区域寻址。
      L     #nStepNo
      L     1
      -I    
      L     2
      *I    
      L     #nStartAddress//#nStepNo减1,再乘以2,再与#nStartAddress相加
      +I    
      L     8
      *I   
      ITD   //上述之和乘以8.,形成32位指针格式(见上述)。 
      L     #afPointerBuffer
      OD    
      T     #lPointe r //形成32位指针与缓存区指针与 形成lPointe r 
      OPN   "RecipeParametersDB"//打开数据块
      L     #RPPointer
      LAR1  //j将#RPPointer装入AR指针
      L     DBW [AR1,P#0.0]
      T     #nReturnValue // 取AR指针指示的地址中的数据存入 #nReturnValue中。
程序中的减1,再乘以2,再与#nStartAddress相加,这需要你自己根据你的数据格式来理解了,从程序中是看不出来。
3、单从上述程序不可能全面了解指针寻址,建议先看看,看就明白了,以后就不求人了:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)》下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=F0215
《S7-300/400PLC ANY指针使用详解》连接:
http://blog.sina.com.cn/s/blog_669692a601019hvt.html
4、特别是乘以8的作用是什么?
乘以8就是要形成指针格式,见上述。

提问者对于答案的评价:
感谢阿鸣老师共享的STL相关资料,通过它大体搞懂了指针的用法。在此还是要感激艾星落尘的详细解答。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc216725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年11月25日 上午11:50
下一篇 2017年11月25日 上午11:50

相关推荐