传感器传送带编程

通常,会使用两个任务来运行传感器传送带。一个任务等待工件触发传感器,并将其添加到传送带队列中。另一个任务检查传送带队列的拾取区域中是否存在工件。如果工件位于拾取区域内,则会命令机器人拾取工件,并将其放到指定的位置。

当机器人跟踪超出拾取区域的工件时,此程序示例会自动恢复。

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