3. 轴指令(omron 机器自动化控制器)——>MC_MoveVelocity

机器自动化控制器------第三章 轴指令 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
    1. 请使用在Sysmac Studio的轴基本设定画面中创建的用户定义变量的轴变量名称(默认 "MC_Axis***")或系统定义变量的 轴变量名称(_MC_AX[], _MC1_AX[], _MC2_AX[*])。

功能说明

  • 进行基于位置控制的模拟速度控制。
  • 在Execute(启动)的上升沿,开始速度控制的动作。
▶指令详情
  • 下面对指令详细说明。

► Direction(方向选择)

  • 通过Direction(方向选择)指定移动方向。
  • Direction(方向选择)为"指定为正方向"时正方向移动;为"指定为负方向"时负方向移动。
  • Direction(方向选择)为"指定为当前方向"时,动作因轴是否停止而不同。
  • 轴已停止时,轴沿着上次的移动方向进行移动。
  • 接通电源或重启电源时正方向移动。
  • 使用注意事项
  • 多重启动运动指令使轴移动的过程中启动本指令时,沿当前移动的方向移动。
  • Direction(方向选择)选择"3: _mcCurrentDirection(指定为当前方向)"时,沿着前一动作的指令方向进行动作。
  • 因此,根据指令组合的不同,可能与前一动作的运动指令的输入发出指令的方向不一致。
  • 使用"3: _mcCurrentDirection(指定为当前方向)"时,请通过轴变量的Dir.Posi(正方向指令中)、以及Dir.Nega(负方向指令中)确认当前方向。
▶时序图
  • 在启动Execute(启动)的同时,Busy(执行中)变为TRUE。
  • 在下一个周期Active(控制中)变为TRUE。
  • 达到Velocity(目标速度)时,InVelocity(达到目标速度)变为TRUE。
  • 利用其它指令中止本指令时,CommandAborted(执行中断)变为TRUE,Busy(执行中)、Active(控制中)、InVelocity(达到目标速度)变为FALSE。
  • InVelocity(达到目标速度)是表示对于启动本指令和重启运动指令达到等速的输出。
  • 因此,InVelocity(达到目标速度)变为TRUE后,即使利用超调来变更速度,InVelocity(达到目标速度)也不会变为FALSE。
  • 并且,在InVelocity(达到目标速度)变为TRUE之前已变更超调时,如果已达到变更目标速度,则InVelocity(达到目标速度)变为TRUE。
  • 可在输入变量中指定Acceleration(加速度)、Deceleration(减速度)、Jerk(跃度)。
  • 将Velocity(目标速度)指定为"0"并启动时,轴不会移动,但处于连续动作中。
  • 将Velocity(目标速度)设为"0"并启动时的动作示例如下所示。
  • 将加速度、或减速度指定为"0"并启动后,不作加减速而达到目标速度。
  • 加速度为"0"时的动作示例如下所示。
  • 需要平稳加减速时指定Jerk(跃度)。
  • 指定Jerk(跃度)后的动作示例如下所示。
  • 关于Jerk(跃度)的详情,请参阅"NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)"或"NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)"。
▶重启运动指令
  • 在连续动作中变更输入参数,再次将Execute(启动)设为TRUE,可变更本指令的动作。
  • 重启运动指令可变更的输入变量有Velocity(目标速度)、Acceleration(加速度)、Deceleration(减速度)。
  • 重启运动指令变更Velocity(目标速度)时,InVelocity(达到目标速度)针对重启而设定的新目标速度进行动作。
  • 重启运动指令的详情,请参阅"NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)"或"NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)"。
▶多重启动运动指令
  • 多重启动运动指令的详情,请参阅"NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)"或"NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)"。

► 其它指令执行中的本指令启动

  • 对当前正在执行的指令启动本指令,可切换或缓存到本指令。
  • 各轴可缓存到1个。
  • 多重启动时的本指令的动作由BufferMode(缓存模式选择)指定。
缓存模式选择 说明
中断 立即中止当前正在执行的指令,切换为本指令。 轴的动作方向因指令切换而反转时,根据轴参数中的"反转时动作"进行反转。
等待 当前正在执行的指令正常完成后,已缓存的本指令自动启动。
  • 关于BufferMode(缓存模式选择),请参阅"NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)"或"NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)"。

► 本指令执行中的其它指令启动

  • 只有对其他指令的BufferMode(缓存模式选择)指定中断和等待时,才能在执行本指令时,利用其它指令多重启动运动指令。
  • 指定等待时,如果本指令的输出变量"InVelocity(达到目标速度)"变为TRUE,则开始多重启动指令的动作。
▶异常
  • 在执行本指令中发生异常时,Error(错误)变为TRUE,轴停止动作。
  • 可查看ErrorID(错误代码)的输出值,了解发生异常的原因。

► 发生异常时的时序图

► 错误代码

  • 关于指令发生的异常,请参阅"A-1 错误代码一览(P.A-2)"。

动作示例

  • 下面,对转盘或离心分离器之类的速度控制中的示例程序进行说明。

► 轴参数的设定

  • 该示例程序中使用的最少的必要设定如下所示。

轴种类

轴种类
轴1 伺服轴
▶动作示例

► 动作模式

1 速度控制的开始

  • 将对药液投入进行检测的传感器1设为"ON"时,轴1开始速度控制。

2 变更为第2速度

  • 将Sensor2(触点)设为"ON"时,设定为超调500%,速度得以变更。

3 变更为第3速度

  • 将Sensor3(触点)设为"ON"时,设定为超调200%,速度得以变更。
  • 将Sensor2和Sensor3同时设为"ON"时,则为超调200%。

4 速度控制的停止

  • 将停止指令(StopTrig)设为"ON"时,停止减速。
▶梯形图

► 主要变量

名称 数据类型 初始值 注释
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的内容

stylus 复制代码
// 根据传感器的状态设置速度因子
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。

► 时序图

► 示例程序

stylus 复制代码
// 未设定输入参数时的处理
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
);
相关推荐
啵一杯1 小时前
leetcode621. 任务调度器
服务器·前端·数据结构·算法·c#
KookeeyLena82 小时前
提取出来的ip与我原本的ip是在同一个区吗
服务器·网络协议·tcp/ip
鼠鼠龙年发大财3 小时前
【tbNick专享】虚拟机域控、成员服务器、降级等管理
运维·服务器
Lilixxs4 小时前
MobaXterm基本使用 -- 服务器状态、批量操作、显示/切换中文字体、修复zsh按键失灵
运维·服务器·前端
醉颜凉4 小时前
银河麒麟桌面操作系统如何添加WPS字体
运维·服务器·kylin·wps·麒麟·wps添加字体
-SGlow-4 小时前
Linux相关概念和重要知识点(7)(git、冯诺依曼体系结构)
linux·运维·git
江凡心4 小时前
Qt 每日面试题 -5
服务器·数据库·qt·学习·面试
EterNity_TiMe_4 小时前
【Linux基础IO】深入解析Linux基础IO缓冲区机制:提升文件操作效率的关键
linux·运维·服务器·开发语言·学习·性能优化·学习方法
苏湘涵5 小时前
进程的那些事--实现shell
linux·运维·服务器
戏神5 小时前
静态路由和默认路由(实验)
运维·网络·h3c·静态路由·默认路由