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

发布于:2024-10-12 ⋅ 阅读:(188) ⋅ 点赞:(1)

MC_MoveFeed

  • 指定自外部输入的中断输入发生位置起的移动距离,进行定位。
  • 可实现中断标准定位的控制为绝对值定位、相对值定位、速度控制。
指令 名称 FB/
FUN
图形表现 ST表现
MC_MoveFeed 中断标准定位 FB 描述文本 MC_MoveFeed_instance (
Axis :=《参数》 ,
TriggerInput :=《参数》 ,
TriggerVariable :=《参数》 ,
Execute :=《参数》 ,
WindowOnly :=《参数》 ,
FirstPosition :=《参数》 ,
LastPosition :=《参数》 ,
ReferenceType :=《参数》 ,
Position :=《参数》 ,
Velocity :=《参数》 ,
Acceleration :=《参数》 ,
Deceleration :=《参数》 ,
Jerk :=《参数》 ,
Direction :=《参数》 ,
MoveMode :=《参数》 ,
FeedDistance :=《参数》 ,
FeedVelocity :=《参数》 ,
BufferMode :=《参数》 ,
ErrorDetect :=《参数》 ,
Done =>《参数》 ,
InFeed =>《参数》 ,
Busy =>《参数》 ,
Active =>《参数》 ,
CommandAborted =>《参数》 ,
Error =>《参数》 ,
ErrorID =>《参数》
);
变量
▶输入变量
输入变量 名称 数据类型 有效范围 初始值 内容
Execute 启动 BOOL TRUE, FALSE FALSE 在上升沿开始指令。
WindowOnly 窗口有效 BOOL TRUE, FALSE FALSE 指定窗口的有效/无效。
FirstPosition 起始位置 LREAL 负数、正数、“0” 0 指定锁定有效的位置。
单位为[指令单位]。 *1
LastPosition 终止位置 LREAL 负数、正数、“0” 0 指定锁定无效的位置。
单位为[指令单位]。*1
ReferenceType 位置类型
选择
_eMC_
REFERENCE_
TYPE
1: _mcFeedback 1 *2 指定位置类型。
1:反馈位置(同一任务周期 *3下
的取值)
Position 目标位置 LREAL 负数、正数、“0” 0 MoveMode为[0:绝对值定位]时,
指定绝对坐标的目标位置。
MoveMode为[1:相对值定位]时,
指定移动距离。
MoveMode为[2:速度控制]时,无
需指定。
单位为[指令单位]。*1
Velocity 目标速度 LREAL 正数*4 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
1: _mcShortestWay
2: _mcNegativeDirection
3: _mcCurrentDirection
4: _mcNoDirection
0 *2 MoveMode为[0:绝对值定位] *5,
计数模式为[旋转模式]时,指定旋
转方向。
0:指定为正方向
1:指定为附近
2:指定为负方向
3:指定为当前方向
4:无方向指定
MoveMode 移动方法
选择
_eMC_MOVE_
MODE
0: _mcAbsolute
1: _mcRelative
2: _mcVelocity
0 *2 选择移动方法。
0:绝对值定位
1:相对值定位
2:速度控制
FeedDistance 标准距离 LREAL 负数、正数、“0” 0 指定中断输入后的移动距离。
沿着与中断输入前动作方向相同
的方向使之按照标准距离动作时,
设为正数;反方向动作时,设为
负数。
单位为[指令单位]。*1
FeedVelocity 标准速度 LREAL 正数 0 指定中断输入后的移动目标速度。
单位为[指令单位/s]。*1
BufferMode 缓存
模式选择
_eMC_
BUFFER_
MODE
0: _mcAborting
1: _mcBuffered
0 *2 指定多重启动运动指令时的动作。
0:中断
1:等待
ErrorDetect 错误检测
选择
BOOL TRUE, FALSE FALSE 无中断输入时,指定是否执行异
常检测。
TRUE:执行异常检测
FALSE:不执行异常检测
  • 1.关于指令单位,请参阅“NJ/NX系列CPU单元用户手册运动控制篇(SBCE-363)”或“NY系列工业用平板电脑/工业用台式电脑用户手册运动控制篇(SBCE-379)”的“单位转换设定”。
  • 2.有效范围为枚举体的变量,其实际初始值不是数值,而是枚举元素。
  • 3.任务周期分为原始恒定周期任务的周期和固定周期任务(执行优先度5)的周期。
  • 4.MoveMode中指定“2:_mcVelocity”时,也可以为“0”。
  • 5.MoveMode为[0:绝对值定位],计数模式为[线性模式]时,移动到指定位置。MoveMode为[1:相对值定位]时,移动方向由Position的符号决定。MoveMode为[2:速度控制]时,无论计数器模式如何,均无法选择“1:_mcShortestWay”和“4:_mcNoDirection”。
▶输出变量
输出变量 名称 数据类型 有效范围 内容
Done 完成 BOOL TRUE,
FALSE
指令执行完毕时变为TRUE。
InFeed 标准传送中 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 *1 发生异常时,输出错误代码。16#0000为正常。
  • 1.请参阅“A-1错误代码一览(P.A-2)”。发生异常时,输出错误代码。

    ► 输出变量的反映时间

变量 变为TRUE的时间 变为FALSE的时间
Done 指令完成时 • Execute为TRUE时,与Execute的FALSE同时
• Execute为FALSE时,1个周期后
Busy Execute的上升沿 • Done变为TRUE时
• Error变为TRUE时
• CommandAborted变为TRUE时
Active 开始指令后 • Done变为TRUE时
• Error变为TRUE时
• CommandAborted变为TRUE时
InFeed 中断输入后,开始标准距离动作时*1 • Done变为TRUE时
• Error变为TRUE时
• CommandAborted变为TRUE时
CommandAborted • 利用其它指令多重启动运动指令(中断),中止本
指令时
• 因发生异常,中止本指令时
• 发生异常过程中,启动本指令时
• 执行MC_Stop指令中,启动本指令时
• Execute为TRUE时,与Execute的FALSE同时
• Execute为FALSE时,1个周期后
Error 本指令的启动条件或输入参数中含有异常因素时 异常已解除时
  • 1.从中断输入“ON”到InFeed变为TRUE之前,可能延迟数个任务周期。任务周期分为原始恒定周期任务的周期和固定周期任务(执行优先度5)的周期。
▶输入输出变量
输入输出变量 名称 数据类型 有效范围 内容
Axis _sAXIS_REF 指定轴。 *1
TriggerInput 触发输入条件 _sTRIGGER_REF 设定触发条件。 *2
TriggerVariable 触发变量 BOOL TRUE,
FALSE
在触发条件下指定控制器模式时,指定触发的输入
变量。
  • 1.请使用在Sysmac Studio的轴基本设定画面中创建的用户定义变量的轴变量名称(默认 “MC_Axis***”)或系统定义变量的 轴变量名称(_MC_AX[], _MC1_AX[], _MC2_AX[*])。 TriggerInput 触发输入条件 _sTRIGGER_REF - 设定触发条件。 _
  • _2. 请定义_sTRIGGER_REF型的用户定义变量。

    ► _sTRIGGER_REF

结构要素变量 名称 数据类型 有效范围 功能
Mode 模式 _eMC_
TRIGGER_
MODE
0: _mcDrive
1: _mcController
指定触发模式。
0:驱动器模式
1:控制器模式
LatchID 锁定ID
选择
_eMC_
TRIGGER_
LATCHID
0: _mcLatch1
1: _mcLatch2
在驱动器模式下,指定使用2个锁定功能中的哪
一个。
0:锁定功能1
1:锁定功能2
InputDrive 驱动触发
输入信号
_eMC_
TRIGGER_
INPUT_DRIVE
0: _mcEncoderMark
1: _mcEXT
在驱动器模式下指定驱动器的触发信号。
0:Z相
1:外部输入

功能说明

  • 在Execute(启动)的上升沿,根据MoveMode(移动方法选择)的设定,按照绝对值移动、相对值移动或速度控制中的某一移动方法进行移动。
  • 采用绝对值移动时,在Position(目标位置)中设定目标位置;采用相对值移动时,在Position(目标位置)中设定目标距离。
  • 无论何种移动方法,均以Velocity(目标速度)进行移动动作。
  • 移动过程中,在外部输入(中断输入)的上升沿进行相对定位动作。
  • 以FeedVelocity(标准速度),从反馈位置起,移动FeedDistance(标准距离)指定的标准距离。
  • 利用绝对值移动或相对值移动指令进行中断标准传送,在到达目标位置前未输入中断信号时,在当初的目标位置停止动作。
  • 无中断输入而停止动作时,通过ErrorDetect( 错误检测选择),可指定有无异常输出。
  • 指定异常输出时,CommandAborted(执行中断)变为TRUE,Busy(执行中)、Active(控制中)变为FALSE。
  • 使用中断屏蔽时,将WindowOnly(窗口有效)设为TRUE,指定FirstPositon(起始位置)、LastPositon(终止位置)。
  • 通过反馈位置从FirstPositon(起始位置)到LastPosition(终止位置)之间发生的最初中断信号,执行中断标准定位。
  • 使用注意事项
  • 中断后的标准距离动作表现为,按照FeedDistance(标准距离)指定的距离进行相对移动。
  • 对FeedDistance(标准距离)指定正数时,沿与中断输入前相同的方向进行标准距离动作;指定负数时,沿相反方向进行标准距离动作。
  • 以标准距离动作反转时的加减速遵从轴参数[反转时动作]的设定。
  • 中断标准定位后的位置为溢出/下溢时,发生中断输入时间异常。
  • 发生溢出/下溢后,即使输入中断也同样发生轴异常。
  • 参考
  • 绝对值移动参阅“MC_MoveAbsolute(P.3-47)”、相对值移动参阅“MC_MoveRelative(P.3-73)”、速度控制参阅“MC_MoveVelocity(P.3-80)”、 WindowOnly(窗口有效)参阅“WindowOnly(窗口有效)(P.3-109)”。

    ► 数据对象的映射

  • 在Mode中选择[驱动器模式],使用MC_MoveFeed(中断标准定位)指令时,请映射如下对象数据。
  • 请在Sysmac Studio的轴基本设置的[高级设置]中进行映射。
  • 锁定功能(60B8Hex) 锁定状态(60B9Hex) 锁定位置1(60BAHex) 锁定位置2(60BCHex)未进行这些设定时,将发生过程数据对象设定不足(错误代码:3461Hex)错误。
  • 关于数据对象的映射,请参阅“2-3 PDO映射(P.2-30)”、“NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)”或“NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)”。
  • 使用NX系列位置接口单元时,请参阅“NX系列 位置接口单元 用户手册(SBCE-374)”中的“I/O入口映射”。
▶指令详情
  • 下面对指令详细说明。

    ► Axis(轴)指定

  • 通过Axis(轴)指定锁定对象轴。

    ► 触发输入条件

  • 通过TriggerInput(触发输入条件)的Mode、LatchID、InputDrive的指定,选择触发条件。

    Mode

  • Mode的设定有两种可选,在触发中指定伺服驱动器或NX系列输出单元信号的“驱动器模式”、在触发中指定TriggerVariable(触发变量)的“控制器模式”。
  • 将触发信号的上升沿视为发生触发,对执行锁定指令后最初发生触发(FALSE→TRUE)时轴的位置进行记录。
  • 本指令为Busy(动作中)中时,即使Execute(启动)变为FALSE,也会将TriggerVariable(触发变量)的变化作为触发进行动作。
  • 驱动器模式
  • “驱动器模式”是利用伺服驱动器的功能检测触发、获取当前位置,因此,相比“控制器模式”,锁定的当前位置更准确。
    在这里插入图片描述
  • 使用注意事项
  • 使用驱动器模式时,请务必在要使用的LatchID(锁定ID选择)上连接锁定信号。
  • 锁定信号的宽度取决于伺服驱动器或NX系列脉冲输出单元的性能等。
  • 在InputDrive中选择[驱动器模式],使用MC_MoveFeed(中断标准定位)指令时,请映射如下对象数据。
  • 锁定功能(60B8Hex)、锁定状态(60B9Hex)、锁定位置1(60BAHex)、锁定位置2(60BCHex)未进行这些设定时,将发生过程数据对象设定不足(错误代码:3461Hex)错误。
  • 关于对象数据的映射,请参阅“2-3 PDO映射(P.2-30)”、“NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)”或“NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)”。
  • 控制器模式
  • 在“控制器模式”下,可对触发指定BOOL变量。
  • 在TriggerVariable(触发变量)中指定要触发的BOOL变量。
  • 与“驱动器模式”相比,在“控制器模式”下,由于I/O刷新的延迟,触发输入信号的BOOL变量的反映会产生较大延迟。
    在这里插入图片描述
  • 使用注意事项
  • 使用控制器模式时,按照任务周期的间隔进行锁定处理。
  • 因此,触发变量必须在任务周期的一个周期内为TRUE。
  • 并且,在触发变量变为TRUE后,MC功能模块执行处理之前,需要任务周期的一个周期的时间。
  • 这里的任务周期分为原始恒定周期任务的周期和固定周期任务(执行优先度5)的周期。

    ► LatchID

  • 通过LatchID(锁定ID选择)指定使用哪一个。
  • 对于1根轴只能使用某一个。
  • 伺服驱动器或NX系列脉冲输出单元中,LatchID(锁定ID选择)表示伺服驱动器或NX系列脉冲输出单元的锁定电路1(第1ch)、锁定电路2(第2ch)。
  • 关于LatchID,请参阅“NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)”或“NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)”。

    ► InputDrive

  • 作为触发,可选择_mcEncoderMark(Z相)或_mcEXT(外部输入)。
  • _mcEncoderMark(Z相)中,将伺服驱动器或NX系列脉冲输出单元的Z相用作触发。
  • _mcEXT(外部输入)中,将伺服驱动器或NX系列脉冲输出单元中输入的外部触发信号用作触发。
  • 欧姆龙制伺服驱动器1S系列中,_mcEXT(外部输入)为设定的Ext1或Ext2。
  • G5系列中,为设定的Ext1、Ext2、Ext3三者之一。
  • 通过Sysmac Studio进行设定。
  • 驱动器中设定的两个触发可以相同。
  • 使用NX系列 脉冲输出单元时,请参阅“NX系列 位置接口单元 用户手册(SBCE-374)”。

    ► WindowOnly(窗口有效)

  • 在WindowOnly(窗口有效)中,指定窗口的有效/无效。
  • 指定Disable(无效)时,在所有轴位置检出触发。
  • 指定Enable(有效)时,仅轴位置在FirstPosition(起始位置)和LastPosition(终止位置)的范围内时检出触发。
  • WindowOnly(窗口有效)的指定不同,动作也不同。
  • 如时序图所示。

    WindowOnly为Disable时

  • 将Execute(启动)变为TRUE后最初发生触发时的轴位置作为标准距离的基准位置。
    在这里插入图片描述

    WindowOnly为Enable时

  • 仅在窗口的范围内检出触发输入,获取轴位置。
    在这里插入图片描述
  • 使用注意事项
  • WindowOnly(窗口有效)由FALSE变化为TRUE的瞬间以及锁定功能启动之间的时间无法锁定。
  • 锁定功能启动需要时间,因此,WindowOnly(窗口有效)的有效范围极短时无法锁定。
  • 可锁定有效范围的临界值取决于伺服驱动器、编码器输入终端、位置接口单元等的性能和EtherCAT的通信。
  • 不同计数模式的FirstPosition(起始位置)和LastPosition(终止位置)的范围如下所示。

    线性模式

  • FirstPosition(起始位置) ≤ 窗口范围 ≤ LastPosition(终止位置) 指定FirstPosition(起始位置) > LastPosition(终止位置)时,会发生异常。
  • 超过[线性模式]的位置范围指定时,也会发生异常。
  • 此外,由于FirstPosition(起始位置)和LastPosition(终止位置)为LREAL型变量,因此,请勿指定FirstPosition(起始位置) = LastPosition(终止位置)。
  • 关于LREAL型,请参阅“实数(REAL型、LREAL型)的使用(P.1-14)”。
  • [线性模式]时的窗口有效范围如下图所示。
    在这里插入图片描述
    • (注) FirstPosition(起始位置)和LastPosition(终止位置)包含在窗口有效范围中。

    旋转模式

  • FirstPosition(起始位置) ≤ LastPosition(终止位置)和FirstPosition(起始位置) > LastPosition(终止位置)两者均可指定。
  • FirstPosition(起始位置) > LastPosition(终止位置)时,设定值跨越环计数器的上下限位置。
  • 超过环计数器上下限范围指定时,会发生异常。
    在这里插入图片描述

    ► ReferenceType(位置类型选择)

  • 位置类型如下所示。
  • _mcFeedback:同一任务周期下的取值使用同一任务周期时获取的主轴反馈位置。
  • 这里的任务周期分为原始恒定周期任务的周期和固定周期任务(执行优先度5)的周期。

    ► FeedDistance(标准距离)

  • 沿与中断输入前相同方向执行标准距离动作时,对FeedDistance(标准距离)指定正值。
  • 沿与中断输入前相反方向执行标准距离动作时,对FeedDistance(标准距离)指定负值。
  • 例如,中断输入前动作表现为负方向动作时,如果对FeedDistance(标准距离)指定正值,则标准距离动作表现为负方向动作。
▶时序图
  • 如果对FeedDistance(标准距离)指定负值,则标准距离动作表现为正方向动作。
  • 在启动Execute(启动)的同时,Busy(执行中)变为TRUE。
  • 在下一个周期Active(控制中)变为TRUE。
  • 中断输入后,InFeed(标准传送中)变为TRUE、到达FeedDistance(标准距离),定位完成时,Done(完成)变为TRUE。
  • 利用其它指令中断本指令时,CommandAborted(执行中断)变为TRUE,Busy(执行中)、Active(控制中)变为FALSE。

    ► MoveMode(移动方法选择)为_mcAbsolute、_mcRelative时
在这里插入图片描述

  • 1从中断信号“ON”到InFeed变为TRUE之前,可能延迟多个控制周期。
  • 参考
  • 对中断标准定位的加速和减速取决于输入变量的Acceleration(加速度)、Deceleration(减速度)。

    ► MoveMode(移动方法选择)为_mcVelocity时

在这里插入图片描述

    ► 轴参数的反转时动作

  • 中断后的标准定位反转时,根据轴参数的[反转时动作]进行反转。

    [0:以反转时减速停止反转时]时
在这里插入图片描述

  • 参考
  • 中断输入时反转的减速度取决于输入变量的Deceleration(减速度)。

    [1:以反转时立即停止反转时]时
在这里插入图片描述

    ► MoveMode(移动方法选择)为_mcAbsolute,无中断输入时

    [ErrorDetect(错误检测选择):不执行异常检测],无中断输入时
在这里插入图片描述

    [ErrorDetect(错误检测选择):执行异常检测],无中断输入时
在这里插入图片描述

    ► WindowsOnly(窗口有效)为[有效]时
在这里插入图片描述

▶重启运动指令
  • 无法重启本指令。
  • 重启后,将发生“无法重启运动指令(错误代码:543B Hex)”错误。
▶多重启动运动指令
  • 多重启动运动指令的详情,请参阅“NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)”或“NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)”。

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

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

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

  • 本指令执行中,可能以中断模式多重启动。
  • 选择等待、合并多重启动时,
    • 执行多重启动指令时,Error(错误)变为TRUE。
    • 同时,ErrorID(错误代码)输出“无法多重启动运动指令(错误代码:543C Hex)”。
    • 本指令处理中止,CommandAborted(执行中断)变为TRUE。
▶异常
  • 在执行本指令中发生异常时,Error(错误)变为TRUE,轴停止动作。
  • 可查看ErrorID(错误代码)的输出值,了解发生异常的原因。

    ► 发生异常时的时序图

  • 发生异常时,本指令使用的中断输入用锁定无效。
    在这里插入图片描述

    ► 错误代码

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

    ► 错误代码

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

示例程序

  • 下面,对从速度控制变为中断标准定位的控制中的示例程序进行说明。
▶参数设定
  • 该示例程序中使用的最少的必要设定如下所示。

    ► 轴参数的设定

    轴种类

轴种类
轴1 伺服轴
轴2 伺服轴

    计数器模式

计数器模式
轴1 旋转模式
轴2 线性模式

    环计数器

上限值 下限值
轴1 360 0

    坐标单位选择

坐标单位
轴1 degree
轴2 mm
▶动作示例

在这里插入图片描述

    ► 动作模式
在这里插入图片描述

1

  • 驱动皮带输送机的轴1,以中断标准定位前的动作进行速度控制。

2

  • 传感器1连接锁定功能1。
  • 传感器1 “ON”时,切换为标准定位,在规定位置停止。

3

  • 定位完成后,印章的轴2因绝对定位而垂直下降,进行盖印。
  • 盖印后,轴2返回原点位置。
  • 在绝对定位动作完成的同时返回原点位置,因此,以等待启动MC_MoveZeroPosition(高速原点复位)的BufferMode(缓存模式选择)。
  • 上一指令的输出Active为TRUE时,多重启动指令。
▶梯形图

    ► 主要变量

名称 数据类型 初始值 注释
MC_Axis000 _sAXIS_REF 轴1的轴变量。
MC_Axis000.MFaultLvl.Active BOOL FALSE 轴1发生轻度故障等级的异常时变为TRUE。
MC_Axis000.Details.Homed BOOL FALSE 轴1为原点确定状态时变为TRUE。
MC_Axis001 _sAXIS_REF 轴2的轴变量。
MC_Axis001.MFaultLvl.Active BOOL FALSE 轴2发生轻度故障等级的异常时变为TRUE。
MC_Axis001.Details.Homed BOOL FALSE 轴2为原点确定状态时变为TRUE。
TrigRef _sTRIGGER_
REF
是中断输入的指定变量。
本程序中,使用伺服驱动器的锁定功能1。检测出
外部输入(传感器1)的上升沿,执行标准移动。
StartPg BOOL FALSE 如果该变量为TRUE,EtherCAT的过程数据通信已
建立,则进入伺服ON状态。
InitFlag BOOL FALSE 表示输入参数设定完成。
FALSE时,设定输入参数。输入参数设定完成后,
变为TRUE。

    ► 时序图
在这里插入图片描述

    ► 示例程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    ► 内联ST的内容

//MV_FEED 参数
Mv_Feed_TrigRef.Mode := _eMC_TRIGGER_MODE#_mcDrive;
Mv_Feed_TrigRef.LatchID := _eMC_TRIGGER_LATCH_ID#_mcLatch1;
Mv_Feed_TrigRef.InputDrive := _eMC_TRIGGER_INPUT_DRIVE#_mcEXT;
Mv_Feed_TrigVar := FALSE;
Mv_Feed_Pos := LREAL#2000.0;
Mv_Feed_Vel := LREAL#1000.0;
Mv_Feed_Acc := LREAL#10000.0;
Mv_Feed_Dec := LREAL#10000.0;
Mv_Feed_Mm := _eMC_MOVE_MODE#_mcVelocity;
Mv_Feed_FeedDis := LREAL#500.0;
Mv_Feed_FeedVel := LREAL#500.0;
//MV_ABS 参数
Mv_Abs_Pos := LREAL#1000.0;
Mv_Abs_Vel := LREAL#500.0;
Mv_Abs_Acc := LREAL#10000.0;
Mv_Abs_Dec := LREAL#10000.0;
Mv_Abs_Jrk := LREAL#10000.0;
//MV_ZERO 参数
Mv_Zero_Vel := LREAL#500.0;
Mv_Zero_Acc := LREAL#10000.0;
Mv_Zero_Dec := LREAL#10000.0;
Mv_Zero_Jrk := LREAL#10000.0;
Mv_Zero_Bm := _eMC_BUFFER_MODE#_mcBuffered;
//设定输入参数后,将InitFlag设为TRUE
InitFlag := TRUE;
▶结构文本(ST)

    ► 主要变量

名称 数据类型 初始值 注释
MC_Axis000 _sAXIS_REF 轴1的轴变量。
MC_Axis000.MFaultLvl.Active BOOL FALSE 轴1发生轻度故障等级的异常时变为TRUE。
MC_Axis000.Details.Homed BOOL FALSE 轴1为原点确定状态时变为TRUE。
MC_Axis001 _sAXIS_REF 轴2的轴变量。
MC_Axis001.MFaultLvl.Active BOOL FALSE 轴2发生轻度故障等级的异常时变为TRUE。
MC_Axis001.Details.Homed BOOL FALSE 轴2为原点确定状态时变为TRUE。
TrigRef _sTRIGGER_
REF
是中断输入的指定变量。
本程序中,使用伺服驱动器的锁定功能1。检测出
外部输入(传感器1)的上升沿,执行标准移动。
StartPg BOOL FALSE 如果该变量为TRUE,EtherCAT的过程数据通信已
建立,则进入伺服ON状态。
InitFlag BOOL FALSE 表示输入参数设定完成。
FALSE时,设定输入参数。输入参数设定完成后,
变为TRUE。
Hm1_Ex BOOL FALSE 该变量由FALSE→TRUE时,启动MC_Home的实例
HM1。
Hm2_Ex BOOL FALSE 该变量由FALSE→TRUE时,启动MC_Home的实例
HM2。
Mv_Feed_Ex BOOL FALSE 该变量由FALSE→TRUE时,启动MC_MoveFeed的
实例MV_FEED。
Mv_Abs_Ex BOOL FALSE 该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS。
Mv_Zero_Ex BOOL FALSE 该变量由FALSE→TRUE时,启动
MC_MoveZeroPosition的实例MV_ZERO。

    ► 时序图
在这里插入图片描述

    ► 示例程序

IF InitFlag = FALSE THEN
    // MV_FEED 参数
    Mv_Feed_TrigRef.Mode := _eMC_TRIGGER_MODE#_mcDrive;
    Mv_Feed_TrigRef.LatchID := _eMC_TRIGGER_LATCH_ID#_mcLatch1;
    Mv_Feed_TrigRef.InputDrive := _eMC_TRIGGER_INPUT_DRIVE#_mcEXT;
    Mv_Feed_TrigVar := FALSE;
    Mv_Feed_Pos := LREAL#2000.0;
    Mv_Feed_Vel := LREAL#1000.0;
    Mv_Feed_Acc := LREAL#10000.0;
    Mv_Feed_Dec := LREAL#10000.0;
    Mv_Feed_Mm := _eMC_MOVE_MODE#_mcVelocity;
    Mv_Feed_FeedDis := LREAL#500.0;
    Mv_Feed_FeedVel := LREAL#500.0;

    // MV_ABS 参数
    Mv_Abs_Pos := LREAL#1000.0;
    Mv_Abs_Vel := LREAL#500.0;
    Mv_Abs_Acc := LREAL#10000.0;
    Mv_Abs_Dec := LREAL#10000.0;
    Mv_Abs_Jrk := LREAL#10000.0;

    // MV_ZERO 参数
    Mv_Zero_Vel := LREAL#500.0;
    Mv_Zero_Acc := LREAL#10000.0;
    Mv_Zero_Dec := LREAL#10000.0;
    Mv_Zero_Jrk := LREAL#10000.0;
    Mv_Zero_Bm := _eMC_BUFFER_MODE#_mcBuffered;

    // 设定输入参数后,将InitFlag设为TRUE
    InitFlag := TRUE;
END_IF;

// StartPg为TRUE时,确认伺服驱动器处于伺服准备就绪状态,
// 将轴1设为伺服ON状态。
// 如果未处于伺服准备就绪状态,则设为伺服OFF。
IF (StartPg = TRUE) AND (MC_Axis000.DrvStatus.Ready = TRUE) THEN
    Pwr1_En := TRUE; // 将轴1设为伺服ON
ELSE
    Pwr1_En := FALSE; // 将轴1设为伺服OFF
END_IF;

// StartPg为TRUE时,确认伺服驱动器处于伺服准备就绪状态,
// 将轴2设为伺服ON状态。
// 如果未处于伺服准备就绪状态,则设为伺服OFF。
IF (StartPg = TRUE) AND (MC_Axis001.DrvStatus.Ready = TRUE) THEN
    Pwr2_En := TRUE; // 将轴2设为伺服ON
ELSE
    Pwr2_En := FALSE; // 将轴2设为伺服OFF
END_IF;

// 发生轻度故障等级异常时的处理
// 发生异常时的处理(FaultHandler)由客户根据装置进行编程。
IF (MC_Axis000.MFaultLvl.Active = TRUE) OR (MC_Axis001.MFaultLvl.Active = TRUE) THEN
    FaultHandler();
END_IF;

// 轴1处于伺服ON状态,且原点未确定时,进行轴1的原点复位
IF (Pwr1_Status = TRUE) AND (MC_Axis000.Details.Homed = FALSE) THEN
    Hm1_Ex := TRUE;
END_IF;

// 轴2处于伺服ON状态,且原点未确定时,进行轴2的原点复位
IF (Pwr2_Status = TRUE) AND (MC_Axis001.Details.Homed = FALSE) THEN
    Hm2_Ex := TRUE;
END_IF;

// 轴1确定原点后,执行MC_MoveFeed
IF MC_Axis000.Details.Homed = TRUE THEN
    Mv_Feed_Ex := TRUE;
END_IF;

// 轴2原点已确定,且轴1的中断标准定位完成后,执行轴2的绝对定位
IF (MC_Axis001.Details.Homed = TRUE) AND (Mv_Feed_D = TRUE) THEN
    Mv_Abs_Ex := TRUE;
END_IF;

// MC_MoveAbsolute开始时,多重启动MC_MoveZeroPosition
IF Mv_Abs_Act = TRUE THEN
    Mv_Zero_Ex := TRUE;
END_IF;

// 轴1的MC_Power
PWR1(
    Axis := MC_Axis000,
    Enable := Pwr1_En,
    Status => Pwr1_Status,
    Busy => Pwr1_Bsy,
    Error => Pwr1_Err,
    ErrorID => Pwr1_ErrID
);

// 轴2的MC_Power
PWR2(
    Axis := MC_Axis001,
    Enable := Pwr2_En,
    Status => Pwr2_Status,
    Busy => Pwr2_Bsy,
    Error => Pwr2_Err,
    ErrorID => Pwr2_ErrID
);

// 轴1的MC_Home
HM1(
    Axis := MC_Axis000,
    Execute := Hm1_Ex,
    Done => Hm1_D,
    Busy => Hm1_Bsy,
    CommandAborted => Hm1_Ca,
    Error => Hm1_Err,
    ErrorID => Hm1_ErrID
);

// 轴2的MC_Home
HM2(
    Axis := MC_Axis001,
    Execute := Hm2_Ex,
    Done => Hm2_D,
    Busy => Hm2_Bsy,
    CommandAborted => Hm2_Ca,
    Error => Hm2_Err,
    ErrorID => Hm2_ErrID
);

// MC_MoveFeed
MV_FEED(
    Axis := MC_Axis000,
    TriggerInput := Mv_Feed_TrigRef,
    TriggerVariable := Mv_Feed_TrigVar,
    Execute := Mv_Feed_Ex,
    Position := Mv_Feed_Pos,
    Velocity := Mv_Feed_Vel,
    Acceleration := Mv_Feed_Acc,
    Deceleration := Mv_Feed_Dec,
    MoveMode := Mv_Feed_Mm,
    FeedDistance := Mv_Feed_FeedDis,
    FeedVelocity := Mv_Feed_FeedVel,
    Done => Mv_Feed_D,
    InFeed => Mv_Feed_InFeed,
    Busy => Mv_Feed_Bsy,
    Active => Mv_Feed_Act,
    CommandAborted => Mv_Feed_Ca,
    Error => Mv_Feed_Err,
    ErrorID => Mv_Feed_ErrID
);

// MC_MoveAbsolute
MV_ABS(
    Axis := MC_Axis001,
    Execute := Mv_Abs_Ex,
    Position := Mv_Abs_Pos,
    Velocity := Mv_Abs_Vel,
    Acceleration := Mv_Abs_Acc,
    Deceleration := Mv_Abs_Dec,
    Jerk := Mv_Abs_Jrk,
    Done => Mv_Abs_D,
    Busy => Mv_Abs_Bsy,
    Active => Mv_Abs_Act,
    CommandAborted => Mv_Abs_Ca,
    Error => Mv_Abs_Err,
    ErrorID => Mv_Abs_ErrID
);

// MC_MoveZeroPosition
MV_ZERO(
    Axis := MC_Axis001,
    Execute := Mv_Zero_Ex,
    Velocity := Mv_Zero_Vel,
    Acceleration := Mv_Zero_Acc,
    Deceleration := Mv_Zero_Dec,
    Jerk := Mv_Zero_Jrk,
    BufferMode := Mv_Zero_Bm,
    Done => Mv_Zero_D,
    Busy => Mv_Zero_Bsy,
    Active => Mv_Zero_Act,
    CommandAborted => Mv_Zero_Ca,
    Error => Mv_Zero_Err,
    ErrorID => Mv_Zero_ErrID
);

网站公告

今日签到

点亮在社区的每一天
去签到