以下是MM420 FC块中的一段小程序,应该是变频器跟电机通讯的一段程序,该程序已经在项目中应用过,是没有问题的,不过我看得不是很明白,哪位能帮忙在后面注释下吗?其中CTRL为控制字起始地址,STATUS为状态字起始地址,M_CTRL为控制字标记位,M_STATUS为状态字标记位,SPEED为实际速度【0-100%】,SET为设置的速度【0-100%】
程序段1:Load status word
L #CTRL
SLD 3
LAR1
L PIW[AR1,P#0.0]
T LW2
T #M_STATUS
程序段2:Load actual speed 16384=100%
L #CTRL
L 2
+I
SLD 3
LAR1
L PIW[AR1,P#0.0]
ITD
DTR
L 1.638400e+002
/R
T #SPEED
程序段3:Write control word
L #STATUS
SLD 3
LAR1
L LW0
T PQW[AR1,P#0.0]
T #M_CTRL
程序段4:Set speed 16384=100%
L #STATUS
L 2
+I
SLD 3
LAR1
L #SET
L 1.638400e+002
*R
RND
T PQW[AR1,P#0.0]
问题补充:
这段程序是在实际项目中使用过好几次的,是没问题的
最佳答案
控制字地址编号和状态字地址编号可能有误
________________________________________________________________________
程序段1:Load status word
L #CTRL //载入控制字地址编号到累加器1(我认为这里有笔误应是状态字编号#STATUS)
SLD 3 //左移3位得到控制字地址(因地址指针的低3位是位地址)
LAR1 //以上地址放入地址寄存器AR1
L PIW[AR1,P#0.0] //载入控制字到累加器1
T LW2 //保存累加器1到局部变量LW2
T #M_STATUS //保存累加器1到变量#M_STATUS
程序段2:Load actual speed 16384=100%
L #CTRL //载入控制字地址编号到累加器1(我认为这里有笔误应是状态字编号#STATUS)
L 2
+I //累加器1加2(因速度是PZD的第二个字)
SLD 3 //左移3位得到速度的地址
LAR1 //以上地址放入地址寄存器AR1
L PIW[AR1,P#0.0] //载入速度到累加器1
ITD //累加器1从整数转换为双整数
DTR //累加器1从双整数转换为实数
L 1.638400e+002
/R //累加器1除以163.84得到实际速度,因为16384对应速度100%
T #SPEED //保存速度到#SPEED
程序段3:Write control word
L #STATUS //载入状态字地址编号到累加器1(我认为这里有笔误应是控制字编号#CTRL)
SLD 3 //左移3位得到状态字地址
LAR1 //以上地址放入地址寄存器AR1
L LW0 //载入局部变量LW0到累加器1
T PQW[AR1,P#0.0] //输出累加器1到状态字地址
T #M_CTRL //保存累加器1到#CTRL
程序段4:Set speed 16384=100%
L #STATUS //载入状态字地址编号到累加器1(我认为这里有笔误应是控制字编号#CTRL)
L 2
+I //累加器1加2(因速度是PZD的第二个字)
SLD 3 //左移3位得到速度的地址
LAR1 //以上地址放入地址寄存器AR1
L #SET //载入变量#SET到累加器1
L 1.638400e+002
*R //累加器1乘以163.84,因为16384对应速度100%
RND //实数转换为双整数
T PQW[AR1,P#0.0] //输出速度
提问者对于答案的评价:
谢谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc185358.html