机器自动化控制器——第三章 轴指令 6
MC_MoveVelocity
- 使用伺服驱动器的位置控制模式,进行模拟速度控制。
指令 | 名称 | FB/ FUN | 图形表现 | ST表现 |
---|---|---|---|---|
MC_MoveVelocity | 速度控制 | FB | ![]() | MC_MoveVelocity_instance ( Axis :=《参数》 , Execute :=《参数》 , Velocity :=《参数》 , Acceleration :=《参数》 , Deceleration :=《参数》 , Jerk :=《参数》 , Direction :=《参数》 , Continuous :=《参数》 , BufferMode :=《参数》 , InVelocity =>《参数》 , Busy =>《参数》 , Active =>《参数》 , CommandAborted =>《参数》 , Error =>《参数》 , ErrorID =>《参数》 ); |
变量
▶输入变量
输入变量 | 名称 | 数据类型 | 有效范围 | 初始值 | 内容 |
---|---|---|---|---|---|
Execute | 启动 | BOOL | TRUE, FALSE | FALSE | 在上升沿开始指令。 |
Velocity | 目标速度 | LREAL | 正数或“0” | 0 | 指定目标速度。 单位为[指令单位/s] 。 *1 |
Acceleration | 加速度 | LREAL | 正数或“0” | 0 | 指定加速度。 单位为[指令单位/s2]。*1 |
Deceleration | 减速度 | LREAL | 正数或“0” | 0 | 指定减速度。 单位为[指令单位/s2]。*1 |
Jerk | 跃度 | LREAL | 正数或“0” | 0 | 指定跃度。 单位为[指令单位/s3]。*1 |
Direction | 方向选择 | _eMC_ DIRECTION | 0: _mcPositiveDirection 2: _mcNegativeDirection 3: _mcCurrentDirection | 0 *2 | 指定旋转方向。 0:指定为正方向 2:指定为负方向 3:指定为当前方向 |
BufferMode | 缓存 模式选择 | _eMC_BUFFER_ MODE | 0: _mcAborting 1: _mcBuffered | 0 *2 | 指定多重启动运动指令时的动 作。 0:中断 1:等待 |
Continuous (Reserved) | 持续方法 选择 | BOOL | TRUE, FALSE | FALSE | (Reserved) |
- 1.关于指令单位,请参阅“NJ/NX系列CPU单元用户手册运动控制篇(SBCE-363)”或“NY系列工业用平板电脑/工业用台式电脑用户手册运动控制篇(SBCE-379)”的“单位转换设定”。
- 2.有效范围为枚举体的变量,其实际初始值不是数值,而是枚举元素。
▶输出变量
输出变量 | 名称 | 数据类型 | 有效范围 | 内容 |
---|---|---|---|---|
InVelocity | 达到目标速度 | BOOL | TRUE, FALSE | 达到目标速度后变为TRUE。 |
Busy | 执行中 | BOOL | TRUE, FALSE | 接收指令后变为TRUE。 |
Active | 控制中 | BOOL | TRUE, FALSE | 控制中变为TRUE。 |
CommandAborted | 执行中断 | BOOL | TRUE, FALSE | 指令中止时,变为TRUE。 |
Error | 错误 | BOOL | TRUE, FALSE | 发生异常时变为TRUE。 |
ErrorID | 错误代码 | WORD | * | 发生异常时,输出错误代码。16#0000为正常。 |
- 请参阅“A-1错误代码一览(P.A-2)”。
▶输入输出变量
输入输出变量 | 名称 | 数据类型 | 有效范围 | 内容 |
---|---|---|---|---|
Axis | 轴 | _sAXIS_REF | - | 指定轴。 *1 |
-
- 请使用在Sysmac Studio的轴基本设定画面中创建的用户定义变量的轴变量名称(默认 “MC_Axis***”)或系统定义变量的 轴变量名称(_MC_AX[], _MC1_AX[], _MC2_AX[*])。
功能说明
▶指令详情
► Direction(方向选择)
▶时序图
▶重启运动指令
▶多重启动运动指令
► 其它指令执行中的本指令启动
缓存模式选择 | 说明 |
---|---|
中断 | 立即中止当前正在执行的指令,切换为本指令。 轴的动作方向因指令切换而反转时,根据轴参数中的“反转时动作”进行反转。 |
等待 | 当前正在执行的指令正常完成后,已缓存的本指令自动启动。 |
► 本指令执行中的其它指令启动
▶异常
► 发生异常时的时序图
► 错误代码
动作示例
- 下面,对转盘或离心分离器之类的速度控制中的示例程序进行说明。
► 轴参数的设定
轴种类
轴 | 轴种类 |
---|---|
轴1 | 伺服轴 |
▶动作示例
► 动作模式
1 速度控制的开始
2 变更为第2速度
3 变更为第3速度
4 速度控制的停止
▶梯形图
► 主要变量
名称 | 数据类型 | 初始值 | 注释 |
---|---|---|---|
MC_Axis000 | _sAXIS_REF | - | 轴1的轴变量。 |
MC_Axis000.MFaultLvl.Active | BOOL | FALSE | 轴1发生轻度故障等级的异常时变为TRUE。 |
MC_Axis000.Details.Homed | BOOL | FALSE | 轴1为原点确定状态时变为TRUE。 |
Pwr_Status | BOOL | FALSE | 分配给MC_Power的实例PWR的输出变量Status的变 量。进入伺服ON状态时,该变量变为TRUE。 |
StartPg | BOOL | FALSE | 如果该变量为TRUE,EtherCAT的过程数据通信已 建立,则进入伺服ON状态。 |
Vel_Act | BOOL | FALSE | 分配给MC_MoveVelocity的实例VEL的输出Active的 变量。实例VEL处于控制中时,该变量变为TRUE。 |
Set_Ov_Velfct | LREAL | 0 | 超调值。 |
StopTrig | BOOL | FALSE | 该变量为TRUE时,执行MC_Stop。 |
Sensor1 | BOOL | FALSE | 检测到药液投入时变为TRUE。 轴1处于伺服ON状态时,启动MC_MoveVelocity (速度控制)。 |
Sensor2 | BOOL | FALSE | 该变量为TRUE时,将超调值设定为500%。该变 量变为TRUE时保持状态;Sensor3变为TRUE时, 则该变量变为FALSE。 |
Sensor3 | BOOL | FALSE | 该变量为TRUE时,将超调值设定为200%。该变 量变为TRUE时保持状态。 |
► 时序图
► 示例程序
► 内联ST的内容
// 根据传感器的状态设置速度因子
IF (Sensor2 = FALSE) AND (Sensor3 = FALSE) THEN
Set_Ov_Velfct := LREAL#100.0;
ELSIF (Sensor2 = TRUE) AND (Sensor3 = FALSE) THEN
Set_Ov_Velfct := LREAL#500.0;
ELSIF (Sensor2 = FALSE) AND (Sensor3 = TRUE) THEN
Set_Ov_Velfct := LREAL#200.0;
ELSE
Set_Ov_Velfct := LREAL#200.0;
END_IF;
▶结构文本(ST)
► 主要变量
名称 | 数据类型 | 初始值 | 注释 |
---|---|---|---|
MC_Axis000 | _sAXIS_REF | - | 轴1的轴变量。 |
MC_Axis000.MFaultLvl.Active | BOOL | FALSE | 轴1发生轻度故障等级的异常时变为TRUE。 |
MC_Axis000.Details.Homed | BOOL | FALSE | 轴1为原点确定状态时变为TRUE。 |
Pwr_Status | BOOL | FALSE | 分配给MC_Power的实例PWR的输出变量Status的变 量。进入伺服ON状态时,该变量变为TRUE。 |
StartPg | BOOL | FALSE | 如果该变量为TRUE,EtherCAT的过程数据通信已 建立,则进入伺服ON状态。 |
Vel_Act | BOOL | FALSE | 分配给MC_MoveVelocity的实例VEL的输出Active的 变量。实例VEL处于控制中时,该变量变为 TRUE。 |
Set_Ov_Velfct | LREAL | 0 | 超调值。 |
StopTrig | BOOL | FALSE | 该变量为TRUE时,执行MC_Stop。 |
Sensor1 | BOOL | FALSE | 检测到药液投入时变为TRUE。 轴1处于伺服ON状态时,启动MC_MoveVelocity(速 度控制)指令。 |
Sensor2 | BOOL | FALSE | 该变量为TRUE时,将超调值设定为500%。该变 量变为TRUE时保持状态;Sensor3变为TRUE时, 则该变量变为FALSE。 |
Sensor3 | BOOL | FALSE | 该变量为TRUE时,将超调值设定为200%。该变 量变为TRUE时保持状态。 |
Vel_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动MC_MoveVelocity 的实例VEL。 |
Set_Ov_En | BOOL | FALSE | 该变量为TRUE期间,执行MC_SetOverride的实例 SET_OV。 |
Stp_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动MC_Stop的实例 STP。 |
InitFlag | BOOL | FALSE | 表示输入参数设定完成。 FALSE时,设定输入参数。输入参数设定完成后, 变为TRUE。 |
► 时序图
► 示例程序
// 未设定输入参数时的处理
IF InitFlag = FALSE THEN
// MC_MoveVelocity 参数
Vel_Vel := LREAL#1048576.0;
Vel_Acc := LREAL#1048576.0;
Vel_Dec := LREAL#1048576.0;
Vel_Dir := _eMC_DIRECTION#_mcPositiveDirection;
// MC_SetOverride 参数
Set_Ov_Velfct := LREAL#100.0;
// MC_Stop 参数
Stp_Dec := LREAL#524288.0;
// 设定输入参数后,将 InitFlag 设为 TRUE
InitFlag := TRUE;
END_IF;
// StartPg 为 TRUE 时,确认伺服驱动器处于伺服准备就绪状态,
// 将轴1设为伺服 ON 状态。
// 如果未处于伺服准备就绪状态,则设为伺服 OFF。
IF (StartPg = TRUE) AND (MC_Axis000.DrvStatus.Ready = TRUE) THEN
Pwr_En := TRUE;
ELSE
Pwr_En := FALSE;
END_IF;
// 轴1发生轻度故障后,执行异常时处理 FaultHandler。
// 发生异常时的处理 (FaultHandler) 由客户根据装置进行编程。
IF MC_Axis000.MFaultLvl.Active = TRUE THEN
FaultHandler();
END_IF;
// 轴1处于伺服 ON 状态,且触点 Sensor1 为 TRUE 时,启动 MC_MoveVelocity。
IF (Pwr_Status = TRUE) AND (Sensor1 = TRUE) THEN
Vel_Ex := TRUE;
END_IF;
// 在 MC_MoveVelocity 控制中,根据触点 Sensor2 和触点 Sensor3 的 ON/OFF,变更超调值。
IF Vel_Act = TRUE THEN
IF (Sensor2 = FALSE) AND (Sensor3 = FALSE) THEN
Set_Ov_Velfct := LREAL#100.0;
ELSIF (Sensor2 = TRUE) AND (Sensor3 = FALSE) THEN
Set_Ov_Velfct := LREAL#500.0;
ELSIF (Sensor2 = FALSE) AND (Sensor3 = TRUE) THEN
Set_Ov_Velfct := LREAL#200.0;
ELSE
Set_Ov_Velfct := LREAL#200.0;
END_IF;
END_IF;
// 在 MC_MoveVelocity 控制中启动 MC_SetOverride。
IF Vel_Act = TRUE THEN
Set_Ov_En := TRUE;
END_IF;
// StopTrig 为 TRUE 时启动 MC_Stop。
IF StopTrig = TRUE THEN
Stp_Ex := TRUE;
END_IF;
// MC_Power
PWR(
Axis := MC_Axis000,
Enable := Pwr_En,
Status => Pwr_Status,
Busy => Pwr_Bsy,
Error => Pwr_Err,
ErrorID => Pwr_ErrID
);
// MC_MoveVelocity
VEL(
Axis := MC_Axis000,
Execute := Vel_Ex,
Velocity := Vel_Vel,
Acceleration := Vel_Acc,
Deceleration := Vel_Dec,
Direction := Vel_Dir,
InVelocity => Vel_Invel,
Busy => Vel_Bsy,
Active => Vel_Act,
CommandAborted => Vel_Ca,
Error => Vel_Err,
ErrorID => Vel_ErrID
);
// MC_SetOverride
SET_OV(
Axis := MC_Axis000,
Enable := Set_Ov_En,
VelFactor := Set_Ov_Velfct,
AccFactor := Set_Ov_Accfct,
JerkFactor := Set_Ov_Jfct,
Busy => Set_Ov_Bsy,
Enabled => Set_Ov_End,
Error => Set_Ov_Err,
ErrorID => Set_Ov_ErrID
);
// MC_Stop
STP(
Axis := MC_Axis000,
Execute := Stp_Ex,
Deceleration := Stp_Dec,
Done => Stp_D,
Busy => Stp_Bsy,
Active => Stp_Act,
CommandAborted => Stp_Ca,
Error => Stp_Err,
ErrorID => Stp_ErrID
);