ロボット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