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程序,並重新生成座標佇列。這於每次拾取零件時進行成像以提高零件拾取精度的情況下有效。

  • 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