西门子间接寻址

1,在S7-300/400寻址有一段内容不是很清楚:
m1: FP    M10.0
          JCN   M2
          L        MD4
          L        P#2.0
           /D
           +   1
           T     MD8         // 如果数值相等,记录MD4指针的数据,将转换为数组,
    (地址值/P#2.0)+1 存储于MD8中,
请问MD8里面存储的是指针还是数值呢?

2,L   P#20.0
      TAR1
      L  1234
      T   W[AR1,P#2.0] 

Q:这个AR1里面是多少呢?

3, LAR1  P##AUFTRAG_START
//;
      L     1
AIN1: T     #LOOPCOUNT
      A      [AR1,P#0.0]
      JC    AIN3
//;
      L     32
      >=I   
      JC    AIN2
//;
      L     #LOOPCOUNT
      +     1
      +AR1  P#0.1
      JU    AIN1
//;
AIN2: L     0
AIN3: T     #AUFTRAG
 这段的意思,非常感谢!

问题补充:
看了TAR1?的解释说是将地址寄存器?1?中的内容传送到累加器?1
请问那么第二段程序是怎么知道AR1里面的地址的呢?

最佳答案

1段
MD8存储的是整数型的数据个数。MD4是指针。
2段
AR1 是P#20.0这个常数指针
3段
 LAR1  P##AUFTRAG_START // 装载指针 #AUFTRAG_START 到 AR1
 L     1                                   //  将计数放在  #LOOPCOUNT
AIN1: T     #LOOPCOUNT       // 循环检测开始部分
      A      [AR1,P#0.0]             // 测试第一个位变量
      JC    AIN3                        // 如果测试某位为1,则跳出循环
      L     32
      >=I                                 
      JC    AIN2                         //如果32个位都测试过了,没有为1的位,即全为0,则跳转到
                                              //AIN2,在标号处给标志变量 #AUFTRAG 变量赋值0
//;
      L     #LOOPCOUNT
      +     1                               //计数次数+1
      +AR1  P#0.1                     //指针加 P#0.1,为下一轮循环做准备,使其指向下一个位
      JU    AIN1                         //无条件跳转到循环体开始处,进行下一轮测试
//;
AIN2: L     0
AIN3: T     #AUFTRAG             //存储的是第一个为1的位的在字中的位置。
参考资料‘
SIMATIC S7-300和S7-400编程的语句表
https://support.industry.siemens.com/cs/document/109751814
S7-300和S7-400寻址
https://support.industry.siemens.com/cs/document/79632832
西门子STL间接寻址常问问题集
https://support.industry.siemens.com/cs/document/76492353
使用间接寻址编写循环程序
https://support.industry.siemens.com/cs/document/19345564

提问者对于答案的评价:
感谢您的回答。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午10:27
下一篇 2020年10月30日 下午10:27

相关推荐