本案例采用信捷CODESYS平台开发。
软件:XS Studio(基于IEC61131-3)
控制器:XSDH-60A32-E
伺服驱动器:DS5C-20P4-PTA(EtherCAT总线)
EtherCAT拓扑图:
指令介绍:
SMC_SetControllerMode(FB) 设置控制器模式
如果驱动器支持此功能块,则可以使用此功能块切换到另一个控制器模式。前提条件:
轴必须支持所需的控制模式。要对此进行检查,请参阅相应SoftMotion驱动程序库中的功能文档PDF。
必须映射所需的循环I/O数据(例如,扭矩模式:设置扭矩对象)。
调用此功能块时,轴不得处于错误停止、停止或归位状态。否则,将报告错误SMC_SCM_AXIS_IN_WRONG_STATE。
激活时的行为:
该功能块设置轴的byControllerMode(操作模式的命令值)参数,并等待直到参数byRealControllerMode的实际值反映该值。
如果在1000个周期内没有发生这种情况,则功能块将以错误中止。
当从较低级别切换到较高级别控制模式(例如,扭矩->速度、扭矩->位置、速度->位置)时,功能块计算较高级别信号的设定值。例如,当从扭矩模式切换到位置模式时,功能块使用轴的实际位置并添加预期的位置距离,根据实际速度和周期中的时间偏移(Axis.fSetActTimeLagCycles)补偿实际值和设定值之间的时间滞后。后一个值在很大程度上取决于系统(控制器硬件、现场总线、驱动器),可能需要调整。
SMC_SetControllerMode报告bDone后必须调用哪些功能块?
只要byRealControllerMode反映byControllerMode,功能块就会设置其完成输出并停止任何操作。这意味着应用程序立即负责从该周期开始计算正确的设定值。例如,轴是扭矩控制的,应切换到位置控制。启动功能块SMC_SetControllerMode时,轴仍在移动。在切换期间,功能块计算设定位置的正确值。但是,一旦设置了“完成”,就没有任何功能块继续提供设置值,并且轴将立即停止并报告错误。因此,例如功能块MC_Halt、MC_MoveVelocity或MC_MoveAbsolute可以由SMC_ControllerMode的完成输出触发,并接管轴的控制。
功能块展示:
LD:
ST:
SMC_SetControllerMode_0(
Axis:=Axis_1 ,
bExecute:=BControllerbExecute ,
nControllerMode:=ControllerbMode ,
bDone=> ,
bBusy=> ,
bError=> ,
nErrorID=> );
功能块InOut详细说明
Scope | Name | Type | Initial | Comment |
Inout | Axis | AXIS_REF_SM3 | Axis | |
Input | bExecute | BOOL | FALSE | TRUE:开始改变控制模式 |
nControllerMode | SMC_CONTROLLER_MODE | SMC_position | ||
Output | bDone | BOOL | TRUE:模式切换完成 | |
bBusy | BOOL | TRUE:FB未空闲 | ||
bError | BOOL | TRUE:函数块中发生错误表示 | ||
nErrorID | SMC_ERROR | 错误识别 |
SMC_CONTROLLER_MODE:
枚举变量 | 类型 | 初始值 | 描述 |
SMC_torque | SMC_CONTROLLER_MODE | 1 | 力矩 |
SMC_velocity | SMC_CONTROLLER_MODE | 2 | 速度 |
SMC_position | SMC_CONTROLLER_MODE | 3 | 位置 |
SMC_current | SMC_CONTROLLER_MODE | 4 | 当前方式 |
SMC_SetTorque(FB)此功能块将给定的扭矩应用于轴。
在控制器模式SMC_torque中,这是驱动器将产生的设定扭矩。
在控制器模式SMC_velocity或SMC_position中,伺服驱动器可以使用转矩值来改善控制器环路。给定的扭矩应该是驱动器的预期扭矩。这也被称为扭矩前馈控制。
在控制器模式SMC_nocontrol中,功能块没有作用,没有错误报告
Scope | Name | Type | Comment |
Inout | Axis | AXIS_REF_SM3 | Axis |
Input | bExecute | BOOL | TRUE:启用函数块的执行 |
nControllerMode | LREAL | 转矩以Nm(旋转电机)或N表示(直线电机) | |
Output | bBusy | BOOL | TRUE:FB未空闲 |
bError | BOOL | TRUE:函数块中发生错误表示 | |
nErrorID | SMC_ERROR | 错误识别 |
功能块展示:
LD:
ST:
SMC_SetTorque_1(
Axis:=Axis_1 ,
bEnable:=SetTorquebExecute ,
fTorque:=Torque ,
bBusy=> ,
bError=> ,
nErrorID=> );
简单案例:
转矩控制相关程序
转矩模式切回位置模式或者速度模式,需要停止轴,不然伺服电机会有剧烈抖动,如过伺服电机报错,可通过SMC_Reset功能块复位清除错误。
可通过PDO映射Max Motor Speed来限制电机最高转速,保证安全。此参数只在转矩模式下生效。