汇川H5U PLC的运动控制功能块使用指南

一、主要知识点及详细说明

(一)运动控制器的启用与禁用 - MC_Power

  • 作用:MC_Power 功能块用于启用或禁用一个运动控制器,涉及激活或关闭与运动控制相关的硬件资源和功能,如驱动器、电机等,是进行运动控制操作的前置条件。
  • 详细说明:在使用任何运动控制功能块之前,通常需要先使用 MC_Power 来确保运动控制器处于正确的状态。通过设置输入参数 EnableTRUEFALSE 来启用或禁用控制器,同时可通过 Axis 参数指定要操作的轴,bRegulatorOnbDriveStart 可分别控制调节器和驱动器的启动,StatusError 输出参数可用于监控状态和错误信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_Power : MC_Power;
    bEnable : BOOL := TRUE; // 启用运动控制器
    bError : BOOL;
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_Power(
    Enable := bEnable,
    Axis := 'Axis_1', 
    bRegulatorOn := TRUE,
    bDriveStart := TRUE,
    Status => Status,
    Error => bError
    );
    // 该代码首先定义了一个 MC_Power 功能块实例 Axis1_MC_Power
    // bEnable 被设置为 TRUE,用于启用运动控制器
    // Axis 被指定为 'Axis_1',可根据实际情况修改
    // bRegulatorOn 和 bDriveStart 被设置为 TRUE,启动调节器和驱动器
    // Status 接收状态信息,bError 接收错误信息

(二)点动操作 - MC_Jog

  • 作用:MC_Jog 功能块实现点动功能,适用于设备的短距离手动控制,例如在调试、校准或手动调整设备位置时使用。
  • 详细说明:通过设置 bJogPlusbJogMinus 两个布尔变量为 TRUE 来控制轴的正向或反向点动,可调整 Velocity 来设置点动速度,同时使用 AccelerationDeceleration 控制点动时的加减速,JogVelocityOverride 可对速度进行百分比覆盖,通过 StatusError 输出状态和错误信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_Jog : MC_Jog;
    bJogPlus : BOOL := FALSE;
    bJogMinus : BOOL := FALSE;
    bError : BOOL;
    Status : WORD;
    JogVelocity : LREAL := 10.0; // 点动速度,单位根据实际情况而定,这里假设为 mm/s
    END_VAR
    //------------------------------------
    Axis1_MC_Jog(
    Axis := 'Axis_1', 
    JogForward := bJogPlus,
    JogBackward := bJogMinus,
    Velocity := JogVelocity,
    Acceleration := 100.0, // 加速度,单位根据实际情况而定,这里假设为 mm/s²
    Deceleration := 100.0, // 减速度,单位根据实际情况而定,这里假设为 mm/s²
    JogVelocityOverride := 100.0, // 速度覆盖百分比,这里假设为 100%
    Status => Status,
    Error => bError
    );
    // 此代码创建了 MC_Jog 功能块实例 Axis1_MC_Jog
    // 可通过设置 bJogPlus 或 bJogMinus 为 TRUE 进行正向或反向点动
    // JogVelocity 设定点动速度,Acceleration 和 Deceleration 设定加减速
    // JogVelocityOverride 可对速度进行覆盖,Status 接收状态,bError 接收错误信息

(三)绝对位置运动控制 - MC_MoveAbsolute

  • 作用:使设备从当前位置移动到一个预先设定的绝对位置,常用于需要精确位置控制的场合,如将机械手臂或工作台定位到指定位置。
  • 详细说明:设定 AbsolutePosition 为目标位置,Velocity 为运动速度,AccelerationDeceleration 控制加减速,Jerk 控制加加速度,通过 bExecute 触发运动,DoneBusyErrorStatus 可监控运动的完成、进行中、错误和状态信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_MoveAbsolute : MC_MoveAbsolute;
    bExecute : BOOL := FALSE;
    bDone : BOOL;
    bBusy : BOOL;
    bError : BOOL;
    AbsolutePosition : LREAL := 100.0; // 设定的绝对目标位置,单位根据实际情况而定,这里假设为 mm
    Velocity : LREAL := 50.0; // 设定的运动速度,单位根据实际情况而定,这里假设为 mm/s
    Acceleration : LREAL := 100.0; // 设定的加速度,单位根据实际情况而定,这里假设为 mm/s²
    Deceleration : LREAL := 100.0; // 设定的减速度,单位根据实际情况而定,这里假设为 mm/s²
    Jerk : LREAL := 500.0; // 设定的加加速度,单位根据实际情况而定,这里假设为 mm/s³
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_MoveAbsolute(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Position := AbsolutePosition,
    Velocity := Velocity,
    Acceleration := Acceleration,
    Deceleration := Deceleration,
    Jerk := Jerk,
    Done => bDone,
    Busy => bBusy,
    Error => bError,
    Status => Status
    );
    // 定义了 MC_MoveAbsolute 功能块实例 Axis1_MC_MoveAbsolute
    // bExecute 置为 TRUE 时触发绝对位置运动
    // 设定了绝对位置 AbsolutePosition、速度 Velocity 等参数
    // 可通过 Done、Busy、Error 和 Status 监控运动状态和信息

(四)复位操作 - MC_Reset

  • 作用:用于复位运动控制器或运动轴的状态,清除错误状态,使系统恢复到可操作的正常状态,常见于处理设备异常后的恢复操作。
  • 详细说明:使用 bExecute 触发复位操作,Axis 指定要复位的轴,通过 DoneBusyErrorStatus 来监控复位操作的完成、进行中、错误和状态信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_Reset : MC_Reset;
    bExecute : BOOL := FALSE;
    bDone : BOOL;
    bBusy : BOOL;
    bError : BOOL;
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_Reset(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Done => bDone,
    Busy => bBusy,
    Error => bError,
    Status => Status
    );
    // 此为 MC_Reset 功能块实例 Axis1_MC_Reset 的使用
    // 通过将 bExecute 置为 TRUE 来触发复位操作
    // Axis 为要复位的轴,通过相关输出参数监控复位情况

(五)回零操作 - MC_Home

  • 作用:执行回零操作,让设备的轴找到并确定零点位置,为后续精确运动控制提供基准。
  • 详细说明:选择合适的 Method 进行回零,设置 HomeSpeedHomeAcceleration 等参数,使用 bExecute 触发回零操作,通过 DoneBusyErrorStatus 监控回零的状态和信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_Home : MC_Home;
    bExecute : BOOL := FALSE;
    bDone : BOOL;
    bBusy : BOOL;
    bError : BOOL;
    HomeMethod : MC_HOME_METHOD := mcHomeMethod_0; // 回零方法,这里使用默认的零方法,可根据需要修改
    HomeSpeed : LREAL := 10.0; // 回零速度,单位根据实际情况而定,这里假设为 mm/s
    HomeAcceleration : LREAL := 50.0; // 回零加速度,单位根据实际情况而定,这里假设为 mm/s²
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_Home(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Method := HomeMethod,
    Velocity := HomeSpeed,
    Acceleration := HomeAcceleration,
    Done => bDone,
    Busy => bBusy,
    Error => bError,
    Status => Status
    );
    // 定义了 MC_Home 功能块实例 Axis1_MC_Home
    // 设定回零方法 Method 和回零速度 HomeSpeed 等参数
    // 通过 bExecute 触发回零操作,通过输出参数监控状态

(六)立即停止操作 - MC_ImmediateStop

  • 作用:使运动轴在最短时间内停止,不考虑当前位置、速度等状态,用于紧急情况以保障设备和人员安全。
  • 详细说明:将 bExecute 置为 TRUE 触发立即停止操作,Axis 指定要操作的轴,通过 DoneErrorStatus 监控操作的完成、错误和状态信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_ImmediateStop : MC_ImmediateStop;
    bExecute : BOOL := FALSE;
    bDone : BOOL;
    bError : BOOL;
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_ImmediateStop(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Done => bDone,
    Error => bError,
    Status => Status
    );
    // 该代码创建了 MC_ImmediateStop 功能块实例 Axis1_MC_ImmediateStop
    // 将 bExecute 置为 TRUE 可触发轴的立即停止操作
    // 可通过输出参数了解操作状态和错误信息

(七)受控停止操作 - MC_Stop

  • 作用:根据预设的减速度或停止模式使运动轴逐渐停止,提供比立即停止更平稳的停止方式,适用于正常的停止操作。
  • 详细说明:设置 DecelerationStopMode 参数,使用 bExecute 触发停止操作,通过 DoneBusyErrorStatus 监控停止操作的状态和信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_Stop : MC_Stop;
    bExecute : BOOL := FALSE;
    bDone : BOOL;
    bBusy : BOOL;
    bError : BOOL;
    Deceleration : LREAL := 50.0; // 设定的减速度,单位根据实际情况而定,这里假设为 mm/s²
    StopMode : MC_STOP_MODE := mcStopMode_1; // 设定的停止模式,可根据需要修改
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_Stop(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Deceleration := Deceleration,
    StopMode := StopMode,
    Done => bDone,
    Busy => bBusy,
    Error => bError,
    Status => Status
    );
    // 此代码使用 MC_Stop 功能块 Axis1_MC_Stop 实现受控停止
    // 可设置 Deceleration 和 StopMode 进行不同方式的停止
    // 利用输出参数监控停止操作的进展和状态

(八)相对位置运动控制 - MC_MoveRelative

  • 作用:控制设备从当前位置移动一段相对距离,可方便地进行相对位置调整,无需精确计算绝对位置。
  • 详细说明:设定 Distance 为相对移动距离,Velocity 为运动速度,AccelerationDeceleration 控制加减速,Jerk 控制加加速度,通过 bExecute 触发运动,使用 DoneBusyErrorStatus 监控运动状态。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_MoveRelative : MC_MoveRelative;
    bExecute : BOOL := FALSE;
    bDone : BOOL;
    bBusy : BOOL;
    bError : BOOL;
    Distance : LREAL := 50.0; // 设定的相对移动距离,单位根据实际情况而定,这里假设为 mm
    Velocity : LREAL := 30.0; // 设定的运动速度,单位根据实际情况而定,这里假设为 mm/s
    Acceleration : LREAL := 80.0; // 设定的加速度,单位根据实际情况而定,这里假设为 mm/s²
    Deceleration : LREAL := 80.0; // 设定的减速度,单位根据实际情况而定,这里假设为 mm/s²
    Jerk : LREAL := 400.0; // 设定的加加速度,单位根据实际情况而定,这里假设为 mm/s³
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_MoveRelative(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Distance := Distance,
    Velocity := Velocity,
    Acceleration := Acceleration,
    Deceleration := Deceleration,
    Jerk := Jerk,
    Done => bDone,
    Busy => bBusy,
    Error => bError,
    Status => Status
    );
    // 此为 MC_MoveRelative 功能块实例 Axis1_MC_MoveRelative 的使用代码
    // 设定相对移动距离 Distance 及相关运动参数
    // 通过 bExecute 触发运动,输出参数监控运动状态

(九)位置设置操作 - MC_SetPosition

  • 作用:设置运动轴的当前位置值,用于系统初始化、位置传感器校准或异常情况导致位置信息不准确时重新设定位置。
  • 详细说明:设定 NewPosition 为新的位置值,使用 bExecute 触发位置设置操作,通过 DoneErrorStatus 监控操作完成、错误和状态信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_SetPosition : MC_SetPosition;
    bExecute : BOOL := FALSE;
    bDone : BOOL;
    bError : BOOL;
    NewPosition : LREAL := 100.0; // 设定的新位置值,单位根据实际情况而定,这里假设为 mm
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_SetPosition(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Position := NewPosition,
    Done => bDone,
    Error => bError,
    Status => Status
    );
    // 此代码通过 MC_SetPosition 功能块 Axis1_MC_SetPosition 来设置轴的位置
    // 设定新位置 NewPosition,bExecute 触发操作
    // 可通过输出参数了解操作结果和状态

(十)转矩控制 - MC_TorqueControl

  • 作用:精确控制设备的输出转矩,适用于需要精确转矩控制的场合,如拧紧螺丝、卷绕线缆、压力控制等。
  • 详细说明:设定 TorqueSetpoint 为转矩设定值,TorqueRamp 控制转矩的平滑变化,通过 bExecute 触发操作,使用 DoneBusyErrorStatus 监控操作状态。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_TorqueControl : MC_TorqueControl;
    bExecute : BOOL := FALSE;
    bDone : BOOL;
    bBusy : BOOL;
    bError : BOOL;
    TorqueSetpoint : LREAL := 5.0; // 设定的转矩设定值,单位根据实际情况而定,这里假设为 N·m
    TorqueRamp : LREAL := 1.0; // 转矩斜坡值,用于平滑转矩的变化,单位根据实际情况而定,这里假设为 N·m/s
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_TorqueControl(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Torque := TorqueSetpoint,
    TorqueRamp := TorqueRamp,
    Done => bDone,
    Busy => bBusy,
    Error => bError,
    Status => Status
    );
    // 此代码使用 MC_TorqueControl 功能块 Axis1_MC_TorqueControl 进行转矩控制
    // 设定转矩设定值 TorqueSetpoint 和转矩斜坡值 TorqueRamp
    // 利用输出参数监控转矩控制操作的状态

(十一)读取实际位置 - MC_ReadActualPosition

  • 作用:读取运动轴的当前实际位置,为运动控制决策、位置闭环控制和位置信息交互提供依据。
  • 详细说明:通过 bExecute 触发位置读取操作,可设置为持续使能或按需使能,通过 Valid 判断读取的位置信息是否有效,使用 Position 获取实际位置,通过 ErrorStatus 监控错误和状态信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_ReadActualPosition : MC_ReadActualPosition;
    bExecute : BOOL := TRUE; // 通常可以持续使能该功能块
    bValid : BOOL;
    bError : BOOL;
    ActualPosition : LREAL;
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_ReadActualPosition(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Valid => bValid,
    Position => ActualPosition,
    Error => bError,
    Status => Status
    );
    // 此代码使用 MC_ReadActualPosition 功能块 Axis1_MC_ReadActualPosition 读取实际位置
    // 可根据需要设置 bExecute 触发位置读取
    // 通过输出参数判断位置有效性、获取位置和监控状态

(十二)读取实际转矩 - MC_ReadActualTorque

  • 作用:读取运动轴的当前实际转矩值,用于监测设备负载、实现转矩闭环控制和故障诊断。
  • 详细说明:使用 bExecute 触发转矩读取操作,可按需设置,通过 Valid 判断读取的转矩信息是否有效,使用 Torque 获取实际转矩,通过 ErrorStatus 监控错误和状态信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_ReadActualTorque : MC_ReadActualTorque;
    bExecute : BOOL := TRUE; // 可以根据需要设置为持续使能或按需使能
    bValid : BOOL;
    bError : BOOL;
    ActualTorque : LREAL;
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_ReadActualTorque(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Valid => bValid,
    Torque => ActualTorque,
    Error => bError,
    Status => Status
    );
    // 此代码通过 MC_ReadActualTorque 功能块 Axis1_MC_ReadActualTorque 读取实际转矩
    // 可按需设置 bExecute 触发读取操作
    // 利用输出参数判断转矩有效性、获取转矩和监控状态

(十三)读取实际速度 - MC_ReadActualVelocity

  • 作用:读取运动轴的当前实际速度,用于监控设备速度、实现速度闭环控制和故障诊断。
  • 详细说明:使用 bExecute 触发速度读取操作,可按需设置,通过 Valid 判断读取的速度信息是否有效,使用 Velocity 获取实际速度,通过 ErrorStatus 监控错误和状态信息。
  • 代码示例
    PROGRAM Main
    VAR
    Axis1_MC_ReadActualVelocity : MC_ReadActualVelocity;
    bExecute : BOOL := TRUE; // 可以根据需要设置为持续使能或按需使能
    bValid : BOOL;
    bError : BOOL;
    ActualVelocity : LREAL;
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_ReadActualVelocity(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Valid => bValid,
    Velocity => ActualVelocity,
    Error => bError,
    Status => Status
    );
    // 此代码使用 MC_ReadActualVelocity 功能块 Axis1_MC_ReadActualVelocity 读取实际速度
    // 可按需设置 bExecute 触发读取操作
    // 利用输出参数判断速度有效性、获取速度和监控状态

(十四)读取轴错误信息 - MC_ReadAxisError

  • 作用:读取运动轴的错误信息,用于故障诊断和处理,提高系统可靠性和可维护性。
  • 详细说明:使用 bExecute 触发错误信息读取操作,可按需设置,通过 Error 判断是否存在错误,使用 ErrorCodeErrorID 获取错误代码和标识符,通过 Status 监控状态信息。
  • 代码示例
    
    PROGRAM Main
    VAR
    Axis1_MC_ReadAxisError : MC_ReadAxisError;
    bExecute : BOOL := TRUE; // 通常可设置为持续使能
    bErrorDetected : BOOL;
    ErrorCode : WORD;
    ErrorID : WORD;
    Status : WORD;
    END_VAR
    //------------------------------------
    Axis1_MC_ReadAxisError(
    Axis := 'Axis_1', 
    Execute := bExecute,
    Error => bErrorDetected,
    ErrorCode => ErrorCode,
    ErrorID => ErrorID,
    Status => Status
    );
    // 此代码通过 MC_ReadAxisError 功能