移位寻址

图片显示的程序中  LAR1和 LAR2的数值是多少?整个程序请标注一下每一条的作用 谢谢

图片说明:

移位寻址   

最佳答案

先从手册了解区域内指针结构,指针 P#X.0的最低3位总是为0,参考链接中指针结构。
下面的解释只解释循环体一次执行的机理。每次循环依此类推
         L   0                      //装载0
         SLW   3                //字左移3位,构造成 P#0.0 的指针
         LAR1                    //将形成的指针传到地址寄存器AR1,AR1 的值是常数指针  P#0.0
//
         L   0
         L   140
         +I                          // 0+140
         SLW   3                 //字左移3位,构造成 P#140.0 的指针
         LAR2                    //将形成的指针传到地址寄存器AR2,AR2 的值是常数指针  P#140.0
//
         L   48
         SRW  1                 //将 48 右移 1 位,相当于除以2,即循环次数是 24 次
ClrF: T         #Schleifenzaehler        //循环体,修改循环变量值
         OPN   #IN_DB_Stoerunger     //打开数据块,块号在参数中,比如数据块1
         L         DBD[AR2,P#0.0]          //第一次循环时装载DB1.DBD140,第二次则是 DB1.DBD144,依此类推
         A         #IN_Reset_fault_Grp   //测试这个位是不是 0
        JCN     Wert                              //如果上一行的位为 0 就跳转到标号Wert 
         L          0
         T         DBD[AR2,P#0.0]          //当测试位为1时,DB1.DBD140 清 0,第二次循环时就是 该位为1时,DB1.DBD140 清0
Wert:T         LD   [AR1,P#0.0]           //#IN_Reset_fault_Grp位为0时,将 DB1.DBD140 存到 LD0
//
         +AR1  P#4.0                            //指针平移4个字节,指向下一个等处理的数据地址
         +AR2  P#4.0                            //指针平移4个字节,指向下一个等处理的数据地址
         L         #Schleifenzaehler         //装载循环变量
         LOOP ClrF                               //先将循环变量自减1,然后跳转到标号 CLRF
参考资料
S7-300和S7-400寻址
https://support.industry.siemens.com/cs/document/79632832
使用间接寻址编写循环程序
https://support.industry.siemens.com/cs/document/19345564
SIMATIC 用于S7-300 和S7-400 编程的语句表 (STL) 参考手册
https://support.industry.siemens.com/cs/document/45523446

提问者对于答案的评价:
谢谢各位老师的解答。

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

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

相关推荐