自学内容网 自学内容网

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

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启动BOOLTRUE, FALSEFALSE在上升沿开始指令。
WindowOnly窗口有效BOOLTRUE, FALSEFALSE指定窗口的有效/无效。
FirstPosition起始位置LREAL负数、正数、“0”0指定锁定有效的位置。
单位为[指令单位]。 *1
LastPosition终止位置LREAL负数、正数、“0”0指定锁定无效的位置。
单位为[指令单位]。*1
ReferenceType位置类型
选择
_eMC_
REFERENCE_
TYPE
1: _mcFeedback1 *2指定位置类型。
1:反馈位置(同一任务周期 *3下
的取值)
Position目标位置LREAL负数、正数、“0”0MoveMode为[0:绝对值定位]时,
指定绝对坐标的目标位置。
MoveMode为[1:相对值定位]时,
指定移动距离。
MoveMode为[2:速度控制]时,无
需指定。
单位为[指令单位]。*1
Velocity目标速度LREAL正数*40指定目标速度。
单位为[指令单位/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 *2MoveMode为[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错误检测
选择
BOOLTRUE, FALSEFALSE无中断输入时,指定是否执行异
常检测。
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完成BOOLTRUE,
FALSE
指令执行完毕时变为TRUE。
InFeed标准传送中BOOLTRUE,
FALSE
接收锁定输入,标准传送中变为TRUE。
Busy执行中BOOLTRUE,
FALSE
接收指令后变为TRUE。
Active控制中BOOLTRUE,
FALSE
控制中变为TRUE。
CommandAborted执行中断BOOLTRUE,
FALSE
指令中止时,变为TRUE。
Error错误BOOLTRUE,
FALSE
发生异常时变为TRUE。
ErrorID错误代码WORD*1发生异常时,输出错误代码。16#0000为正常。
  • 1.请参阅“A-1错误代码一览(P.A-2)”。发生异常时,输出错误代码。

    ► 输出变量的反映时间

变量变为TRUE的时间变为FALSE的时间
Done指令完成时• Execute为TRUE时,与Execute的FALSE同时
• Execute为FALSE时,1个周期后
BusyExecute的上升沿• 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触发变量BOOLTRUE,
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线性模式

    环计数器

上限值下限值
轴13600

    坐标单位选择

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

在这里插入图片描述

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

1

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

2

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

3

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

    ► 主要变量

名称数据类型初始值注释
MC_Axis000_sAXIS_REF轴1的轴变量。
MC_Axis000.MFaultLvl.ActiveBOOLFALSE轴1发生轻度故障等级的异常时变为TRUE。
MC_Axis000.Details.HomedBOOLFALSE轴1为原点确定状态时变为TRUE。
MC_Axis001_sAXIS_REF轴2的轴变量。
MC_Axis001.MFaultLvl.ActiveBOOLFALSE轴2发生轻度故障等级的异常时变为TRUE。
MC_Axis001.Details.HomedBOOLFALSE轴2为原点确定状态时变为TRUE。
TrigRef_sTRIGGER_
REF
是中断输入的指定变量。
本程序中,使用伺服驱动器的锁定功能1。检测出
外部输入(传感器1)的上升沿,执行标准移动。
StartPgBOOLFALSE如果该变量为TRUE,EtherCAT的过程数据通信已
建立,则进入伺服ON状态。
InitFlagBOOLFALSE表示输入参数设定完成。
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.ActiveBOOLFALSE轴1发生轻度故障等级的异常时变为TRUE。
MC_Axis000.Details.HomedBOOLFALSE轴1为原点确定状态时变为TRUE。
MC_Axis001_sAXIS_REF轴2的轴变量。
MC_Axis001.MFaultLvl.ActiveBOOLFALSE轴2发生轻度故障等级的异常时变为TRUE。
MC_Axis001.Details.HomedBOOLFALSE轴2为原点确定状态时变为TRUE。
TrigRef_sTRIGGER_
REF
是中断输入的指定变量。
本程序中,使用伺服驱动器的锁定功能1。检测出
外部输入(传感器1)的上升沿,执行标准移动。
StartPgBOOLFALSE如果该变量为TRUE,EtherCAT的过程数据通信已
建立,则进入伺服ON状态。
InitFlagBOOLFALSE表示输入参数设定完成。
FALSE时,设定输入参数。输入参数设定完成后,
变为TRUE。
Hm1_ExBOOLFALSE该变量由FALSE→TRUE时,启动MC_Home的实例
HM1。
Hm2_ExBOOLFALSE该变量由FALSE→TRUE时,启动MC_Home的实例
HM2。
Mv_Feed_ExBOOLFALSE该变量由FALSE→TRUE时,启动MC_MoveFeed的
实例MV_FEED。
Mv_Abs_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS。
Mv_Zero_ExBOOLFALSE该变量由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
);

原文地址:https://blog.csdn.net/qq_58801558/article/details/142531491

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!