SET
SAVE
= L 66.1
L #IN0
L 0
>=I
JCN M001
L #IN0
ITD
DTR
T #TEMP20[1]
JU M002
M001: L 0.000000e+000
T #TEMP20[1]
16个赋值程序,字数限制,省略了。
------------------------------------------------------------------
M020: L 1
T #TEMP22
M021: L #TEMP22
L 8
<=I
JCN M022
L #TEMP22
ITD
L L#1
>=D
A L 66.1
= L 66.1
TAK
L L#8
<=D
A L 66.1
= L 66.1
TAK
L L#-1
+D
L L#32
*D
TAR2
+D
L #TEMP22
ITD
TAK
T LD 68
TAK
L L#1
>=D
A L 66.1
= L 66.1
TAK
L L#8
<=D
A L 66.1
= L 66.1
TAK
L L#-1
+D
L L#32
*D
L #TEMP22
ITD
TAK
T LD 72
TAK
L L#1
>=D
A L 66.1
= L 66.1
TAK
L L#8
<=D
A L 66.1
= L 66.1
TAK
L L#-1
+D
L L#32
*D
TAR2
+D
LAR1 LD 72
L LD [AR1,P#0.0]
TAK
LAR1
TAK
L DID [AR1,P#96.0]
*R
L 2.764800e+004
/R
LAR1 LD 68
T DID [AR1,P#32.0]
L #TEMP22
ITD
L L#1
>=D
A L 66.1
= L 66.1
TAK
L L#8
<=D
A L 66.1
= L 66.1
TAK
L L#-1
+D
L L#32
*D
TAR2
+D
L #TEMP22
ITD
TAK
T LD 68
TAK
L L#1
>=D
A L 66.1
= L 66.1
TAK
L L#8
<=D
A L 66.1
= L 66.1
TAK
L L#-1
+D
L L#32
*D
L #TEMP22
ITD
TAK
T LD 72
TAK
L L#1
>=D
A L 66.1
= L 66.1
TAK
L L#8
<=D
A L 66.1
= L 66.1
TAK
L L#-1
+D
L L#32
*D
TAR2
+D
LAR1 LD 72
L LD [AR1,P#32.0]
TAK
LAR1
TAK
L DID [AR1,P#128.0]
*R
L 2.764800e+004
/R
LAR1 LD 68
T DID [AR1,P#64.0]
L #TEMP22
L 1
+I
T #TEMP22
JU M021
M022: CLR
A L 66.1
SAVE
BE
以上是程序,程序是读取16个模拟量的值,并将其转换为实际值,存入DB1001.DBD32至DBD92中,后半段程序只能看明白是在做地址偏移,但不是很明白,望高手解答。
最佳答案
太长了,写了一部分,可供参考
SET //将RLO置位
SAVE //将RLO 存入BR位
= L 66.1 //操作成功,L66.1=1
L #IN0 //将#INO装载入累加器1, ACC1=#IN0
L 0 //将累加器1的值存入累加器2,然后将0存入累加器1,执行后,ACC2=#IN0,ACC1=0
>=I //ACC2>=ACC1,则RL0=1;
JCN M001 //若RLO=0,则跳转到M001;
L #IN0
ITD //将#IN0转为32位整数;
DTR //将#IN0转为32位浮点数;
T #TEMP20[1] //将#IN0存储在#TEMP20[1] 中;
JU M002 //无条件跳转到M002;
M001: L 0.000000e+000 //ACC1=0.0;
T #TEMP20[1] // #TEMP20[1]=ACC1;
16个赋值程序,字数限制,省略了。
------------------------------------------------------------------
M020: L 1 //将1载入到累加器1;ACC1=1
T #TEMP22 //将累加器1的值传送到#TEMP22;
M021: L #TEMP22 //将#TEMP22载入到累加器1;ACC1=#TEMP22;
L 8 //将累加器1的值存入累加器2,然后将8载入到累加器1;ACC1=8;
<=I //ACC2<=ACC1,则RL0=1
JCN M022 //若RLO=0,则跳转到M022
L #TEMP22
ITD //将#TEMP22转为32位整数;
L L#1 //载入长整数1
>=D // ACC2>=ACC1,则RLO=1;
A L 66.1
= L 66.1 //L66.1=1,则L66.1=1;
TAK //累加器1的值与累加器2的值互换;指令执行后,ACC1=#TEMP22,ACC2=1;
L L#8 // 将累加器1的值存入累加器2,然后将8载入到累加器1
<=D //ACC2<=ACC1,则RL0=1
A L 66.1
= L 66.1 //L66.1=1,则L66.1=1;
TAK //累加器1的值与累加器2的值互换;指令执行后,ACC1=#TEMP22,ACC2=8
L L#-1 // 将累加器1的值存入累加器2,然后将-1载入到累加器1
+D //累加器1的值与累加器2的值相加,结果保存在累加器1中;
L L#32 //将累加器1的值存入累加器2,然后将32载入到累加器1;ACC1=32
*D //累加器1的值与累加器2的值相乘,结果保存在累加器1中
TAR2 //将地址寄存器AR2的内容传送到累加器1中,累加器1的值传送到累加器2中;
+D //累加器1的值与累加器2的值相加,结果保存在累加器1中;
提问者对于答案的评价:
回复晚了,谢谢了兄台!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc192984.html