透過SRCI進行機器人控制範例
以下以Siemens PLC進行機器人控制為例說明。
- Siemens PLC的用戶端軟體為「TIA Portal V20」
- 在TIA Portal中新建專案時,請由Siemens公司提供的「SIMATIC Robot Library V1.2」Archive檔建立
- 採用SCL(Structured Control Language)進行機器人控制
將PLC的機種設定變更為您所使用的PLC型號。
雙擊[Project tree]中的[Device & networks],再雙擊畫面中央的[PLC_1]。
在[Device view]中顯示的PLC圖上按右鍵,選擇[Change device]。
選擇您所使用的PLC型號,然後按下[OK]按鈕。
設定PLC與控制器的通訊。
請參閱以下內容,設定PLC與控制器之間的通訊。
Siemens PLC的設定雙擊並開啟[Project tree]中的[PLC_1] - [PLC_tags] - [RobotCommunication]。
複製為其他廠商定義的[Xxx_To_PLC]與[PLC_To_Xxx],貼上後變更名稱。
將[Address]的設定變更為在[RC800-PROFINET-IO]的輸入/輸出模組中所設定的值。
設定用於Epson機器人控制的RobotTask功能區塊。
在[Project tree]的[PLC_1] - [Program blocks] - [Robots]下建立[Epson]群組。
將[Project tree]中的[PLC_1] - [Program blocks] - [Robots]下其他機器人廠商群組中所設定的以下Data block複製,貼至步驟i.中建立的群組,並變更名稱。
AxesGroupXxx
Robot_User_Data_Xxx
在[PLC_1]上按右鍵,選擇[Compile] - [Hardware and software (only changes)]。若出現ii.中複製之Data block編號重複的警告,按下[OK]以解除編號重複。
雙擊[PLC_1] - [Program blocks] - [Robots] - [Cyclicinterrupt_McRobotTask]。
開啟[Network 8],將[PLC_1] - [Program blocks] - [SRL] - [LRob] - [MC_RobotTask_LRob]拖放至其中,按下[Call options]對話方塊中的[OK]按鈕。
步驟v.中設定的Data block會配置於[PLC_1] - [Program blocks] - [Robots]下,移至[Epson]群組下並變更名稱。
設定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”
編寫用於機器人控制的SCL。
在[PLC_1] - [Program blocks] - [Robots] - [Epson]上按右鍵,選擇[Add new block],將[Type]設為Global DB,建立data block。在建立的Data Block中,如下圖所示定義兩個Data type為Lrob_typeRobotCartesianPosition的資料。
在[PLC_1] - [Program blocks] - [Robots] - [Epson]上按右鍵,選擇[Add new block],將[Language]設為SCL,建立以下兩個Function block。
- SrciFBs
- MoveBetweenTwoPoints
- SrciFBs
在ii.中建立的Function block中,如下圖所示定義資料。
在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");在ii.中建立的Function block中,如下圖所示定義資料。
在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;雙擊開啟[PLC_1] - [Progream blocks] - [Main],將建立的Function block拖放至[Network 1],按下顯示之對話方塊中的[OK]按鈕。
將[PLC_1] - [Progream blocks] - [Main]中設定的Function block「MoveBetweenTwoPoints」之「Start」參數變更為「MoveBetweenTwoPoint_DB.Start」。
在建立的專案中使機器人運作。
在[PLC_1]上按右鍵,選擇[Compile] - [Hardware and software (only changes)]。
在PC與PLC連線狀態下,在[PLC_1]上按右鍵,選擇[Download to device] - [Hardware and software (only changes)],更新PLC本體的硬體設定與軟體設定。
按下PLC本體的[Run]按鈕,或按下TIA Portal中的[Start CPU]按鈕,在PLC上開始程式。
開啟[PLC_1] - [Progream blocks] - [Main],按下[Monitoring on/off]按鈕以啟用監控。
在Function block「MoveBetweenTwoPoints」的「Start」上按右鍵,選擇[Modify] - [Modify to 1]。[MoveBetweenTwoPoints]Function block的狀態遷移開始,機器人開始運作。
在Function block「MoveBetweenTwoPoints」的「Start」上按右鍵,選擇[Modify] - [Modify to 0],機器人停止運作。