图片显示的程序中 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