ID : 5104
WaitMotion
功能
任务待机直至当前动作进行中的动作命令达到指定状态。
格式
WaitMotion( 模式[,值] )
指定项目
模式 | 值 | |
---|---|---|
编码 | 含义 | |
0 | 通过当前位置(编码器值)判定动作比例[%]。 | 0~100% |
1 | 通过当前位置(编码器值)判定动作开始起的距离指定[mm]。 | |
2 | 通过当前位置(编码器值)判定至动作结束的距离指定[mm]。 | |
3 | 通过指令值判定动作开始起的移动时间指定[ms]。 | |
4 | 通过指令值判定离动作结束的移动时间指定[ms]。 | |
5 | 通过、指令值判定加速结束。 | 不需要 |
6 | 通过、指令值判定减速结束。 | 不需要 |
返回值
通过整数型数据返回状态。
0 | 异常 |
-1 | 正常 |
-2 |
|
-3 |
|
解说
- 如果在执行自动任务的动作命令过程中执行WaitMotion指令,则等待非动作命令开始执行直至动作命令到达指定状态。例如,可以采取在动作完成前输出IO的方法,以进行动作完成后的准备作业。
- 解除各模式下任务待机的时机如下所示。在时机(A)解除任务待机,执行非动作命令。
模式 无瞬时停止 有瞬时停止 0 如果从动作开始点开始的动作量达到指定比例,则解除任务待机。
1 如果距动作开始点的动作距离达到指定距离(mm),则解除任务待机。 2 如果距动作结束点的动作距离达到指定距离(mm),则解除任务待机。 3 如果从动作开始点开始的动作时间达到指定时间(ms),则解除任务待机。 如果从动作开始点开始的动作时间(停止的时间除外)达到指定时间(ms),则解除任务待机。 4 如果从动作结束点开始的动作时间达到指定时间(ms),则解除任务待机。 5 在加速结束时解除任务待机。 增加瞬时停止指令,在减速开始时解除任务待机。
动作指定结束时WaitMotion结束。并且,再次执行动作指令或执行非动作指令时,均不执行WaitMotion。6 在减速开始时解除任务待机。
增加瞬时停止指令,在减速开始时解除任务待机。
动作指定结束时WaitMotion结束。并且,再次执行动作指令或执行非动作指令时,均不执行WaitMotion。
相关项目
注意事项
- 在模式1、2下仅可使用CP动作。
- 最佳速度控制功能模式为2或3(SpeedMode 2 or 3)时,如果将WaitMotion模式指定为3、4(时间指定)或5、6(加速结束、减速开始),则可能错过解除任务待机的时机。
- 任务待机时,如果其它任务根据MotionSkip或Interrupt执行跳跃,则优先跳跃。
- WaitMotion监视最后发行的动作命令状态。如果记述2行相同的动作命令,则会变成与仅1行时不同的动作。
在Case 1中,WaitMotion监视(1)的动作命令状态。在(1)的动作完成90%时,处理WaitMotion的下一行。' Case 1 Move P, @0 J(0, 45, 90, 0, 45, 0) Move P, @P J(0, 45, 90, 0, 45, 90), Next ' (1) WaitMotion 0, 90
在Case 2中,WaitMotion监视(3)的动作命令状态。原本是在(3)的动作完成90%时处理WaitMotion的下一行。但是,由于(3)的动作在执行时已完成(不动),因此WaitMotion在执行时已经满足条件,立即处理WaitMotion的下一行。' Case 2 Move P, @0 J(0, 45, 90, 0, 45, 0) Move P, @P J(0, 45, 90, 0, 45, 90), Next ' (2) Move P, @P J(0, 45, 90, 0, 45, 90), Next ' (3) WaitMotion 0, 90
而由于(2)的动作命令为通过动作,因此在开始从(2)到(3)的通过动作时,(3)的动作就已经开始。
即处理WaitMotion的下一行并不是在(2)的动作完成90%时(与Case 1相同位置),而是开始从(2)到(3)的通过动作时。 - “Arrive 动作比例”和“WaitMotion 0, 动作比例”进行相同的处理。
应用示例
'!TITLE "程序待机"
' 在达到指定动作比例前程序待机
Sub Sample_WaitMotion
TakeArm Keep = 1
Dim aaa As Position
Dim bbb As Integer
' 获取当前位置
aaa = CurPos
' 将内部速度设定为10
Speed 10
' 从当前位置开始向P( 400, 300, 300, 180, 0, 180, -1 )移动后,移至下一处理
Move L, P( 400, 300, 300, 180, 0, 180, -1 ), Next
bbb = WaitMotion(0,50)
if bbb == -1 then ' 如果动作比例为50%
' 将I/O端口编号240置于ON
Set IO[240]
' 在讯息输出视窗中显示表示ON的"1"
PrintDbg IO[240]
else ' 如果不正常
' 在讯息输出视窗中显示S变量
PrintDbg S[1]
end if
End Sub
'!TITLE "程序待机"
' 加速结束前程序待机
Sub Sample_WaitMotion
TakeArm Keep = 1
Dim aaa As Position
' 获取当前位置
aaa = CurPos
' 将内部速度设定为10
Speed 10
' 从当前位置开始向P( 400, 300, 300, 180, 0, 180, -1 )移动后,移至下一处理
Move L, P( 400, 300, 300, 180, 0, 180, -1 ), Next
WaitMotion 5
' 加速结束后,将I/O端口编号240置于ON
Set IO[240]
' 在讯息输出视窗中显示表示ON的"1"
PrintDbg IO[240]
End Sub
ID : 5104