老外编的程序中 一个间接寄存器地址问题 LAR1 中具体装载的 地址是什么

//Copy pointers to areas in standard drives datablock
          CALL  "PIA_FC_GET_ANY_PTR"               //fc129
       pIN :="DRVCBP_FIRSTDRIVE".OUT_SPEED  //db1250.dbd8
        pOUT:=#P_out_speed                                         //临时变量 地址 L220.0

// Copy  data from DataBlock

  OPN   #TL_EN_BRD_R1_DB            // read data of bridle before TL/SCBR roll 1

//   get pointer into data block
      LAR1  P##P_out_speed
      L     LD [AR1,P#6.0]                            //这个语句 为什么,没有将累加器1中偏移量6.0地址指针       //内容装载到AR1中。  
      LAR1                                              //用ACCU 1的内容(32位指针)装载地址寄存器AR1
//   uses pointer to data in actual data block
      L     DBD [AR1,P#0.0]                   //dbd8                
      T     #en_tl_brd_speed1

 L     DBD [AR1,P#14.0]                //dbd22
      T     #en_tl_brd_diameter1

      L     DBD [AR1,P#18.0]                   //dbd26
      T     #en_tl_brd_gear1
//--------------------------------------------------------------------------
fc129
定义 输入管脚pIN  Any
           输出管脚pOUT  Any

  L     P##pIN
      LAR1  
      L     P##pOUT
      LAR2  
      L     D [AR1,P#0.0]
      T     D [AR2,P#0.0]
      L     D [AR1,P#4.0]
      T     D [AR2,P#4.0]
      L     W [AR1,P#8.0]
      T     W [AR2,P#8.0]
//-----------------------------------------------------------------------------------------
个人理解
  get pointer into data block
      LAR1  P##P_out_speed    //取 地址dbd8首地址8.0
      L     LD [AR1,P#6.0]                      //8.0+6.0=12.0
      LAR1                                         //12.0,但是监控地址好像还是8.0,不是很懂。
//--------------------------------------------
请教大家。描述的不是很好,不知道能说清楚问题了吗。

图片说明:

老外编的程序中 一个间接寄存器地址问题 LAR1  中具体装载的 地址是什么    老外编的程序中 一个间接寄存器地址问题 LAR1  中具体装载的 地址是什么    老外编的程序中 一个间接寄存器地址问题 LAR1  中具体装载的 地址是什么   

最佳答案

利用any指针进行寻址
 LAR1  P##P_out_speed //把P_out_speed的地址赋值到地址寄存器1里面
 L     LD [AR1,P#6.0] //地址寄存器便宜6个字节,P_out_speed any类型里面的存储类型和地址。如果P_out_speed 输入的参数是p# db1.dbx100.0 byte 10,这句话寻址之后就相当于L LD100

关于any类型的数据格式,参考:
SIMATIC 用STEP 7 V5.5 编程 手册
https://support.industry.siemens.com/cs/cn/zh/view/45531107
610页 27.3.4.5 参数类型 ANY 的格式  介绍
还可以参考下面的文档;
FC中如何传递ANY指针
https://support.industry.siemens.com/cs/cn/zh/view/76779257
如何计算ANY 型指针的偏移量或改变指针?
https://support.industry.siemens.com/cs/cn/zh/view/22422028
西门子STL间接寻址常问问题集
https://support.industry.siemens.com/cs/cn/zh/view/76492353

提问者对于答案的评价:
谢谢 RENHQ和 宁ゐ玉碎的解答,我学习了any指针 的数据结构 6-9才是存放的地址信息。

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

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月7日 下午7:22
下一篇 2017年6月7日 下午7:22

相关推荐