PF_AccessFeeder
PF_AccessFeederは、複数ロボット/1台フィーダーのシステムで、ロボット同士の衝突を防ぐために使用します。このコマンドは、2台のロボットが同時に同じフィーダーを共有している場合に必要です。PF_AccessFeederは、フィーダーにアクセスするロボットのロックを取得します。
すでにロックが取得されているときは、PF_AccessFeederはロックが解放されるまで、または、指定したタイムアウト (オプション)に達するまで、タスクを一時停止します。
ロボットがフィーダーの使用を終了した後、他のロボットにフィーダーを解放するために、PF_ReleaseFeeder文を使用してロックを解除します。
詳細は、以下を参照してください。
PF_ReleaseFeeder
例:
タスク1でPF_AccessFeeder 1を実行する。タスク1は続行する。
タスク2でPF_AccessFeeder 1を実行すると、タスク2は一時停止する。
タスク1でPF_ReleaseFeeder 1を実行すると、タスク2は再開する。
本コマンドは、マルチロボット構成で排他制御に使用します。
書式
PF_AccessFeeder フィーダー番号/フィーダー名[, タイムアウト]
パラメーター
- フィーダー番号
フィーダー番号を式、または数値 (整数値1~4)で指定します。 - フィーダー名
フィーダーラベル (文字列)を指定します。 - タイムアウト
ロック解放待ちのタイムアウト (秒)を、式または数値 (整数)で指定します。省略可能です。
戻り値
なし
解説
タイムアウトが指定された場合は、TW 関数の戻り値で結果を判断できます。
詳細は以下のマニュアルを参照してください。
"Epson RC+ 8.0 SPEL+ ランゲージリファレンス - TW 関数"
- ロックが解放された、または、ロックを取得した (False)
- タイムアウトに達した (True)
フィーダーの動作は、ロックの取得/解放の影響を受けません。
タスク終了時は、そのタスクで取得したロックは自動的に開放されます。
同じタスクで、同じフィーダーに対して2回連続でPF_AccessFeederを実行するとエラーになります。
仮想コントローラーおよびコマンドウィンドウからは実行できません。
使用例
2つのロボットで1つのフィーダー上のパーツをピックする例です。
ロボット1がフィーダー上のパーツを取得し、ポイントplace1に移動します。
ロボット1が移動経路の50%に達したところで、ロボット2がパーツを取得するための移動を開始します。
Function Main
MemOff PartsToPick
Motor On
PF_Start 1
Xqt Robot1PickPlace
Xqt Robot2PickPlace
Fend
Function Robot1PickPlace
Robot 1
Do
If MemSw(PartsToPick) = On Then
If PF_QueLen(1) > 0 Then
PF_AccessFeeder 1
P0 = PF_QueGet(1)
PF_QueRemove 1
Jump P0 /R
On 5
Wait 0.5
Jump Place ! D30; PF_ReleaseFeeder 1 !
Off 5
Wait 0.25
Else
MemOff PartsToPick
EndIf
EndIf
Wait 0.1
Loop
Fend
Function Robot2PickPlace
Robot 2
Do
If MemSw(PartsToPick) = On Then
If PF_QueLen(2) > 0 Then
PF_AccessFeeder 1
P0 = PF_QueGet(2)
PF_QueRemove (2)
Jump P0 /R
On 5
Wait 0.5
Jump Place ! D30; PF_ReleaseFeeder 1 !
Off 5
Wait 0.25
Else
MemOff PartsToPick
EndIf
EndIf
Wait 0.1
Loop
Fend
Function PF_Robot(PartID As Integer) As Integer
Select PartID
Case 1
MemOn PartsToPick
Wait MemSw(PartsToPick) = Off
Case 2
MemOn PartsToPick
Wait MemSw(PartsToPick) = Off
Send
PF_Robot = PF_CALLBACK_SUCCESS
Fend