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のデータを2つ定義します。
[PLC_1] - [Program blocks] - [Robots] - [Epson]を右クリックし、[Add new block]を選択し、[Language]をSCLとして、以下の2つの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]を選択すると、ロボット動作が停止します。