Automatico EXT con IO esterno
Modulo IO Esterno
Il sistema utilizza un modulo di I/O esterno Beckhoff per la gestione dei segnali del robot KUKA.
Logica dei ponticelli
I segnali di ingresso richiesti dal controllore KUKA vengono ottenuti tramite ponticellatura delle uscite selezionate sul modulo di I/O esterno. La numerazione degli I/O segue lo schema illustrato nell’immagine seguente.
Configurazione dei segnali di sistema
Come primo passo, è necessario configurare il file:
STEU → Mada → $machine.dat
Andando ad assegnare ai vari segnali, gli ingressi EtherCAT:
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
Configurazione delle uscite
Le uscite utilizzate per la gestione dei segnali EXT devono essere definite nel file IO.dat, come mostrato di seguito.
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]
A questo punto, la configurazione degli ingressi e delle uscite risulta completata.
Gestione SPS e modalità EXT
All’interno del controllore KUKA è presente un programma SPS che gestisce, tramite interrupt, i segnali di Start, Stop e le altre funzioni di controllo in modalità EXT.
Questo programma è denominato ExtManager.sub e contiene il seguente 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 contesto, il timer utilizzato per la gestione dello Start fa riferimento alla variabile nTimeOutExt, definita nel file Globals.dat.