SCL编译过来的STL。
刘玉蓉
发布于2014-11-05 17:34
4
0
标签:
SET
SAVE
= L 10.2
L #lastvalue
L #NumberOfRejectBits
>I
JCN A7d0
L 1
T #lastvalue
A7d0: L #NumberOfRejectBits
L #lastvalue
T #index
TAK
T LW 12
TAK
A7d1: L #index
L LW 12
<=I
JCN A7d2
L #index
L 1
-I
T #bitvalue
L #bitvalue
ITD
DTR
L 8.000000e+000
/R
TRUNC
T #bytevalueDint
L #bytevalueDint
T #bytevalue
L #bytevalue
L 8
*I
L #bitvalue
TAK
-I
T #bitvalue
L #ByteOffset
L #bytevalue
+I
T #bytevalue
L #bytevalue
ITD
L L#0
+D
L L#8
*D
L #bitvalue
ITD
+D
L L#0
-D
L L#1
*D
LAR1
A M [AR1,P#0.0]
JCN A7d3
L #index
T #RejectMessageNumber
L #index
L 1
+I
T #lastvalue
JU A000
A7d3: L #index
L 1
+I
T #index
JU A7d1
A7d2: L 1
T #lastvalue
A000: SET
= #test
A L 10.2
SAVE
BE
其中 #NumberOfRejectBits为31,ByteOffset为42,RejectMessageNumber为输出
请问这段程序的意图是什么?
佳答案
看了一下程序,理解为:此NumberOfRejectBits为比较值,定义的初时值为31;存入地址寄存器中即为3.7,ByteOffset为偏移值,定义的初时值为42;如输入lastvalue在1~31之间对应地址就是0.1~3.7,加上偏移量即为42.0~45.7,程序中已经定义为M区域寻址,即M42.0-M45.7;如输入数值为1,程序的处理就是从M42.0开始往上逐位检测到M45.7这一个32位数中个为1的信号将检测的次数index赋给输出;提外话,此程序有不严谨的地方,如果输入的数值超出了范围,PLC将报错,如未有相应的组织块,PLC将停机,除非将lastvalue定义为字节;看程序的A7DX这种跳转编号,像老外的程序,感觉老外编程应该很严谨。