当前位置: 主页 > PLC控制

帮忙解读一下程序

SET
SAVE
=L0.1
LP##aIPara
LAR1
LW[AR1,P#0.0]
TLW2
OPNDB[LW2]
LD[AR1,P#2.0]
LAR1
LD[AR1,P#8.0]
LD[AR1,P#4.0]
-R
L0.000000e+000
<>R
JCNA7d0
L#IN
ITD
DTR
LD[AR1,P#4.0]
-R
LD[AR1,P#16.0]
TAK
TLD2
TAK
LD[AR1,P#12.0]
-R
LLD2
*R
LD[AR1,P#8.0]
TAK
TLD2
TAK
LD[AR1,P#4.0]
-R
LLD2
TAK
/R
LD[AR1,P#12.0]
+R
LD[AR1,P#0.0]
*R
RND
T#OUT
JUA7d1
A7d0:L0
T#OUT
A7d1:CLR
AL0.1
SAVE
BE

最佳答案

SET
SAVE
=L0.1
LP##aiPara//读取指针
LAR1
LW[AR1,P#0.0]
TLW2//将指针中含有DB号数据取出给LW2
OPNDB[LW2]
LD[AR1,P#2.0]
LAR1//取出指针还有的地址信息赋值到地址寄存器1里
LD[AR1,P#8.0]
LD[AR1,P#4.0]
-R
L0.000000e+000
<>R//D[AR1,P#8.0]-D[AR1,P#4.0]==0则跳转到A7d0,否者程序接着往下执行
JCNA7d0
L#IN
ITD
DTR//将输入的数据IN从int转换到R型浮点数
LD[AR1,P#4.0]
-R//IN-D[AR1,P#4.0]=C
LD[AR1,P#16.0]
TAK//累加器1=C累加器2=D[AR1,P#16.0]
TLD2//LD2=C
TAK//累加器1=D[AR1,P#16.0]累加器2=C
LD[AR1,P#12.0]//D[AR1,P#16.0]–D[AR1,P#12.0]
-R
LLD2//(D[AR1,P#16.0]–D[AR1,P#12.0])*C
*R
LD[AR1,P#8.0]//累加器1=(D[AR1,P#16.0]–D[AR1,P#12.0])*C累加器2=D[AR1,P#8.0]
TAK//累加器1=D[AR1,P#8.0]累加器2=(D[AR1,P#16.0]–D[AR1,P#12.0])*C
TLD2//LD2=D[AR1,P#8.0]
TAK//累加器1=(D[AR1,P#16.0]–D[AR1,P#12.0])*C累加器2=D[AR1,P#8.0]
LD[AR1,P#4.0]
-R//[(D[AR1,P#16.0]–D[AR1,P#12.0])*C]-D[AR1,P#4.0]
LLD2
TAK//累加器1=LD2=D[AR1,P#8.0]累加器2=[(D[AR1,P#16.0]–D[AR1,P#12.0])*C]-D[AR1,P#4.0]
/R//{[(D[AR1,P#16.0]–D[AR1,P#12.0])*C]-D[AR1,P#4.0]}/D[AR1,P#8.0]
LD[AR1,P#12.0]
+R//{{[(D[AR1,P#16.0]–D[AR1,P#12.0])*C]-D[AR1,P#4.0]}/D[AR1,P#8.0]+D[AR1,P#12.0]}
LD[AR1,P#0.0]
*R//{{[(D[AR1,P#16.0]–D[AR1,P#12.0])*C]-D[AR1,P#4.0]}/D[AR1,P#8.0]+D[AR1,P#12.0]}*R
RND//以上计算的数值去整数
T#OUT//最后将计算完的数值给OUT
JUA7d1
A7d0:L0
T#OUT
A7d1:CLR
AL0.1
SAVE
BE
计算的过程很长,主要是要注意TAK在交换的过程中数值是在累加器1里还是在累加器2里,计算;然要了解间接寻址时如何用的;

提问者对于答案的评价:
学习了

  • 关注微信

猜你喜欢

微信公众号