センサーコンベヤーのプログラミング

通常、センサーコンベヤーを操作するのに2つのタスクが使われます。1つのタスクは、ワークがセンサーを作動させるのを待ち、ワークをコンベヤーキューに加えます。もう1つのタスクは、コンベヤーキューにある追従開始領域内のワークをチェックします。ワークが追従開始領域内にあるとき、ロボットはワークをハンドリングします。その後、ハンドリングしたワークを指定された場所に置きます。

サンプルプログラムは、ロボットが追従開始領域外のワークをトラッキングした場合も、自動で復帰する仕様となっています。

Function main
  Motor On
  Power High

  Speed 30
  Accel 30, 30

  Xqt ScanConveyor               'キューを登録するタスク
  Xqt PickParts                  'ワーク (キュー)をトラッキングするタスク
Fend

Function ScanConveyor
  Double lpulse1                 '1つ前のラッチパルス
    lpulse1 = Cnv_LPulse(1)      'ラッチパルスをlpulse1に登録
    Do
      'ワークがセンサーを通過した場合のみ、キューに登録
      If lpulse1 <> Cnv_LPulse(1) Then
        Cnv_QueAdd 1, Cnv_Point(1, 0, 0)
        lpulse1 = Cnv_LPulse(1)  'lpulse1を更新
      EndIf
    Loop
Fend

Function PickParts
  OnErr GoTo ErrHandler
  Integer ErrNum
  Cnv_Mode 1,1                   'トラッキングモードを選択
  WaitParts:
  Do
    'ワーク (キュー)が、追従開始領域内に入るまで待機
    Wait Cnv_QueLen(1, CNV_QUELEN_PICKUPAREA) > 0
    'トラッキング開始
    'スカラロボットを使用する場合
    Jump Cnv_QueGet(1)
    Wait 0.1                     'Wait時間だけ、ロボットはコンベヤーと等速度で移動します
    Jump P1                      '指定した場所に移動
    Cnv_QueRemove 1, 0           'ピッキングしたワーク (キュー)の消去
  Loop
  '追従開始領域より下流のワーク (キュー)の消去
  'エラー「追従開始領域外のワークにトラッキング動作を行った」から自動復帰
  ErrHandler:
    ErrNum = Err
    If ErrNum = 4406 Then
      Cnv_QueRemove 1, 0
      EResume WaitParts
'エラー「追従開始領域外のワークにトラッキング動作を行った」以外のエラーを表示
    Else
      Print "エラー発生!"
      Print "No.", Err, ":", ErrMsg$(Err, 1)
      Print "Line :", Erl(0)
      'ユーザーエラー発生
      Error 8000
    EndIf
Fend