PF_Feeder

お客様が、フィーダー制御コマンド(PF_CenterByShift, PF_Center, PF_Flip, PF_Shiftの各コマンド)を使用してフィーダー制御動作を記述したい場合に使用します。

書式
Function PF_Feeder(パーツID 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