PF_Robot

记述机器人从送料器中获取部件,然后放到指定位置的运作。
请务必记述该函数的内容。

格式
Function PF_Robot(部件ID As Integer) As Integer
' 机器人的运作
Fend

参数

  • 部件ID
    输入部件ID(整数值1~32)。
    在多部件运作时有效部件进入。

返回值
要在PF_Robot函数结束后控制Part Feeding进程时,请指定下述值。(由PartFeeding.inc定义各常数。)

  • PF_CALLBACK_SUCCESS
    通常指定该值。部件坐标队列中未残留数据时(多部件运作或没有有效部件的数据时),会继续进行Part Feeding处理。
    队列中残留数据时(多部件运作或有有效部件的数据时),会重启PF_Robot回调函数,而非更改部件坐标队列的内容。

  • PF_CALLBACK_RESTART
    不论坐标队列中是否残留有数据,都继续执行Part Feeding进程,重新生成坐标队列。这适用于每次拾取都进行拍摄,以便高精度地拾取部件的情况。

  • PF_CALLBACK_RESTART_ACTIVEPART
    不论坐标队列中是否残留有数据,都继续执行Part Feeding进程,并且仅生成有效部件的坐标队列。不更改有效部件以外的坐标队列。这适用于希望省略有效部件以外的视觉处理并进行高速化的情况。

  • 用户定义错误编号 (8000 - 8999)
    要启动PF_Status回调函数进行错误处理时设定。已设定的值会被作为PF_Status回调函数的自变量交接。

描述
本函数用于记述以下处理。

  1. 从坐标队列中获取部件坐标(使用PF_QueGet函数)
  2. 将机器人移至送料器上的部件坐标位置
  3. 操作末端夹具等抓取部件
  4. 将机器人移至部件配置坐标
  5. 操作末端夹具等释放部件
  6. 删除1个坐标队列(使用PF_QueRemove命令)

一般来说,会通过循环处理执行1~6,对坐标队列内的所有数据进行处理。坐标队列中包括通过此前视觉运作检测的部件坐标列表。坐标为本地坐标。多部件运作时,按部件ID生成坐标队列。
启动本函数时选择的机器人是由部件的Robot#指定的机器人。要多机器人使用时,根据需要使用Robot语句切换机器人。
有关详细信息,请参阅以下手册。
“Epson RC+ 8.0 SPEL+语言参考 - Robot”

注意


  • 建议通过参数获取部件ID。
  • 在多机器人环境下要更改选择的机器人编号时,请注意不要更改为错误的机器人编号。

程序示例
下述程序是使用单纯的真空末端夹具处理所有部件的示例。
拾取部件时,通过真空传感器监视吸附状态。
不能吸附时,进行最多3次重试。即使这样仍不吸附时,会作为返回值返回用户错误代码8001。

' ** IO Label (Output) **
' O_Adsorb 吸附
' O_Desorb 脱离
'
' ** IO Label (Input) **
' I_Adsorbed 吸附传感器
'
' ** Point **
' PlacePos 部件的放置位置
'
' ** User Error **
' 8001 发生吸附超时
'
Function PF_Robot(partID As Integer) As Integer

    Byte retry

    ‘ 处理所有坐标队列或没有停止请求期间进行循环
    Do While PF_QueLen(partID) > 0 And PF_IsStopRequested(partID) = False

        '将机器人移至拾取位置
        Jump PF_QueGet(partID)

        ‘ 真空ON & 吸附确认(3次重试)
        On O_Adsorb
        retry = 3
        Do While retry > 0
        Wait Sw(I_Adsorbed) = On, 0.5
        If TW = True Then
            ‘ 如果超时,则将吸附设为OFF,然后再次设为ON
            Off O_Adsorb
            Wait 0.1
            On O_Adsorb
        EndIf
    Loop
    If TW = True Then
        ‘ 即使重试也不能吸附,因错误而结束
        ' 由Status回调函数进行错误处理
        PF_Robot = 8001
        Exit Function
    EndIf

    '将机器人移至放置位置
    Jump PlacePos

    ‘ 真空OFF & 真空破坏
    Off O_Adsorb
    On O_Desorb
    Wait 0.1
    Off O_Desorb

    ' 从坐标队列中删除1个数据
    PF_QueRemove partID

    Loop

    PF_Robot = PF_CALLBACK_SUCCESS

Fend