範例程式

視覺傳送帶編程

一般而言,會使用兩個任務來操作視覺傳送帶。

一個任務會利用視覺系統尋找工件,並將其添加至傳送帶佇列。

另一個任務會在傳送帶佇列的拾取區域中檢查工件。當工件位於拾取區域內時,系統會命令機器人拾取工件並放至指定位置。

以下是使用Xqt從“main”函數執行兩個任務的範例程式。

  • 第1個任務: “ScanConveyorStrobed”函數
  • 第2個任務: “PickParts”函數

是支援以下內容的程式。

視覺傳送帶跟蹤系統的佈線範例

是一個硬體觸發裝置的範例,使用控制器I/O觸發攝影機並閂鎖編碼器。

下列程式為傳送帶號碼為“1”的範例。

機器跟蹤位於跟蹤區域外的工件時,會自動恢復範例程式。

Function main
  Motor On
  Power High

  Speed 30
  Accel 30, 30

  Xqt ScanConveyorStrobed	'註冊佇列的任務
  Xqt PickParts            '跟蹤工件(佇列)的任務
Fend

Function ScanConveyorStrobed
  Integer i, numFound, state, trigger
  Real x, y, u
  Boolean found
  trigger = 10             '分配控制器I/O的pin10
  Off trigger              '關閉攝影機觸發器和編碼器閂鎖I/O
  Do
    VRun FindParts         '傳送帶上的工件成像
    On trigger             '開啟攝影機觸發器和編碼器閂鎖I/O
    Do
      VGet FindParts.AcquireState, state
    Loop Until state = 3
    VGet FindParts.Parts.NumberFound, numFound
    '將已拍攝的工件註冊為佇列
    For i = 1 to numFound
      VGet FindParts.Parts.CameraXYU(i), found, x, y, u
      Cnv_QueAdd 1, Cnv_Point(1, x, y)
    Next i
    Off trigger            '關閉攝影機觸發器和編碼器閂鎖I/O
    Wait 0.1
  Loop
Fend

Function PickParts
  OnErr GoTo ErrHandler
  Integer ErrNum
  Cnv_Mode 1,1             '選擇跟蹤模式
  WaitParts:
  Do
    '等待直到工件(佇列)進入拾取區域
    Wait Cnv_QueLen(1, CNV_QUELEN_PICKUPAREA) > 0
    '開始跟蹤工件
    '使用 SCARA 機器人時
    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 "Error!"
      Print "No.", Err, ":", ErrMsg$(Err, 1)
      Print "Line :", Erl(0)
      '發生使用者錯誤
      Error 8000
    EndIf
Fend

提示


當您使用軟體觸發時,請使用以下所示的「ScanConveyorStrobed」函數。

Function ScanConveyorNonStrobed
  Integer i, numFound, state
  Real x, y, u
  Boolean found
  Do
    '搜尋傳送帶上的工件
    VRun FindParts
    Cnv_Trigger 1          '以軟體觸發器來閂鎖編碼器
    VGet FindParts.Parts.NumberFound, numFound
    '將已拍攝的工件註冊為佇列
    For i = 1 to numFound
      VGet FindParts.Parts.CameraXYU(i), found, x, y, u
      Cnv_QueAdd 1, Cnv_Point(1, x, y)
    Next i
    Wait 0.1
  Loop
Fend

感測器傳送帶編程

一般而言,會使用兩個任務來操作感測器傳送帶。一個任務會等待工件以跳脫感測器,並添加至傳送帶佇列。另一個任務會在傳送帶佇列的拾取區域中檢查工件。當工件位於拾取區域內時,系統會命令機器人拾取工件並放至指定位置。

機器跟蹤位於跟蹤區域外的工件時,會自動恢復範例程式。

Function main
  Motor On
  Power High

  Speed 30
  Accel 30, 30

  Xqt ScanConveyor               '註冊佇列的任務
  Xqt PickParts                  '跟蹤工件(佇列)的任務
Fend

Function ScanConveyor
  Double lpulse1                 '上一個閂鎖脈衝
    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
    '開始跟蹤工件
    '使用 SCARA 機器人時
    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 "Error!"
      Print "No.", Err, ":", ErrMsg$(Err, 1)
      Print "Line :", Erl(0)
      '發生使用者錯誤
      Error 8000
    EndIf
Fend