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コールバック関数の引数として渡されます。

解説
本関数には以下の処理を記述します。

  1. 座標キューからパーツ座標を取得 (PF_QueGet関数を使用します)
  2. ロボットをフィーダー上のパーツ座標位置に移動
  3. ハンド等を操作しパーツを把持
  4. ロボットをパーツ配置座標に移動
  5. ハンド等を操作しパーツを解放
  6. 座標キューを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