运动功能块指令通常包括用于控制电机、步进驱动器、伺服系统等设备的指令。这些指令允许程序员精确地控制运动的速度、位置、加速度以及方向等参数。以下是一些常见的PLC SCL运动功能块指令:
电机启动/停止指令:这些指令用于控制电机的启动和停止操作。它们可以包括启动电机、停止电机以及设置电机的运行方向等。
速度控制指令:用于设置电机的运行速度。这可以包括设置目标速度、加速和减速时间等参数。
位置控制指令:这些指令用于控制电机或驱动器到达特定的位置。它们通常包括设置目标位置、定义位置偏移量以及监控当前位置等功能。
电子凸轮指令:用于实现复杂的运动轨迹控制,如电子凸轮轮廓控制,使设备能够按照预设的轨迹进行运动。
同步控制指令:当需要多个轴或设备同步运动时,可以使用同步控制指令来确保它们之间的协调和同步。
插补控制指令:插补功能用于生成平滑的运动路径,特别是在需要复杂曲线或轨迹的应用中。
故障诊断与监控指令:这些指令用于监控运动控制系统的状态,检测错误或故障,并触发相应的警报或保护措施。
需要注意的是,具体的运动功能块指令取决于PLC的制造商和型号。不同的PLC厂商可能提供不同的SCL指令集和功能块,以满足特定的应用需求。因此,在编写运动控制程序时,需要参考PLC制造商提供的文档和指南,以确保正确使用相应的功能块指令。
此外,随着技术的发展,现代PLC系统还提供了更高级的运动控制功能,如路径规划、动力学控制等,这些功能可能需要使用更复杂的指令或特定的运动控制库来实现。因此,对于复杂的运动控制任务,建议深入研究和了解所选PLC系统的文档和资料,以充分利用其提供的运动控制功能。
以下程序是倍福运动功能块为例:
FUNCTION_BLOCKAxisAdvance_FB //轴功能块申明VAR_INPUT//轴功能块形参输入变量申明limitSwitch1:BOOL;limitSwitch2:BOOL;ZeroSwitch:BOOL;AxisNO:axis_ref;Enable:BOOL;Enable_Positive:BOOL;Enable_Negative:BOOL;Override:LREAL:=LREAL#100.0;BufferMode:MC_BufferMode;JogForward:BOOL;JogBackwards:BOOL;JogMode:E_JogMode:=MC_JOGMODE_CONTINOUS;JogVelocity:LREAL:=10.0;JogACC:LREAL;JogDEC:LREAL;StopExecute:BOOL;StopDEC:LREAL:=100.0;ResetExecute:BOOL;MoveVelExecute:BOOL;MoveVelocity:LREAL;MoveVelACC:LREAL;MoveVelDEC:LREAL;MoveVelDir:MC_Direction;MoveVelBufferMode:MC_BufferMode;MoveVelOptions:ST_MoveOptions;MoveRelptpExecute:BOOL;MoveRelptpDistance:LREAL;MoveRelptpVelocity:LREAL;MoveRelptpACC:LREAL;MoveRelptpDEC:LREAL;MoveAbsptpExecute:BOOL;MoveAbsptpDistance:LREAL;MoveAbsptpVelocity:LREAL;MoveAbsptpACC:LREAL;MoveAbsptpDEC:LREAL;HomeExecute:BOOL;HomePosition:LREAL:=0.0;HomeSwitch:BOOL;HomingMode:MC_HomingMode:=MC_DefaultHoming;HomingOptions:ST_HomingOptions;HaltExecute:BOOL;HaltDEC:LREAL;END_VARVAR_OUTPUT//轴功能块形参输出变量申明Staus:BOOL;Busy:BOOL;Active:BOOL;Error:BOOL;ErrorID:UINT;MoveInVel:BOOL;MoveRelptpDone:BOOL;MoveAbsptpDone:BOOL;HomingDone:BOOL;EnableDone:BOOL;ErrorCode:UDINT;END_VARVAR//轴功能块内部变量申明Home2Step:INT;delay1:TON;delay2:TON;McPower:MC_Power;McJog:MC_Jog;McStop:MC_Stop;McReset:MC_Reset;McMoveVelocity:MC_MoveVelocity;McMoveRelative:MC_MoveRelative;McMoveAbsolute:MC_MoveAbsolute;McHome : MC_Home;McHalt : MC_Halt;END_VAR;END_FUNCTION_BLOCKACTIONHalt: //功能块内部轴停止控制指令McHalt(Axis:= AxisNO, Execute:= HaltExecute, Deceleration:= HaltDEC, Jerk:= , BufferMode:= , Options:= , Done=> , Busy=> , Active=> , CommandAborted=> , Error=> , ErrorID=> );END_ACTION
ACTIONHome: //功能块内部轴回零控制指令McHome(Axis:= AxisNO, Execute:= HomeExecute, Position:= HomePosition, HomingMode:= HomingMode, BufferMode:= , Options:= HomingOptions, bCalibrationCam:=HomeSwitch ,Done=> HomingDone, Busy=> ,Active=> , CommandAborted=> , Error=> , ErrorID=> );END_ACTION
ACTIONJog: //功能块内部轴点动控制指令McJog(Axis:= AxisNO, JogForward:= JogBackwards,JogBackwards:= JogForward,Mode:= JogMode,Position:= , Velocity:= JogVelocity, Acceleration:= JogACC,Deceleration:= JogDEC, Jerk:= ,Done=> ,Busy=> , Active=> ,CommandAborted=> ,Error=> , ErrorID=> );END_ACTIONACTIONMove_absPTP: //功能块内部轴绝对定位控制指令McMoveAbsolute(Axis:= AxisNO, Execute:= MoveAbsptpExecute, Position:= MoveAbsptpDistance, Velocity:= MoveAbsptpVelocity, Acceleration:= MoveAbsptpACC, Deceleration:= MoveAbsptpDEC, Jerk:= , BufferMode:= , Options:= , Done=> MoveAbsptpDone, Busy=>Busy ,Active=> , CommandAborted=> , Error=>Error ,ErrorID=>ErrorCode);END_ACTION
ACTIONMove_relPTP: //功能块内部轴相对定位控制指令McMoveRelative(Axis:= AxisNO, Execute:= MoveRelptpExecute, Distance:= MoveRelptpDistance, Velocity:= MoveRelptpVelocity, Acceleration:= MoveRelptpACC, Deceleration:= MoveRelptpDEC, Jerk:= , BufferMode:= , Options:= , Done=> MoveRelptpDone, Busy=> , Active=> , CommandAborted=> , Error=> , ErrorID=> );END_ACTION
ACTIONMove_Vel: //功能块内部轴速度定位控制指令McMoveVelocity(Axis:= AxisNO, Execute:= MoveVelExecute, Velocity:= MoveVelocity, Acceleration:= MoveVelACC, Deceleration:= MoveVelDEC, Jerk:= , Direction:= MoveVelDir, BufferMode:= MoveVelBufferMode, Options:= MoveVelOptions, InVelocity=> MoveInVel, Busy=> , Active=> , CommandAborted=> , Error=> , ErrorID=> );END_ACTION
ACTIONPower: //功能块内部轴使能控制指令McPower(Enable:=Enable ,Enable_Positive:=Enable_Positive ,Enable_Negative:=Enable_Negative ,Override:= Override ,BufferMode:=BufferMode ,Axis:=AxisNO ,Status=>EnableDone ,Busy=> ,Active=> , Error=> , ErrorID=> );END_ACTION
ACTIONReset: //功能块内部轴复位控制指令McReset(Axis:= AxisNO, Execute:= ResetExecute, Done=> , Busy=> , Error=> , ErrorID=> );END_ACTION
ACTIONStop: //功能块内部轴停止控制指令McStop(Axis:= AxisNO, Execute:= StopExecute, Deceleration:= ,Jerk:= , Options:= , Done=> , Busy=> , Active=> , CommandAborted=> , Error=> , ErrorID=> );END_ACTION
以上功能调用程序示例
Axis_X :AxisAdvance_FB; //定义X轴实例化
在主程序调用运动指令Action
VAREnableButton:BOOL;END_VAR;
Axis_X.Power();Axis_X.Jog();Axis_X.Move_absPTP();Axis_X.Move_relPTP();Axis_X.Move_Vel();Axis_X.Stop();Axis_X.Home();Axis_x.Reset();
至于轴如何与逻辑程序对接,可以通过定义的轴输入接口来控制
Axis_X.Enable:=EnableButton; //X轴使能 |