CarlettoR Inserito: 28 marzo 2017 Segnala Share Inserito: 28 marzo 2017 Buon giorno. Con S7 300 vorrei registrare i passaggi di stato da 0 a 1 di un Merker, memorizzando data e ora. Come potrei incolonnare l’informazione in una DB? Es: M44.4 = 1 scrivo in DB44.DBD0 “28/03/17 13:45” M44.4 = 1 scrivo in DB44.DBD4 “28/03/17 17:11” Grazie. Link al commento Condividi su altri siti More sharing options...
lupusimprobus Inserita: 29 marzo 2017 Segnala Share Inserita: 29 marzo 2017 AWL Ad ogni fronte di salita del merker richiami l'FC9999 Dando in ingresso la data e l'ora attuali A M 44.4 FP M 44.5 JNB _001 CALL FC 9999 data:=#act_DateTime // DATE_AND_TIME dati:=#Tabella // Array[1..10] of DATE_AND_TIME _001: NOP 0 DB50 - Archivio La tabella registra gli ultimi 10 cambi di stato da false a true DATA_BLOCK DB 9999 TITLE = VERSION : 0.1 STRUCT dati : ARRAY [1 .. 10 ] OF DATE_AND_TIME ; END_STRUCT ; BEGIN dati[1] := DT#90-1-1-0:0:0.000; dati[2] := DT#90-1-1-0:0:0.000; dati[3] := DT#90-1-1-0:0:0.000; dati[4] := DT#90-1-1-0:0:0.000; dati[5] := DT#90-1-1-0:0:0.000; dati[6] := DT#90-1-1-0:0:0.000; dati[7] := DT#90-1-1-0:0:0.000; dati[8] := DT#90-1-1-0:0:0.000; dati[9] := DT#90-1-1-0:0:0.000; dati[10] := DT#90-1-1-0:0:0.000; END_DATA_BLOCK FC50 - SCL Sposta i dati una riga verso il basso ed aggiunge alla prima riga la nuova data/ora In pratica un LIFO personalizzato, in questo modo puoi modificarlo per archiviare tutto ciò che ti occorre FUNCTION FC50 : VOID TITLE = '' AUTHOR : CMP_VG VERSION : '0.1' VAR_INPUT data : DATE_AND_TIME; // Data e ora attuale END_VAR VAR_IN_OUT dati : ARRAY[1..10] OF DATE_AND_TIME; // Tabella archivio END_VAR VAR_TEMP i : INT; // Contatore iterazioni END_VAR // Sposto tutti i dati una riga verso il basso // l'ultimo dato in fondo alla tabella andrà perso FOR i:=10-1 TO 1 BY -1 DO dati[i+1] := dati[i]; END_FOR; // Ora posso inserire il nuovo dato nella prima riga dati[1] := data; END_FUNCTION Spero d'esseri stato utile. Buona giornata Link al commento Condividi su altri siti More sharing options...
CarlettoR Inserita: 29 marzo 2017 Autore Segnala Share Inserita: 29 marzo 2017 Ti ringrazio, davvero tanto. Un'altra richiesta se puoi: non conosco il linguaggio SCL, potresti convertire in AWL? Buona giornata. Link al commento Condividi su altri siti More sharing options...
CarlettoR Inserita: 29 marzo 2017 Autore Segnala Share Inserita: 29 marzo 2017 Non è certo il massimo, ma funziona. Ho fatto così: da OB1 leggo Data e Ora. FC7 esegue le funzioni. FC70 richiamo FC7 assegno parametri. Archivio in DB7 PS: è possibile eliminare o nascondere le ultime due cifre dalle variabili Data e Ora? es: DW#16#170329 DW#16#211916 Grazie. Link al commento Condividi su altri siti More sharing options...
lupusimprobus Inserita: 30 marzo 2017 Segnala Share Inserita: 30 marzo 2017 Non so se per una cosa del genere vale la pena complicarsi la vita utilizzanto formati come DATE_AND_TIME e similari. Magari ti basterebbe salvare la data e ora attuali in una STRUCT di BYTE in tipo Data -> STRUCT DAY -> BYTE MONTH -> BYTE YEAR -> BYTE HOUR -> BYTE MINUTE -> BYTE SECOND -> BYTE E gestire tutto come un array di byte e con molto più semplici L DBxxx.DBB0 T DByyy.DBB10 Per leggere l'ora del PLC puoi vedere l'esempio al seguente link: https://support.industry.siemens.com/cs/document/21222026/how-can-you-read-out-the-date-and-time-with-sfc1-(read_clk)-and-set-them-with-sfc0-(set_clk)-?dti=0&lc=en-WW Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora