KUKA機(jī)器人自定義按鍵輸出信號(hào)置位復(fù)位(按鍵狀態(tài)切換)
這里我們通過(guò)指令的方式,實(shí)現(xiàn)有PLC協(xié)調(diào)多臺(tái)機(jī)器人產(chǎn)線的工作區(qū)域的宏程序,通過(guò)指令直接調(diào)用相關(guān)的邏輯處理程序。一:工作區(qū)域邏輯程序(簡(jiǎn)化),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
- 信號(hào)變量:相關(guān)信號(hào)變量聲明O_AREL_1:機(jī)器人輸出信號(hào),低位時(shí)表示請(qǐng)求進(jìn)入或已在工作區(qū)域內(nèi),高位時(shí)表示在區(qū)域外;I_ARDY_1:來(lái)自PLC的輸入信號(hào),表示區(qū)域準(zhǔn)備好,準(zhǔn)許機(jī)器人進(jìn)入工作區(qū)域;
- 工作區(qū)域邏輯關(guān)系:工作區(qū)域邏輯描述的是線體、輸送鏈、工作臺(tái)等設(shè)備區(qū)域是否就緒的狀態(tài);當(dāng)循環(huán)開(kāi)始,機(jī)器人請(qǐng)求進(jìn)入?yún)^(qū)域1,O_AREL_1=TRUE,當(dāng)區(qū)域暫未就緒,機(jī)器人處于等待時(shí),消息欄生成消息提示;當(dāng)工作區(qū)域1就緒(線體搬送完成,工裝完成定位),來(lái)自PLC信號(hào)I_ARDY_1=TRUE, 機(jī)器人得以進(jìn)入;當(dāng)機(jī)器人進(jìn)入?yún)^(qū)域1,保持O_AREL_1=TRUE;當(dāng)工作完成,機(jī)器人退出工作區(qū)域1, O_AREL_1=FALSE;
- 宏程序:工作區(qū)域請(qǐng)求:AREA_REQ(AREA:IN), 形參AREA為請(qǐng)求區(qū)域號(hào)(1-3);工作區(qū)域釋放:AREA_REL(REL:IN), 形參AREA為將要釋放的區(qū)域號(hào)(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-------------
至此將相應(yīng)文件放到相應(yīng)目錄下,以重新讀入文件的方式重啟,就好了。抱歉了各位,實(shí)在懶得逐行介紹了,大家自行理解吧,船長(zhǎng)有點(diǎn)累了。