这里我们通过指令的方式,实现有PLC协调多台机器人产线的工作区域的宏程序,通过指令直接调用相关的逻辑处理程序。一:工作区域逻辑程序(简化),logic.src文件。
DEF Logic ( )
;Author : CaptianBlack
;Version: 1.0
;Tele : 136-4553-4742
END
;INITIALISATION PLC
GLOBAL DEF INIT_EXT ( )
;SETTING FREE AREAS
O_AREL_1=TRUE
O_AREL_2=TRUE
O_AREL_3=TRUE
END
;AREA REQUEST LOGIC
GLOBAL DEF AREA_REQ (AREA :IN )
INT AREA
SWITCH AREA
CASE 1
O_AREL_1=TRUE
WAIT FOR I_ARDY_1
O_AREL_1=FALSE
CASE 2
O_AREL_2=TRUE
WAIT FOR I_ARDY_2
O_AREL_2=FALSE
CASE 3
O_AREL_3=TRUE
WAIT FOR I_ARDY_3
O_AREL_3=FALSE
DEFAULT
ENDSWITCH
END
;AREA RELEASE LOGIC
GLOBAL DEF AREA_REL (REL :IN )
INT REL
$ADVANCE=0
SWITCH REL
CASE 1
O_AREL_1=TRUE
CASE 2
O_AREL_2=TRUE
CASE 3
O_AREL_3=TRUE
DEFAULT
ENDSWITCH
END
- 信号变量:相关信号变量声明O_AREL_1:机器人输出信号,低位时表示请求进入或已在工作区域内,高位时表示在区域外;I_ARDY_1:来自PLC的输入信号,表示区域准备好,准许机器人进入工作区域;
- 工作区域逻辑关系:工作区域逻辑描述的是线体、输送链、工作台等设备区域是否就绪的状态;当循环开始,机器人请求进入区域1,O_AREL_1=TRUE,当区域暂未就绪,机器人处于等待时,消息栏生成消息提示;当工作区域1就绪(线体搬送完成,工装完成定位),来自PLC信号I_ARDY_1=TRUE, 机器人得以进入;当机器人进入区域1,保持O_AREL_1=TRUE;当工作完成,机器人退出工作区域1, O_AREL_1=FALSE;
- 宏程序:工作区域请求:AREA_REQ(AREA:IN), 形参AREA为请求区域号(1-3);工作区域释放:AREA_REL(REL:IN), 形参AREA为将要释放的区域号(1-3)
二、Logic.KFD,KFD文件
; LOGIC INLINEFORM
DEFTP LOGIC={SOC TRUE , SOT FALSE}
; Declaration parameters
DECL PARAM P_AREA_REQ={shortcut[] "AREA REQUEST=",UNIT[] " ",VALUE {REAL: MIN 1,MAX 32,STEP 1 ,DEFAULT 1,autolimit TRUE}}
DECL PARAM P_AREA_REQ_CM={shortname[] "AREA REQUEST WITH:", shortcut[] "AR", UNIT[] " ", VALUE {NAME: default[] "NONE"}}
DECL PARAM P_AREA_REL={shortcut[] "AREA RELEASE=",UNIT[] " ",VALUE {REAL: MIN 1,MAX 32,STEP 1 ,DEFAULT 1,autolimit TRUE}}
; Declaration folds
DECL FOLD F_AREA_REQ[1]
F_AREA_REQ[1]="AREA_REQ (%P_AREA_REQ )"
DECL FOLD F_AREA_REL[1]
F_AREA_REL[1]="AREA_REL (%P_AREA_REL )"
; Declaration inline form
DECL INLINEFORM AREA_REQ={FOLD[1] F_AREA_REQ, PARAM[1] P_AREA_REQ, PARAM[2] P_AREA_REQ_CM}
DECL INLINEFORM AREA_REL={FOLD[1] F_AREA_REL, PARAM[1] P_AREA_REL, PARAM[2] P_AREA_REQ_CM}
ENDTP
三、SmartHMI.User.Config文件
;---------Captian TECHNOLOGY PART----------
<MenuRoot SystemName="CommandMenu">
<MenuFolder DisplayName="MenuBar#Captian_Technology">
<MenuFolder DisplayName="MenuBar#Captian_Technology" MergeOrder="1100">
<MenuFolder DisplayName="MenuBar#User_Logic" MergeOrder="100">
<MenuItem DisplayName="MenuBar#Area Request" MergeOrder="100">
<CommandCall Target="LegacyLoader.InvokeModuleProc">
<Argument Name="PlugInName">INLINEFORM</Argument>
<Argument Name="ProcID">2011</Argument>
<Argument Name="ParamList">KUKATPUSER;logic;AREA_REQ</Argument>
</CommandCall>
</MenuItem>
<MenuItem DisplayName="MenuBar#Area Release" MergeOrder="110">
<CommandCall Target="LegacyLoader.InvokeModuleProc">
<Argument Name="PlugInName">INLINEFORM</Argument>
<Argument Name="ProcID">2011</Argument>
<Argument Name="ParamList">KUKATPUSER;logic;AREA_REL</Argument>
</CommandCall>
</MenuItem>
</MenuFolder>
</MenuFolder>
</MenuFolder>
</MenuRoot>
</KukaRoboter.SmartHMI.Menu>
;---------Captian TECHNOLOGY PART END-------------
至此将相应文件放到相应目录下,以重新读入文件的方式重启,就好了。抱歉了各位,实在懒得逐行介绍了,大家自行理解吧,船长有点累了。