PF_Robot
ロボットがフィーダーからパーツを取得し、所定の場所に置く動作を記述します。
この関数の内容は必ず記述してください。
書式
Function PF_Robot(パーツID As Integer) As Integer
' ロボットの動作
Fend
パラメーター
- パーツID
パーツID (整数値1~32)が入ります。
マルチパーツ動作時は、アクティブパーツが入ります。
戻り値
PF_Robot関数が終了した後のPart Feedingプロセスを制御するために、次の値を指定してください。(各定数はPartFeeding.incで定義されています。)
PF_CALLBACK_SUCCESS
通常はこの値を指定します。パーツ座標キューにデータが残っていない場合 (マルチパーツ動作の場合、アクティブパーツのデータがない場合)は、Part Feeding処理を継続します。
キューにデータが残っている場合 (マルチパート動作の場合、アクティブパーツのデータがある場合)は、パーツ座標キューの内容を変更せずにPF_Robotコールバック関数を再起動します。PF_CALLBACK_RESTART
座標キューにデータが残っているかどうかに関わらず、Part Feedingプロセスを続行し、座標キューを再生成します。これは、パーツを高精度でピックするために、ピック1回ごとに撮像したい場合に有効です。PF_CALLBACK_RESTART_ACTIVEPART
座標キューにデータが残っているか否かに関わらず、Part Feedingプロセスを続行し、アクティブパーツのみの座標キューを生成します。アクティブパーツ以外の座標キューは変更されません。これは、アクティブパーツ以外のビジョン処理を省略し高速化したい場合に有効です。ユーザー定義エラー番号(8000 - 8999)
PF_Statusコールバック関数を起動してエラー処理を行いたい場合に設定します。設定した値は、PF_Statusコールバック関数の引数として渡されます。
解説
本関数には以下の処理を記述します。
- 座標キューからパーツ座標を取得 (PF_QueGet関数を使用します)
- ロボットをフィーダー上のパーツ座標位置に移動
- ハンド等を操作しパーツを把持
- ロボットをパーツ配置座標に移動
- ハンド等を操作しパーツを解放
- 座標キューを1つ削除 (PF_QueRemoveコマンドを使用します)
一般的には、ループ処理で1~6を行い、座標キュー内のすべてのデータを処理します。座標キューには、直前のビジョン動作で検出したパーツの座標リストが入っています。座標はローカル座標です。マルチパーツ動作では、パーツIDごとに座標キューが生成されます。
本関数の起動時に選択されているロボットは、パーツのRobot#で指定したロボットです。マルチロボットで使用する場合は、必要に応じてRobotステートメントを使用してロボットを切り替えます。
詳細は以下のマニュアルを参照してください。
"Epson RC+ 8.0 SPEL+ ランゲージリファレンス - Robot"
注意
- パーツIDはパラメーターから取得することを推奨します。
- マルチロボット環境で、選択されているロボット番号を変更するとき、誤ったロボット番号に変更しないように注意してください。
プログラム例
次のプログラムは、単純な真空ハンドを用い、パーツを全て処理する例です。
パーツをピックするとき、真空センサで吸着を監視します。
吸着できないときは3回までリトライします。それでも吸着しない時は、ユーザーエラーコード8001を戻り値として返します。
' ** IO Label (Output) **
' O_Adsorb 吸着
' O_Desorb 脱離
'
' ** IO Label (Input) **
' I_Adsorbed 吸着センサ
'
' ** Point **
' PlacePos パーツのプレース位置
'
' ** User Error **
' 8001 吸着タイムアウト発生
'
Function PF_Robot(partID As Integer) As Integer
Byte retry
' 座標キューを全て処置するか、停止要求がない間ループ
Do While PF_QueLen(partID) > 0 And PF_IsStopRequested(partID) = False
' ロボットをピック位置に移動
Jump PF_QueGet(partID)
' 真空ON & 吸着確認 (3回リトライ)
On O_Adsorb
retry = 3
Do While retry > 0
Wait Sw(I_Adsorbed) = On, 0.5
If TW = True Then
' タイムアウトのときは、吸着をオフし再度オンする
Off O_Adsorb
Wait 0.1
On O_Adsorb
EndIf
Loop
If TW = True Then
' リトライしても吸着できないのでエラー終了
' エラー処理はStatusコールバック関数で行う
PF_Robot = 8001
Exit Function
EndIf
' ロボットをプレース位置に移動
Jump PlacePos
' 真空OFF & 真空破壊
Off O_Adsorb
On O_Desorb
Wait 0.1
Off O_Desorb
' 座標キューからデータを1つ削除
PF_QueRemove partID
Loop
PF_Robot = PF_CALLBACK_SUCCESS
Fend
← 共通事項 PF_Control →