Automatico EXT Kuka

Gestione Automatico Esterno Kuka, senza PLC esterni, ma con modulo esterno IO Beckhoff.

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.

Automatico EXT con PLC Siemens

test 2