Automatico EXT con IO esterno
testModulo IO Esterno:
Logica ponticelli:
Per prima cosa, configurare il file STEU -> Mada -> $machine.dat. Bisognerà aggiungere a queste quattro variabili di sistema, le corrispettive entrate che sono ponticellate alle uscite scelte da noi. File $machine.dat:
SIGNAL $EXT_START $IN[209] ;EXTERNER START
SIGNAL $MOVE_ENABLE $IN[210] ;FAHRFREIGABE GESAMT
SIGNAL $CONF_MESS $IN[211] ;EXTERNE QUITTUNG
SIGNAL $DRIVES_ON $IN[212] ;ANTRIEBE EIN
Uscite nel file IO.dat:
GLOBAL SIGNAL out_SYS_ExtStart $OUT[213]
GLOBAL SIGNAL out_SYS_MoveEnable $OUT[214]
GLOBAL SIGNAL out_SYS_ConfMess $OUT[215]
GLOBAL SIGNAL out_SYS_DrivesOn $OUT[216]
Ora la configurazione di ingressi e uscite è completata.
Nel Kuka ci sarà un SPS che gestisce con interrupt lo stop, start, ecc... viene chiamato "ExtManager.sub", e conterrà questo codice:
&ACCESS RVP
&COMMENT USER specified PLC program
DEF ExtManager ( )
;FOLD DECLARATIONS
;FOLD USER DECL
; Please insert user defined declarations
;ENDFOLD (USER DECL)
;ENDFOLD (DECLARATIONS)
;FOLD INI
;FOLD USER INIT
; Please insert user defined initialization commands
INTERRUPT DECL nStopBtn WHEN inStopRobot DO EXT_STOP() ;Nel caso in cui l'ingresso del pulsante di stop sia negato, basta mettere NOT
INTERRUPT ON nStopBtn
INTERRUPT DECL nStartBtn WHEN inStartRobot DO EXT_START()
INTERRUPT ON nStartBtn
INTERRUPT DECL nIntExtSelect WHEN $EXT DO EXT_SELECT()
INTERRUPT ON nIntExtSelect
;ENDFOLD (USER INIT)
;ENDFOLD (INI)
LOOP
IF NOT out_SYS_MoveEnable THEN
out_SYS_MoveEnable = TRUE
ENDIF
ENDLOOP
END
DEF EXT_INI ()
out_SYS_ExtStart = FALSE
out_SYS_ConfMess = FALSE
out_SYS_DrivesOn = FALSE
END
DEF EXT_STOP()
DECL STATE_T STAT
DECL MODUS_T MODE
INTERRUPT OFF nStartBtn
MODE=#SYNC
IF $PRO_STATE1 <> #P_FREE THEN
CWRITE($CMD,STAT,MODE,"STOP 1")
ENDIF
INTERRUPT ON nStartBtn
END
DEF EXT_START()
INTERRUPT OFF nStartBtn
IF (NOT $PRO_ACT)THEN
EXT_INI()
$TIMER[nTimeOutExt] = - tTimeOutExt
$TIMER_STOP[nTimeOutExt] = FALSE
nExtState = 0
WHILE NOT $TIMER_FLAG[nTimeOutExt]
SWITCH nExtState
CASE 0
IF NOT $PERI_RDY THEN
out_SYS_DrivesOn = TRUE
nExtState = 0
ELSE
out_SYS_DrivesOn = FALSE
nExtState = 1
ENDIF
CASE 1
IF $STOPMESS THEN
out_SYS_ConfMess = TRUE
nExtState = 1
ELSE
out_SYS_ConfMess = FALSE
nExtState = 2
ENDIF
CASE 2
IF NOT $PRO_ACT THEN
out_SYS_ExtStart = TRUE
nExtState = 2
ELSE
out_SYS_ExtStart = FALSE
nExtState = 3
ENDIF
CASE 3
$TIMER_STOP[nTimeOutExt] = TRUE
nExtState = 0
EXIT
ENDSWITCH
ENDWHILE
EXT_INI ()
ENDIF
INTERRUPT ON nStartBtn
END
DEF EXT_SELECT ()
DECL STATE_T STAT
DECL MODUS_T MODE
INTERRUPT OFF nIntExtSelect
MODE=#SYNC
IF $PRO_STATE1 == #P_FREE THEN
CWRITE($CMD,STAT,MODE,"RUN /R1/MAIN()")
CWRITE($CMD,STAT,MODE,"STOP 1")
CWRITE($CMD,STAT,MODE,"RESET 1")
ENDIF
INTERRUPT ON nIntExtSelect
END
in questo caso, il Timer per lo start usa la variabile "nTimeOutExt" che è salvata in un altro file (nel Globals.dat).
Adattare alle necessità il programma che deve essere chiamato alla selezione della modalità EXT

