在之前的学习随笔中,我介绍了功能块FB_CTRL_SERVO_MOTOR_OUT的用法,但是很遗憾,我没有找到向电机输出脉冲信号bOutBitPos和bOutBitNeg的途径。因为在通过NC模块控制电机时需要使用轴变量Axis_Ref但我暂时没有找到上述功能块与电机输入之间的某个中继模块。在找到其他输出途径之前,这条路暂时走不通。
注:在液压库中有一个功能块MC_AxUtiStandardInit_BkPlcMc,其中似乎有脉冲输出的关键字,今后可以在Tc_Mc或Tc_Mc2中寻找类似功能块,但不要再对液压库中的块做过多探究,液压轴的变量Axis_Ref_BkPlcMc与电磁伺服轴变量Axis_Ref不同,不能链接到NC模块中。
其实在TwinCAT的Tc_Mc和Tc_Mc2中就包含能够实现我们要求的功能块:MC_ExtSetPointGenFeed。它是一个外部设定值的输入模块,可以通过它让轴走我们自行设计的速度曲线。它长这个样子:
在设置输入时,我们只需要将时间的位置函数输入即可,如一个五次多项式:
S
=
0.1152
∗
t
5
−
1.44
∗
t
4
+
4.8
∗
t
3
S=0.1152 * t ^ 5 - 1.44 * t ^ 4 + 4.8 * t ^ 3
S=0.1152∗t5−1.44∗t4+4.8∗t3,
值得注意的是,当输入的目标位置确定后,速度和加速度都随之确定,此时再输入其他速度加速度对位移没有影响,可输入空变量或0或任意数字。此功能块严格按时间变化。另外,direction输入端有三个输入选项:-1、0、1。其中0代表 stand still,即静止不动,此时无论position是否有输入,电机均保持静止。-1与1在infosys的描述中分别代表电机的反、正方向,但在实际应用中我并未发现它们的不同,电机均跟随我输入的目标曲线运动,与direction的输入值无关。
在上述输入下,轴的位移、加速度、速度如下图:同时,在使用此功能块时,要先启动MC_ExtSetPointGenEnable,这是允许轴接收外部设定值的功能块。MC_ExtSetPointGenDisable是关闭接收外部设定值功能的功能块。
虽然在仿真中我们看到的曲线非常平滑,但在实际应用中电机可能仍存在颤动现象,这可能是由于NC周期太长造成的,可将NC周期调为1ms或更小,但不要小于plc周期。