SET
SAVE
= L 0.1
L P##aiPara
LAR1
L W [AR1,P#0.0]
T LW 2
OPN DB [LW 2]
L D [AR1,P#2.0]
LAR1
L D [AR1,P#8.0]
L D [AR1,P#4.0]
-R
L 0.000000e+000
<>R
JCN A7d0
L #IN
ITD
DTR
L D [AR1,P#4.0]
-R
L D [AR1,P#16.0]
TAK
T LD 2
TAK
L D [AR1,P#12.0]
-R
L LD 2
*R
L D [AR1,P#8.0]
TAK
T LD 2
TAK
L D [AR1,P#4.0]
-R
L LD 2
TAK
/R
L D [AR1,P#12.0]
+R
L D [AR1,P#0.0]
*R
RND
T #OUT
JU A7d1
A7d0: L 0
T #OUT
A7d1: CLR
A L 0.1
SAVE
BE
最佳答案
SET
SAVE
= L 0.1
L P##aiPara //读取指针
LAR1
L W [AR1,P#0.0]
T LW 2 //将指针中含有的DB号数据取出给LW2
OPN DB [LW 2]
L D [AR1,P#2.0]
LAR1 //取出指针还有的地址信息赋值到地址寄存器1里
L D [AR1,P#8.0]
L D [AR1,P#4.0]
-R
L 0.000000e+000
<>R //D [AR1,P#8.0]-D [AR1,P#4.0]==0则跳转到A7d0,否者程序接着往下执行
JCN A7d0
L #IN
ITD
DTR //将输入的数据IN从int转换到R型浮点数
L D [AR1,P#4.0]
-R //IN- D[AR1,P#4.0]=C
L D [AR1,P#16.0]
TAK //累加器1=C 累加器2=D[AR1,P#16.0]
T LD 2 //LD2=C
TAK //累加器1=D[AR1,P#16.0] 累加器2=C
L D [AR1,P#12.0] //D[AR1,P#16.0] - D [AR1,P#12.0]
-R
L LD 2 //(D[AR1,P#16.0] - D [AR1,P#12.0])*C
*R
L D [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
T LD 2 //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]
L D [AR1,P#4.0]
-R //[(D[AR1,P#16.0] - D [AR1,P#12.0])*C ]-D [AR1,P#4.0]
L LD 2
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]
L D [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]}
L D [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
JU A7d1
A7d0: L 0
T #OUT
A7d1: CLR
A L 0.1
SAVE
BE
计算的过程很长,主要是要注意TAK在交换的过程中数值是在累加器1里还是在累加器2里,计算;然要了解间接寻址时如何用的;
提问者对于答案的评价:
学习了
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc177992.html