虛擬料件送料功能

在Epson RC+ Standard Edition以上版本中,可在模擬器上確認料件送料動作。此處將針對虛擬料件送料功能,說明建構簡易系統的步驟。

步驟概要

  1. 建立虛擬控制器並設定機器人
  2. 建立專案
  3. 在系統設定中新增送料器並進行設定
  4. 新增並設定相當於料件放置目標工作台的物件
  5. 新增並設定虛擬相機
  6. 執行視覺校準
  7. 建立視覺序列
  8. 設定料件及送料器
  9. 執行送料器校準
  10. 建立並執行程式

步驟詳細說明

  1. 準備

    1. 建立新的虛擬控制器連線。
      在系統設定中,將機器人1設定為"GX8-C652S"(名稱為robot1)。

    2. 建立專案"PF_Sample"。

    3. 在Epson RC+ 8.0功能表 - [設置] - [系統配置]的[控制器] - [料件送料]中新增送料器(IF-A1520),並進行以下設定。

      • 啟用[料斗1安裝]
      • 位置設定(Position X, Y, Z): -100, 450, 0
      • 碰撞偵測設定(Collision Check) : false

    4. 新增作為料件放置目標工作台的物件(Box物件),並進行以下設定。

      • 物件名稱(Name): Table
      • 尺寸設定(Half size X, Y, Z): 100, 100, 50
      • 位置設定(Position X, Y, Z): 350, 0, 50
    5. 新增相機設定。

      1. 在Epson RC+ 8.0功能表 - [設置] - [系統配置]的[視覺]中,新增虛擬相機。

      2. 勾選[虛擬],選擇"acA640-120gm"作為型號,然後點擊[應用]按鈕。

      3. 對相機物件進行以下設定,並配置於送料器物件上方。

        • 位置設定(Position X, Y, Z): 65, 440, 770
        • 姿勢設定(Rotation X, Y, Z) : 180, 0, 90

    6. 執行視覺校準。
      此處以"Calib"為名稱建立並執行校準。
      視覺校準完成後,將使用的校準用CAD資料移動至不妨礙作業的位置。

      關於相機校準,請參閱以下影片手冊。

      Procedure for Using the Vision Simulator (opens new window)

      或請參閱以下手冊。

      「視覺指南8.0軟體手冊 - 視覺校準」

      在以下資料夾中準備了視覺校準用CAD資料作為範例CAD資料。

      C:\EpsonRC80\Simulator\CAD\CalibBoard

      使用此CAD資料進行校準。

    7. 建立視覺序列,並依照以下步驟確認是否能正確偵測料件。

      1. 在送料器操作面板中,將1個作為料件的物件供應至送料器物件上。

        • 點擊送料器操作面板的[供應設定]按鈕
        • 從目前已配置於3D中的物件中,選擇料件的基礎物件
        • 此處選擇預設的"Default Box"
      2. 建立用於辨識此料件的序列"BoxDetection"。

        • 使用Blob物件作為用於辨識的視覺物件
        • 若無法順利辨識料件,將"ThresholdHigh"屬性的值設定為"180"並進行調整
        • 將"NumberToFind"屬性從"1"變更為"All",以辨識送料器上的所有料件
      3. 執行"BoxDetection"序列,確認料件能被正確辨識。

      4. 在"Calibration"屬性中設定前述步驟所建立的校準"Calib"。

      5. 確認料件能被辨識後,先清除送料器上的料件。

        • 點擊送料器操作面板的[清除]按鈕

    8. 依照以下步驟進行料件及送料器的設定。

      1. 開啟Epson RC+ 8.0功能表 - [工具] - [料件送料],並新增料件。

      2. 首次新增料件時,會自動產生PartFeeding.prg。

      3. 必須設定視覺序列,設定如下。

      4. 在料件供應設定中,選擇"1"作為料斗。

      5. 其他設定視需要進行設定。

        有關設定的詳細資訊,請參閱以下手冊。

        "Part Feeding 8.0導入&軟體篇 - 軟體篇 - Part Feeding GUI - 料件送料對話方塊"

        此處維持預設設定。

    9. 依照以下步驟執行送料器校準。

      1. 在料件設定畫面的[校準]中點擊[校正測試]。

      2. 首先測量料件區域。

        1. 點擊[料件供應]按鈕開啟送料器操作面板,並僅供應1個料件。
        2. 點擊[啟動]按鈕,計算料件面積。
        3. 視需要進行送料器參數的設定與調整。

        有關設定的詳細資訊,請參閱以下內容。

        "Part Feeding 8.0導入&軟體篇 - 軟體篇 - Part Feeding GUI - 校準&測試"

  2. 建立程式

    首次新增第1個料件設定時,會自動建立PartFeeding.prg及PartFeeding.inc程式檔案。其中已新增回呼函數範本,當料件送料的動作流程中符合指定條件時,會自動呼叫。

    有關回呼函數的詳細資訊,請參閱以下內容。

    "Part Feeding 8.0導入&軟體篇 - 軟體篇 - 前言 - Part Feeding軟體配置 - 回呼函數"

    此處將新增使機器人動作所需的處理。
    這是用於在程式開始執行時指定機器人要Pick & Place的料件數量的程式。

    將以下程式建立為Main.prg。

    Global Integer gMaxCount  ' Number of parts to pick and place
    Global Integer gCount     ' Current number of picked parts
    
    Function main
       String input$
       InputBox "Please input number of parts to pick and place", "Number of parts", "10", input$
       gMaxCount = Val(input$)
    
       SimSet Feeder_1.ClearSupply
    
       Motor On
       Power High
       Accel 100, 100
       Speed 100
       Jump XY(240, 100, -50, 0)
    
       PF_Start 1
    
       Xqt StartRobot
    Fend
    
    Function StartRobot
       TmReset 0
       Do
          If gCount >= gMaxCount Then
             Exit Do
          EndIf
       Loop
    
       Print "Total: ", Tmr(0), "[s]"
    
       PF_Stop 1
    Fend
    

    在PartFeeding.prg開頭新增以下內容。

    Global Integer gMaxCount
    Global Integer gCount
    

    此外,將函數"PF_Robot"改寫如下。

    Function PF_Robot(PartID As Integer) As Integer
       'Robot number is set by [Tool] - [PartFeeding] - [General].
       'Set Tool, Arm, ECP if needed.
    
       If gCount >= gMaxCount Then
          PF_Robot = PF_CALLBACK_SUCCESS
          Exit Function
       EndIf
    
       String name$
       Do While PF_QueLen(PartID) > 0
          'Get position of part to be picked in the calibration robot local
          P0 = PF_QueGet(PartID)
    
          'Pick (Jump P0 etc)
          Go Here :Z(-50)
          Jump P0 /R :Z(-160) :U(0) LimZ -50
          SimGet robot1.NearestObjToTool(0), name$
          SimSet robot1.Pick, name$
    
          'Place  (Jump P1 etc)
          Jump XY(300 + (gCount / 6) * 30, -70 + (gCount Mod 6) * 30, -160, 0) LimZ -50
          SimSet robot1.Place, name$
          SimSet name$.SetParent, Table
    
          'Deque
          PF_QueRemove PartID
    
          'Check Cycle stop
          gCount = gCount + 1
          If PF_IsStopRequested(PartID) = True Or gCount >= gMaxCount Then
             Exit Do
          EndIf
       Loop
    
       PF_Robot = PF_CALLBACK_SUCCESS
    
    Fend
    

    另外,將函數"PF_Control"改寫如下。

    Function PF_Control(PartID As Integer, Control As Integer) As Integer
       String msg$
       Select Control
    
          Case PF_CONTROL_SUPPLY_FIRST ' Request for part supply (when empty)
             msg$ = PF_Name$(PartID) + CRLF + CRLF + "Supply " + Str$(PF_Info(PartID, PF_INFO_ID_FEEDER_CALIB_CORRECT_MAXNUM)) + " parts."
    
             'Sample for hopper control
             PF_Hopper 1, PartID, 3000
             Wait 3.0
    
          Case PF_CONTROL_SUPPLY ' Request for part supply (add up to optimum number)
             msg$ = PF_Name$(PartID) + CRLF + CRLF + "Supply additional parts."
    
             'Sample for hopper control
             PF_Hopper 1, PartID, 3000
             '(For parallel supplying, Wait is not needed here.)
    
          Case PF_CONTROL_LIGHT_ON ' Request for Front Light On
             msg$ = PF_Name$(PartID) + CRLF + CRLF + "Turn front light On."
    
          Case PF_CONTROL_LIGHT_OFF ' Request for Front Light Off
             msg$ = PF_Name$(PartID) + CRLF + CRLF + "Turn front light Off."
    
       Send
    
       If False And CtrlDev = 21 Then
          MsgBox msg$, MB_ICONINFORMATION
       Else
          Print msg$
       EndIf
    
       PF_Control = PF_CALLBACK_SUCCESS
    
    Fend
    
  3. 執行程式

    1. 點擊工具條的[打開運行窗口]按鈕,顯示[運行]視窗。

    2. 選擇函數「main」,然後點擊[開始]按鈕。

    3. 將顯示輸入要Pick & Place的料件數量的對話方塊。
      輸入任意數值,然後點擊[OK]按鈕。

    4. 料件供應至供料器後,確認機器人拾取料件並將其移動至工作台的情況。