当前位置: 主页 > PLC控制

程序分析总觉得不太对,请高手指教。

OPNDB1//打开DB1块假设IN0=3200IN1=3249
L#IN0//装载IN0=3200的内容,到ACC1中(ACC1=3200)
ITD//转化成双整,存入ACC1=3200
SLD3//acc1中的内容*8=25600
LAR1//AR1=25600
L#IN1//ACC1=3249
L#IN0//ACC1=3200ACC2=3249
-I//ACC2-ACC1=49———-ACC1=49
L1//ACC1=1ACC2=49
+I//acc1=50
M001:T#TEMP2//temp2=50
LB#16#0//acc1=B#16#0
TDBB[AR1,P#0.0]//将DB1.DBB[25600]=0???????
LP#1.0//ACC1=1000
+AR1//AR1=1000
L#TEMP2//ACC1=50
LOOPM001//循环50次jumptotheNEXTjumplabelifACCU1-L>0.
BE

问题补充:
程序作为一个程序块被另外的程序块调用,没看明白执行的实际意义:

最佳答案

假设IN0=3200IN1=3249,都是十进制数。程序是将DB1的第3200字节至第3249字节,共50个字节中的内容清零。
1、OPNDB1//打开DB1块假设IN0=3200IN1=3249
L#IN0//装载IN0=3200的内容,到ACC1中(ACC1=0C80十六进制)
ITD//转化成双整,存入ACC1=00000C80十六进制
SLD3//acc1中的内容左移3位形成32位6400(十六进制)。
LAR1//装入指针,安装指针格式,那么AR1=#P3200.0
上述程序将IN0=0C80,左移3位,意义是形成32位地址指针#P00003200.0。32位地址指针格式为:
 0000000000000BBBBBBBBBBBBBBBBXXX 
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。就意味着AR的取值只能是:0.0——65535.7。
0C80左移3位为:
00000000000000000110010000000000(十六进制的00006400),按上述格式,再换算为十进制指针为#P3200.0。
2、L#IN1//ACC1=3249
L#IN0//ACC1=3200ACC2=3249
-I//ACC2-ACC1=49———-ACC1=49
L1//ACC1=1ACC2=49
+I//acc1=50
上述程序是计算循环的计算器,即要清零操作的字节数。
3、M001:T#TEMP2//保存计数器至temp2中
LB#16#0//acc1=B#16#0
TDBB[AR1,P#0.0]//将常数0存入按地址指针寻址的DB字节中。
LP#1.0//
+AR1//指针加1.0,即指针指向下一字节。
L#TEMP2//取计算器
LOOPM001///循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环。
BE//如循环计数值如为0则结束循环。
4、建议楼主看看下述资料,才能真正清楚指针寻址及循环语句,否则再见指针寻址还是不明白:
、《关于S7-300S7-400指针寻址的说明与例程(更新版)(2008.03.04)》下载
htTP://www.ad.siemens.com.cn/download/searchResult.ASpx?searchText=F0215
、《STep7编程之地址概念详解》连接:
http://wenku.baidu.com/view/b2b4d3375a8102d276a22fd3.html

http://www.chinakong.com/rencai/disp.asp?id=1633&leibie=4
、《西门子STL间接寻址常问问题集》
http://www.ad.siemens.com.cn/download/docMessage.aspx?
ID=6175&loginID=&srno=&sendtime=

提问者对于答案的评价:
明白了,分析的很好,多谢

  • 关注微信

猜你喜欢

微信公众号