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