Vai al contenuto
PLC Forum


Operazioni Tra Variabili


Liuk78

Messaggi consigliati

Salve a tutti, sono un super dilettante che prova a farsi un self training come programmatore.

Ho creato tanto per cominciare, un piccolo programmino, probabilmente una banalità per voi esperti, che gestisce un semaforo di un incrocio.

Per il semaforo 1 (strada principale) nessun problema. Ora ho iniziato a creare la gestione del semaforo 2 (strada d'immissione):

Semaforo 1:

Verde---> gestito da timer variabile dall'utente (DB)

Rosso---> gestito da timer variabile dall'utente (DB)

Arancio---> gestito da timer con costante 5 secondi

Entrambe le DB sono dichiarate come S5Time.

Per il secondo semaforo vorrei fare una sottrazione:

Il tempo di rosso del semaforo 1 deve essere il tempo di verde + arancio del semaforo 2. Quindi vorrei sottrarre alla db del semaforo rosso 5 secondi per ricavare il tempo di verde.

Ho provato così:

  
L     "Tempi semaforo".Temp_sem1_rosso
L     S5T#5S
-I    
T     #time2 

Dove #time2 è una variabile temporanea sempre dichiarata in S5time.

Simulando con plc sim, quando immetto nel timer la variabile #time2 mi va in SF il plc, e il tempo caricato è comunque errato.

Mi potete dare una dritta? :senzasperanza:

Grazie :rolleyes:

Luca

Link al commento
Condividi su altri siti


Nel formato S5Time i bit da 0 a 12 contengono il valore di preset in BCD (3 digit, da 0 a 999), i bit 13 e 14 definiscono la base tempi (10-100-1000-10000 ms), i bit 14 e 15 sono riservati.

Non puoi quindi fare operazioni matematiche tra variabili in questo formato.

Per risolvere il tuo problema ti conviene impostare i tempi in variabili di tipo INT, fare i calcoli, e solo alla fine convertire i risultati in formato S5Time da dare in pasto ai timer

Oppure utilizzi altri tipi di timer (SFB4 "TON" e SFB5 "TOFF" che trovi nelle librerie Siemens installate con Step7), che lavorano con il formato TIME, che non è altro che una variabile DINT con valore del tempo in millisecondi.

Link al commento
Condividi su altri siti

Grazie mille ad entrambi delle precisazioni!!!

Ho verificato un'altra cosa però, che comandando la db del semaforo rosso fino a 9 sec e 990 ms funziona anche col mio metodo... ma se metto oltre va tutto fuoriscala e va in SF il plc.

I miei 2 errori sono stati nel comandare le 2 db da tabella variabili in tempo simatic; e non avere dichiarato la base tempi.

Ora le comando in decimale e ho aggiunto i seguenti controlli:

      L     "Tempi semaforo".Temp_sem1_verde
      ITB   
      L     W#16#2000
      OW    
      T     #Timever1

      L     "Tempi semaforo".Temp_sem1_rosso
      ITB   
      L     W#16#2000
      OW    
      T     #Timeros1
Con questo metto la base tempi in secondi.
 
      L     "Tempi semaforo".Temp_sem1_rosso
      L     5
      -I    
      ITB   
      L     W#16#2000
      OW    
      T     #Timesemver2

Con questo invece faccio la mia sottrazione e converto in s5time.

Se avete ulteriori precisazioni, sono sempre più che ben accette, dato che sto cercando di imparare il più possibile :thumb_yello:

Grazie ancora

Luca

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...