Skip to main content

运动的中断和继续

当轴组在运动时,可以停止运动。这可能是故意停止(MC_GroupHalt, MC_GroupStop),或路径上的停顿 (MC_GroupInterrupt),或因错误而停止。在所有情况下, CODESYS SoftMotion 提供功能块将轴组移回规划路径并继续。

通过暂停来停止运动

您可以使用 MC_GroupInterruptMC_GroupInterruptAt 功能块来中断命令运动的执行。为了 MC_GroupInterrupt,立即停止执行。为了 MC_GroupInterruptAt,在特定位置执行停止。然后运动可以在以后继续 MC_GroupContinue.

功能块 MC_GroupInterruptAt 提供输入 SMC_GroupInterruptPositionMvtRel.这指定了相对于运动的中断位置。该运动由其引用 SMC_Movement_Id.运动中的位置由介于 0 和 1 之间的值(实数)定义,其中 0 是运动的开始,1 是结束。点 B 和 A 之间的位置被准确解释为好像没有混合。 P 之间的位置开始 和 B 或 A 和 P 之间目的地 投影在混合路径上。

_sm_img_movement_interrupt_position.png
. 错误处理 MC_GroupInterruptAt
  • 当指定的运动 ID 未知时,功能块返回错误。跑步运动不会中断。

  • 如果轴组当前的动态状态不允许在指定的中断位置之前达到静止状态,则 SMC_GroupInterruptAt 表现得一模一样 MC_GroupInterrupt:立即执行中断,轴组到达指令中断位置后面某处的静止状态。

  • 所有其他错误的处理方式与 MC_GroupInterrupt 完全一样

. 限制 MC_GroupInterruptAt
  • 只要在中断位置停止的过程尚未开始,就可以通过另一个移动来中止特定位置处的中断。

  • 同一时间在特定位置只能命令一个中断。如果已命令中断,则必须完成或中止该中断,以便可以接受另一个中断。

当你执行 MC_GroupInterrupt 或者 MC_GroupInterruptAt,首先执行路径不变停止,类似于 MC_GroupHalt.然后轴组的状态(“继续数据”)存储在用户传输的变量中(类型 SMC_AXIS_GROUP_CONTINUE_DATA)。现在轴组处于状态 GroupStandby 并且可以正常使用。一个典型的例子是轴组被点动。

稍后,您可以使用 MC_GroupContinue 继续中断的执行。为此,请传输保存的“继续数据”。为使其正常工作,轴组的位置必须与执行后的位置相匹配 MC_GroupInterrupt. (看 SMC_GroupGetContinuePosition.)

当跟踪运动被中断时(意味着相对于动态坐标系被命令的运动), MC_GroupInterrupt 不会完全停止(比如 MC_GroupHalt),但相对于动态坐标系。例如,如果工件在转台上进行跟踪, MC_GroupInterrupt 相对于工件停止。轴组继续跟随工件。继续数据必须更新 SMC_GroupUpdateContinueData 如果运动系统具有多个周期的旋转轴。之后,运动可以继续 MC_GroupContinue.

重要

类型变量 SMC_AXIS_GROUP_CONTINUE_DATA 不得永久存储或在在线更改期间更改。

提示

使用功能块 SMC_GroupWait,您可以在两个运动之间的路径上等待可编程的时间。

通过 MC_GroupHalt 或 MC_GroupStop 停止运动

运动停止后 MC_GroupHalt 或者 MC_GroupStop, 轴组的运动可以在不丢失任何信息的情况下恢复如下: 调用功能块 SMC_GroupSaveContinueData 打电话之前 MC_GroupHalt 或者 MC_GroupStop.该 POU 保存当前状态、当前位置和调用停止或停止命令时的所有命令动作。这允许稍后从该位置继续运动。注意:这不是轴组到达停止位置后的位置。

版本 4.12.0.0 之前的行为: SMC_GroupSaveContinueData 功能块必须在同一个循环中调用 MC_GroupHalt 或者 MC_GroupStop 叫做。这时候,你必须确保 SMC_GroupSaveContinueData 之前被调用 MC_GroupHalt 或者 MC_GroupStop.否则,中止的运动将从队列中移除。

自版本 4.12.0.0 起的行为: SMC_GroupSaveContinueData 功能块可以随时调用,直到调用后的第一个动作 MC_GroupHalt 或者 MC_GroupStop.继续位置是功能块第一次调用时的当前轴组位置。保存的路径包含在停止/停止命令之前已接受的所有运动。

为了能够在轴组停止的位置继续路径 MC_GroupHalt 或者 MC_GroupStop, SMC_GroupSaveContinueData 应该在循环中调用 MC_GroupHalt 或者 MC_GroupStop 设置 Done 信号。

只有一个实例 SMC_GroupSaveContinueData 可以按轴组调用。

提示

在暂停/停止命令之前保存当前状态可能需要几个周期,但保证在任何中断运动之前保存第一个周期中的状态信息。

提示

SMC_GroupSaveContinueData 可以随时调用以保存当前状态,不仅与调用有关 MC_GroupHalt 或者 MC_GroupStop.

由于错误而停止运动

如果运动因错误而停止,则轴组的各个轴将单独停止并切换到错误状态。在这个过程中,TCP 离开了规划的路径。现在您可以确认错误、重置轴组并移动到检测到错误的位置。之后,您可以指示轴组继续先前计划的运动。

您使用 SMC_GroupEnableResumeAfterError 功能块,以启用该功能以在发生错误后恢复编程的运动。必须在总线循环任务中循环调用功能块。每个轴组只能调用此功能块的一个实例。

如果轴组检测到错误并切换到状态 Errorstop,然后它将已接受的运动和必要的状态信息保存在一个类型为 SMC_AXIS_GROUP_CONTINUE_DATA.然后这个变量包含“继续数据”并作为输入传递 SMC_GroupEnableResumeAfterError.

这使您可以稍后使用 MC_GroupContinue.如果错误是由命令运动引起的(例如,工作空间违规或无效的圆弧半径),则无法通过这种方式解决。移动继续后,这些错误将再次发生。该机制更多地用于单轴错误和其他强制轴组进入错误停止的外部事件。

MC_GroupContinue 要求轴组在继续运动时处于特定位置。在错误后恢复的情况下,该位置是检测到错误时的当前位置。您可以使用 SMC_GroupGetContinuePosition 功能块来获得这个位置。

重要

  • 如果轴组错误不允许继续运动(例如写入继续数据时的内部错误),则 MC_GroupContinueSMC_GroupGetContinuePosition 返回新的错误 ID SMC_AXIS_GROUP_CONTINUE_DATA_NOT_WRITTEN.

  • 如果 MC_GroupStop 发生错误时处于活动状态,然后 MC_GroupStop 运动继续时也会重新激活。轴组已经停止,并且 MC_GroupStop 已删除所有待处理的移动,因此不会发生移动。

  • 发生轴组错误时,活动运动的功能块实例会发出错误(输出 ActiveBusy 切换到 FALSE,并输出 Error 切换到 TRUE)。尚未激活的缓冲或混合运动的功能块实例也会发出错误。重新启动后,所有这些功能块实例都被重置为 Busy/Active 并且它们的输出重置为 Error/CommandAborted.