透過SRCI進行機器人控制範例

以下以Siemens PLC進行機器人控制為例說明。

  • Siemens PLC的用戶端軟體為「TIA Portal V20」
  • 在TIA Portal中新建專案時,請由Siemens公司提供的「SIMATIC Robot Library V1.2」Archive檔建立
  • 採用SCL(Structured Control Language)進行機器人控制
  1. 將PLC的機種設定變更為您所使用的PLC型號。

    1. 雙擊[Project tree]中的[Device & networks],再雙擊畫面中央的[PLC_1]。

    2. 在[Device view]中顯示的PLC圖上按右鍵,選擇[Change device]。

    3. 選擇您所使用的PLC型號,然後按下[OK]按鈕。

  2. 設定PLC與控制器的通訊。

    1. 請參閱以下內容,設定PLC與控制器之間的通訊。
      Siemens PLC的設定

    2. 雙擊並開啟[Project tree]中的[PLC_1] - [PLC_tags] - [RobotCommunication]。

    3. 複製為其他廠商定義的[Xxx_To_PLC]與[PLC_To_Xxx],貼上後變更名稱。

    4. 將[Address]的設定變更為在[RC800-PROFINET-IO]的輸入/輸出模組中所設定的值。

  3. 設定用於Epson機器人控制的RobotTask功能區塊。

    1. 在[Project tree]的[PLC_1] - [Program blocks] - [Robots]下建立[Epson]群組。

    2. 將[Project tree]中的[PLC_1] - [Program blocks] - [Robots]下其他機器人廠商群組中所設定的以下Data block複製,貼至步驟i.中建立的群組,並變更名稱。

      • AxesGroupXxx

      • Robot_User_Data_Xxx

    3. 在[PLC_1]上按右鍵,選擇[Compile] - [Hardware and software (only changes)]。若出現ii.中複製之Data block編號重複的警告,按下[OK]以解除編號重複。

    4. 雙擊[PLC_1] - [Program blocks] - [Robots] - [Cyclicinterrupt_McRobotTask]。

    5. 開啟[Network 8],將[PLC_1] - [Program blocks] - [SRL] - [LRob] - [MC_RobotTask_LRob]拖放至其中,按下[Call options]對話方塊中的[OK]按鈕。

    6. 步驟v.中設定的Data block會配置於[PLC_1] - [Program blocks] - [Robots]下,移至[Epson]群組下並變更名稱。

    7. 設定RobotTask功能區塊的各參數。

      參數名稱 資料名稱
      RobotInData “Epson_To_PLC”.Arm1
      RobotOutData “PLC_To_Epson”.Arm1
      UserData “Robot_User_Data_Epson”.UserData
      ToolData “Robot_User_Data_Epson”.ToolData
      FrameData “Robot_User_Data_Epson”.FrameData
      LoadData “Robot_User_Data_Epson”.LoadData
      SoftwareLimit “Robot_User_Data_Epson”.SwLimits
      DefaultDynamics “Robot_User_Data_Epson”.DefaultDynamics
      ReferenceDynamics “Robot_User_Data_Epson”.ReferenceDynamics
      WorkArea “Robot_User_Data_Epson”.WorkAreaData
      MessageLog “Robot_User_Data_Epson”.MessageLog
      SystemLog “Robot_User_Data_Epson”.SystemLog
      ConstantData “Lrob_ConstantData”
      AxesGroup “AxesGroupEpson”
  4. 編寫用於機器人控制的SCL。

    1. 在[PLC_1] - [Program blocks] - [Robots] - [Epson]上按右鍵,選擇[Add new block],將[Type]設為Global DB,建立data block。在建立的Data Block中,如下圖所示定義兩個Data type為Lrob_typeRobotCartesianPosition的資料。

    2. 在[PLC_1] - [Program blocks] - [Robots] - [Epson]上按右鍵,選擇[Add new block],將[Language]設為SCL,建立以下兩個Function block。

      • SrciFBs
      • MoveBetweenTwoPoints
    3. 在ii.中建立的Function block中,如下圖所示定義資料。

    4. 在ii.中建立的Function block中記述以下原始碼。

    #SetOperationMode_Instance(AxesGroup := "AxesGroupEpson");
    #EnableRobot_Instance(AxesGroup := "AxesGroupEpson");
    #MoveDirectAbsolute_Instance(AxesGroup := "AxesGroupEpson");
    #ChangeSpeedOverride_Instance(AxesGroup := "AxesGroupEpson");
    #GroupReset_Instance(AxesGroup := "AxesGroupEpson");
    #GroupContinue_Instance(AxesGroup := "AxesGroupEpson");
    
    1. 在ii.中建立的Function block中,如下圖所示定義資料。

    2. 在ii.中建立的Function block中記述以下原始碼。

    CASE #State OF
    #STATE_INIT:
        IF #Start THEN
            "SrciFBs_DB".ChangeSpeedOverride_Instance.Override := 10.0;
            "SrciFBs_DB".MoveDirectAbsolute_Instance.VelocityRate := 100.0;
            "SrciFBs_DB".MoveDirectAbsolute_Instance.AccelerationRate := 100.0;
            "SrciFBs_DB".MoveDirectAbsolute_Instance.DecelerationRate := 100.0;
            "SrciFBs_DB".MoveDirectAbsolute_Instance.JerkRate := -1.0;
            
            "SrciFBs_DB".SetOperationMode_Instance.OperationMode := 4;
            "SrciFBs_DB".SetOperationMode_Instance.Execute := TRUE;
            
            "SrciFBs_DB".GroupReset_Instance.Execute := TRUE;
            #State := #STATE_ENABLE_RA;
        END_IF;
        
    #STATE_ENABLE_RA:
        IF "SrciFBs_DB".SetOperationMode_Instance.Done THEN
            "SrciFBs_DB".EnableRobot_Instance.Enable := TRUE;
            #State := #STATE_WAIT_RA_ENABLED;
        END_IF;
        
    #STATE_WAIT_RA_ENABLED:
        IF "SrciFBs_DB".EnableRobot_Instance.Enabled THEN
            "SrciFBs_DB".ChangeSpeedOverride_Instance.Execute := TRUE;
            "SrciFBs_DB".GroupContinue_Instance.Execute := TRUE;
            #State := #STATE_MOVE_P1;
        END_IF;
        
    #STATE_MOVE_P1:
        "SrciFBs_DB".MoveDirectAbsolute_Instance.Position := "Position".P1;
        "SrciFBs_DB".MoveDirectAbsolute_Instance.Execute := TRUE;
        #State := #STATE_WAIT_FOR_REACHED;
        
    #STATE_MOVE_P2:
        "SrciFBs_DB".MoveDirectAbsolute_Instance.Position := "Position".P2;
        "SrciFBs_DB".MoveDirectAbsolute_Instance.Execute := TRUE;
        #State := #STATE_WAIT_FOR_REACHED;
        
    #STATE_WAIT_FOR_REACHED:
        IF "SrciFBs_DB".MoveDirectAbsolute_Instance.Done THEN
            "SrciFBs_DB".MoveDirectAbsolute_Instance.Execute := FALSE;
            IF #IsDestinationP1 THEN
                #State := #STATE_MOVE_P2;
            ELSE
                #State := #STATE_MOVE_P1;
            END_IF;
            #IsDestinationP1 := NOT #IsDestinationP1;
        END_IF;
        
        IF NOT #Start THEN
            "SrciFBs_DB".SetOperationMode_Instance.Execute := FALSE;
            "SrciFBs_DB".EnableRobot_Instance.Enable := FALSE;
            "SrciFBs_DB".ChangeSpeedOverride_Instance.Execute := FALSE;
            "SrciFBs_DB".GroupReset_Instance.Execute := FALSE;
            "SrciFBs_DB".GroupContinue_Instance.Execute := FALSE;
            #State := #STATE_INIT;
        END_IF;
    END_CASE;
    
    
    1. 雙擊開啟[PLC_1] - [Progream blocks] - [Main],將建立的Function block拖放至[Network 1],按下顯示之對話方塊中的[OK]按鈕。

    2. 將[PLC_1] - [Progream blocks] - [Main]中設定的Function block「MoveBetweenTwoPoints」之「Start」參數變更為「MoveBetweenTwoPoint_DB.Start」。

  5. 在建立的專案中使機器人運作。

    1. 在[PLC_1]上按右鍵,選擇[Compile] - [Hardware and software (only changes)]。

    2. 在PC與PLC連線狀態下,在[PLC_1]上按右鍵,選擇[Download to device] - [Hardware and software (only changes)],更新PLC本體的硬體設定與軟體設定。

    3. 按下PLC本體的[Run]按鈕,或按下TIA Portal中的[Start CPU]按鈕,在PLC上開始程式。

    4. 開啟[PLC_1] - [Progream blocks] - [Main],按下[Monitoring on/off]按鈕以啟用監控。

    5. 在Function block「MoveBetweenTwoPoints」的「Start」上按右鍵,選擇[Modify] - [Modify to 1]。[MoveBetweenTwoPoints]Function block的狀態遷移開始,機器人開始運作。

    6. 在Function block「MoveBetweenTwoPoints」的「Start」上按右鍵,選擇[Modify] - [Modify to 0],機器人停止運作。