ロボット1台 - マルチパーツ

プログラム例 2.1

例タイプ:
ロボット1台と マルチパーツ-ロボット動作によるビジョンと振動の並列処理

構成

  • ロボットの数:1
  • フィーダーの数:1
  • フィーダー上のパーツの種類数:2
  • 配置場所の数:1
  • カメラの向き:固定下向きカメラ

解説
2種類のパーツ(物理的に異なる)があります。ロボットは、パーツ #1の2つを連続してピック&プレースし、次にパーツ #2の1つをピック&プレースします。これは、“PF_ActivePart”を交互に実行することによって実現されます。このアプリケーションでは、ピックの順番が重要です(例: パーツ組み込みの場合)。最後のパーツが配置されると、“PF_ActivePart”が変更されて、所望のパーツを供給し、システムに振動の信号を送り、必要に応じて画像を取得します。これは、ロボット動作(“place”までの移動経路の30%に達したら)を並行して実現します。

サンプルコード
Main.prg

Function Main
    Integer numToPick1, numToPick2, i

    Robot 1
    Motor On
    Power High
    Speed 50
    Accel 50, 50
    Jump Park

    MemOff PartsToPick1
    MemOff PartsToPick2
    numToPick1 = 2
    numToPick2 = 1

    PF_Start 1, 2

    Do
        i = 0
        Do
            Wait MemSw(PartsToPick1) = On
            P0 = PF_QueGet(1)
            PF_QueRemove (1)
            Jump P0 /R
            On Gripper
            Wait 0.25
            i = i + 1
            If i < numToPick1 And PF_QueLen(1) > 0 Then
                Jump Place
            Else
                'Last part or no more parts available to pick
                If i = numToPick1 Then
                    PF_ActivePart 2
                EndIf
                Jump Place ! D30; MemOff PartsToPick1 !
            EndIf
            Off Gripper
            Wait 0.25
        Loop Until i = numToPick1
        i = 0
        Do
            Wait MemSw(PartsToPick2) = On
            P0 = PF_QueGet(2)
            PF_QueRemove (2)
            Jump P0 /R
            On Gripper
            Wait 0.25
            i = i + 1
            If i < numToPick2 And PF_QueLen(2) > 0 Then
                Jump Place
            Else
                'Last part or no more parts available to pick
                If i = numToPick2 Then
                    PF_ActivePart 1
                EndIf
                Jump Place ! D30; MemOff PartsToPick2 !
            EndIf
            Off Gripper
            Wait 0.25
        Loop Until i = numToPick2
    Loop
Fend

PartFeeding.prg

Function PF_Robot(PartID As Integer) As Integer
    Select PartID
        Case 1
            MemOn PartsToPick1
            Wait MemSw(PartsToPick1) = Off
        Case 2
            MemOn PartsToPick2
            Wait MemSw(PartsToPick2) = Off
    Send
    PF_Robot = PF_CALLBACK_SUCCESS
Fend