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つ定義します。

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