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],机器人运行将停止。