範例程式
視覺傳送帶編程
一般而言,會使用兩個任務來操作視覺傳送帶。
一個任務會利用視覺系統尋找工件,並將其添加至傳送帶佇列。
另一個任務會在傳送帶佇列的拾取區域中檢查工件。當工件位於拾取區域內時,系統會命令機器人拾取工件並放至指定位置。
以下是使用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