机器自动化控制器——第三章 轴指令 8
- MC_MoveFeed
- 变量
- ▶输入变量
- ▶输出变量
- ▶输入输出变量
- 功能说明
- ▶指令详情
- ▶时序图
- ▶重启运动指令
- ▶多重启动运动指令
- ▶异常
- 示例程序
- ▶参数设定
- ▶动作示例
- ▶梯形图
- ▶结构文本(ST)
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
);