2台机器人 - 多部件
程序示例 4.1
示例类型:
2台机器人、1台送料器、多部件 - PF_Robot callback的运动 - 按特定顺序拾取
构成
- 机器人数量:2
- 送料器数量:1
- 送料器上的部件类型数量:2
- 配置位置数量:2
- 相机的方向:固定向下相机
描述
包括2台机器人与1台送料器。各机器人拾取固有的(物理方面存在差异)部件。机器人从送料器中依次进行拾取运作。在该应用中,拾取顺序非常重要。
由“PF_ActivePart”执行交互拾取顺序。在PF_Robot回调函数内执行机器人的运作。在本例中没有送料器与机器人运作的并行处理。代码虽然单纯,但没有效率。
机器人1拾取并配置部件#1。机器人2拾取并配置部件#2。各机器人包括带有“park”标签的点与带有“place”标签的点。
样本代码
Main.prg
Function Main
Robot 1
Motor On
Power High
Speed 50
Accel 50, 50
Jump Park
Robot 2
Motor On
Power High
Speed 50
Accel 50, 50
Jump Park
PF_Start 1, 2
Fend
PartFeeding.prg
Function PF_Robot(PartID As Integer) As Integer
If PF_QueLen(PartID) > 0 Then
Select PartID
Case 1
Robot 1
P0 = PF_QueGet(1)
PF_QueRemove (1)
Jump P0 /R
On rbt1Gripper
Wait 0.25
Jump Place
Off rbt1Gripper
Wait 0.25
PF_ActivePart 2
Case 2
Robot 2
P0 = PF_QueGet(2)
PF_QueRemove (2)
Jump P0 /L
On rbt2Gripper
Wait 0.25
Jump Place
Off rbt2Gripper
Wait 0.25
PF_ActivePart 1
Send
EndIf
PF_Robot = PF_CALLBACK_SUCCESS
Fend
程序示例 4.2
示例类型:
2台机器人、1台送料器、多部件 - 其他任务的运动 - 按特定顺序拾取
构成
- 机器人数量:2
- 送料器数量:1
- 送料器上的部件类型数量:2
- 配置位置数量:2
- 相机的方向:固定向下相机
描述
包括2台机器人与1台送料器。各机器人拾取固有的(物理方面存在差异)部件。机器人从送料器中依次进行拾取运作。这是通过交互执行“PF_ActivePart”来实现的。
1台机器人要拾取的部件为零时,另一台机器人可继续从送料器中拾取,直至部件为零。机器人1拾取并配置部件#1。机器人2拾取并配置部件#2。
各机器人包括带有“park”标签的点与带有“place”标签的点。“PF_AccessFeeder”与“PF_ReleaseFeeder”可用于防止两台机器人同时访问送料器。如果某台机器人移动与配置位置之间的距离的30%,另一台机器人则可访问送料器。
样本代码
Main.prg
Function Main
Robot 1
Motor On
Power High
Speed 50
Accel 50, 50
Jump Park
Robot 2
Motor On
Power Low
Speed 50
Accel 50, 50
Jump Park
MemOff PartsToPick1
MemOff PartsToPick2
PF_Start 1, 2
Xqt Robot1PickPlace
Xqt Robot2PickPlace
Fend
Function Robot1PickPlace
Robot 1
Do
Wait MemSw(PartsToPick1) = On
PF_AccessFeeder 1
P0 = PF_QueGet(1)
PF_QueRemove (1)
Jump P0 /R
On 5
Wait 0.5
Jump Place ! D30; MemOff PartsToPick1; PF_ReleaseFeeder 1 !
Off 5
Wait 0.25
Loop
Fend
Function Robot2PickPlace
Robot 2
Do
Wait MemSw(PartsToPick2) = On
PF_AccessFeeder 1
P0 = PF_QueGet(2)
PF_QueRemove (2)
Jump P0 /L
On 2
Wait 0.5
Jump Place ! D30; MemOff PartsToPick2; PF_ReleaseFeeder 1 !
Off 2
Wait 0.25
Loop
Fend
PartFeeding.prg
Function PF_Robot(PartID As Integer) As Integer
Select PartID
Case 1
If PF_QueLen(1) > 0 Then
MemOn PartsToPick1
Wait MemSw(PartsToPick1) = Off
PF_ActivePart 2
Else
PF_ActivePart 1
EndIf
Case 2
If PF_QueLen(2) > 0 Then
MemOn PartsToPick2
Wait MemSw(PartsToPick2) = Off
PF_ActivePart 1
Else
PF_ActivePart 2
EndIf
Send
PF_Robot = PF_CALLBACK_SUCCESS
Fend
程序示例 4.3
示例类型:
2台机器人、1台送料器、多部件 - 其他任务的运动 - 按特定顺序拾取
构成
- 机器人数量:2
- 送料器数量:1
- 送料器上的部件类型数量:3
- 配置位置数量:2
- 相机的方向:固定向下相机
描述
包括2台机器人与1台送料器。各机器人拾取不同的部件。
机器人1拾取&放置部件#1中的一个。
机器人2拾取&放置部件4与部件5中的一个。在该应用中,拾取顺序非常重要。由“PF_ActivePart”执行交互拾取顺序。与送料器的振动并行进行机器人的运作。
样本代码
Main.prg
Function Main
Robot 1
Motor On
Power High
Speed 50
Accel 50, 50
Jump Park
Robot 2
Motor On
Power High
Speed 50
Accel 50, 50
Jump Park
MemOff PartsToPick1
MemOff PartsToPick4
MemOff PartsToPick5
PF_Start 1, 4, 5
Xqt Robot1PickPlace
Xqt Robot2PickPlace
Fend
Function Robot1PickPlace
Robot 1
Do
Wait MemSw(PartsToPick1) = On
PF_AccessFeeder (1)
P0 = PF_QueGet(1)
PF_QueRemove (1)
Jump P0 /R
On rbt1Gripper; Wait .25
Jump Place ! D30; MemOff PartsToPick1; PF_ReleaseFeeder 1 !
Off rbt1Gripper
Wait 0.25
Loop
Fend
Function Robot2PickPlace
Robot 2
Do
Wait MemSw(PartsToPick4) = On
PF_AccessFeeder (1)
P0 = PF_QueGet(4)
PF_QueRemove (4)
Jump P0 /L
On rbt2Gripper; Wait .25
Jump Place ! D30; MemOff PartsToPick4 !
Off rbt2Gripper; Wait 0.25
Wait MemSw(PartsToPick5) = On
P0 = PF_QueGet(5)
PF_QueRemove (5)
Jump P0 /L
On rbt2Gripper; Wait 0.25
Jump Place ! D30; MemOff PartsToPick5; PF_ReleaseFeeder 1 !
Off rbt2Gripper; Wait 0.25
Loop
Fend
PartFeeding.prg
Function PF_Robot(PartID As Integer) As Integer
Select PartID
Case 1
MemOn PartsToPick1
Wait MemSw(PartsToPick1) = Off
PF_ActivePart 4
Case 4
MemOn PartsToPick4
Wait MemSw(PartsToPick4) = Off
PF_ActivePart 5
Case 5
MemOn PartsToPick5
Wait MemSw(PartsToPick5) = Off
PF_ActivePart 1
Send
PF_Robot = PF_CALLBACK_SUCCESS
Fend