Skip to main content

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.

IO Beckhoff

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.

Numerazione IO

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.