PF_Feeder

要使用送料器控制命令(PF_CenterByShift、PF_Center、PF_Flip、PF_Shift等各種命令)編寫送料器控制動作時使用。

格式
Function PF_Feeder(零件ID As Integer, 正面零件數量 As Integer, 背面零件數量 As Integer, 狀態 As Integer) As Integer
' (判定零件狀態)
' (送料器運作)
Fend

參數

  • 零件ID
    輸入零件ID(整數值1~32)。
    多種零件運作時,輸入主動零件。
  • 正面零件數量
    輸入視覺檢測到並放入零件座標佇列中的正面零件數量。
  • 背面零件數
    輸入視覺檢測到的背面零件數量。
  • 状態
    表示系統檢測到的狀態或系統決定的建議動作。
    輸入下表中的其中1個值。
    狀態/建議動作 常數(PartFeeding.inc中定義) 備註
    可進行取放 PF_FEEDER_PICKOK 零件可進行取放。
    可追加供應零件 PF_FEEDER_SUPPLY 零件供應方法為[在取放期間供應零件]時,可從料斗追加供應零件。

    如需詳細資訊,請參閱以下內容。

    供應零件

    需要翻轉動作 PF_FEEDER_FLIP 建議進行翻轉動作(分散零件或改變姿態)。
    位移至拾取區域 PF_FEEDER_SHIFT 建議進行位移動作(將零件移至拾取區域)。
    集中及翻轉 PF_FEEDER_CENTER_FLIP 建議進行集中及翻轉動作。
    料斗已空 PF_FEEDER_HOPPER_EMPTY 料斗內沒有零件。透過操作員呼叫等方式,向料斗供應零件。
    向拾取區域反向位移 PF_FEEDER_SHIFT_BACKWARDS 建議進行反向位移動作(將滯留在平台角落的零件移回拾取區域)。
    從料斗供料,並進行集中與分離 PF_FEEDER_SUPPLY_CENTER_FLIP 需要從料斗供應零件,並建議對零件進行集中及分離動作。
    零件過多 PF_FEEDER_TOO_MANY 平台上的零件數量過多。透過操作員呼叫等方式,移除平台上的零件。
    混入其他種類的零件 PF_FEEDER_WRONGPART 可能混入了錯誤種類的零件。透過操作員呼叫等方式進行恢復。
    無法判定 PF_FEEDER_UNKNOWN

    系統無法對設有溝槽或孔的平台判斷最佳振動方式。

    請參閱以下內容。

    振動

傳回值
根據在PF_Feeder結束後讓系統執行的程序,指定以下值。

常數(PartFeeding.inc中定義) Part Feeding程序的運作
PF_CALLBACK_SUCCESS 在可拾取零件且判斷為不需要進一步進行送料器運作時指定。系統會呼叫PF_Robot回呼函數。注意:系統不會重新生成零件座標佇列。若在執行送料器運作後傳回此值,送料器上的零件座標與零件座標佇列的資料之間會產生差異。
PF_CALLBACK_RESTART 在執行送料器運作後指定。系統會重新生成所有零件座標佇列,並再次呼叫PF_Feeder回呼函數。
PF_CALLBACK_RESTART_ACTIVEPART 在執行送料器運作後指定。系統重新生成僅限主動零件的零件座標佇列,並再次呼叫PF_Feeder回呼函數。

描述
此函數能讓使用者處理自訂的送料器運作。通常,由系統判斷並執行送料器振動處理。選擇[料件送料] - [零件] - [振動]中的「透過PF_Feeder回呼控制振動」時,系統會在指定時機執行PF_Feeder回呼。PF_Feeder回呼函數可用於解決難以應用Part Feeding程序的應用程式。
例如:Part Feeding程序無法為自訂平台(您進行了孔、溝槽等加工的特殊平台)判斷適當的處理。但是,您可在PF_Feeder回呼函數中編寫自訂的送料器處理。

可利用引數「正面零件數量」及「背面零件數量」,判斷可否轉移至拾取動作,或決定適當的振動動作。例如,當正面零件數量>0時,可判斷為可拾取零件且不需要進一步的送料器振動。
引數「狀態」表示建議的動作或設備狀態。這有助於決定送料器的動作類型或條件。

回傳值需為上表所示的其中一個值。回傳值表示讓系統執行的程序。

程式範例1:
以下範例展示如何利用引數「狀態」,根據不同條件執行送料器振動動作。

Function PF_Feeder(PartID As Integer, NumFrontParts As Integer, NumBackParts As Integer, state As Integer) As Integer

    Select state

        Case PF_FEEDER_PICKOK
            ' Call PF_Robot because there are parts ready to pick
            PF_Feeder = PF_CALLBACK_SUCCESS

        Case PF_FEEDER_SUPPLY
            ' Need to supply more parts
            PFControlReturnVal = PF_Control(PartID, PF_CONTROL_SUPPLY_FIRST)
            ' Shift forward and then Flip
            PF_Shift PartID, PF_SHIFT_FORWARD, 500
            PF_Flip PartID
            ' Restart and re-acquire images
            PF_Feeder = PF_CALLBACK_RESTART

        Case PF_FEEDER_FLIP
            ' Flip the parts
            PF_Flip PartID
            ' Restart and re-acquire images
            PF_Feeder = PF_CALLBACK_RESTART

        Case PF_FEEDER_CENTER_FLIP
            ' Center, Flip and Separate the parts
            PF_Center PartID, PF_CENTER_LONG_AXIS, 900
            PF_Center PartID, PF_CENTER_SHORT_AXIS
            PF_Flip PartID
            ' Restart and re-acquire images
            PF_Feeder = PF_CALLBACK_RESTART

        Case PF_FEEDER_TOO_MANY
            ' Notify operator that there are too many parts on the feeder
            PFStatusReturnVal = PF_Status(PartID, PF_STATUS_TOOMANYPART)
            ' Restart and re-acquire images
            PF_Feeder = PF_CALLBACK_RESTART
    Send

Fend

程式範例2:
以下範例展示如何利用引數「正面零件數量」及「背面零件數量」,執行送料器振動動作。

Function PF_Feeder(PartID As Integer, NumFrontParts As Integer, NumBackParts As Integer, state As Integer) As Integer
    Integer PFControlReturnVal

    Select True

        Case NumFrontParts = 0 And NumBackParts <> 0
            PF_CenterByShift PartID
            PF_Flip PartID
            ' Restart and re-acquire images
            PF_Feeder = PF_CALLBACK_RESTART

        Case NumFrontParts = 0 And NumBackParts = 0
            PFControlReturnVal = PF_Control(PartID, PF_CONTROL_SUPPLY_FIRST)
            ' Center, Flip and Separate
            PF_Center 1, PF_CENTER_LONG_AXIS, 900
            PF_Center 1, PF_CENTER_SHORT_AXIS, 700
            PF_Flip 1, 600
            PF_Feeder = PF_CALLBACK_RESTART 're-acquire images

        Default
            ' Call PF_Robot because there are parts ready to pick
            PF_Feeder = PF_CALLBACK_SUCCESS

    Send

Fend