Skip to main content

Automatico EXT con IO esterno

Modulo IO Esterno:

IO_Beckhoff.jpeg

Logica ponticelli:

IO_number.png

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