Vai al contenuto
PLC Forum


Operazioni Tra Variabili


Messaggi consigliati

Inserito:

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


Inserita:

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.

Inserita:

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

Inserita:

Va benissimo così.

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...