monica_124 Inserito: 20 giugno 2009 Segnala Inserito: 20 giugno 2009 Un saluto a tutti Sono alle prese con una cpu 314 e la necessità di comparare il giorno della settimana per alternare il funzionamento di 2 motori.Nella biblioteca del Simatic ho visto che con la funzione FC 7 è possibile dissociare il giorno della settimana dal formato DATE_AND_TIME, quindi:Lo richiamo in OB1, al parametro IN assegno la variabile temporanea dichiarata #giorno di tipo DATE_AND_TIME (lunghezza: 8 byte), e al parametro RET_VAL assegno la variabile DB100.DBW10 a 16 bit. esempio: CALL "DT_DAY" IN0 :=#giorno RET_VAL:=DB100.DBW10 A questo punto sembrerebbe tutto molto semplice, perchè dovrei visualizzare nella DW10 in formato decimale:1. se Domenica2. se Lunedì3. se Martedì4. se Mercoledì5. se Giovedì6. se Venerdì7. se SabatoDi fatto però non riesco a capire perchè continua a restituire lo stesso numero (3). Qualcuno di voi l'ha già utilizzata la funzione FC 7 con successo?Sono convinta che mi sfugge qualcosa e da sola non riesco a capire Mi potete aiutare? Grazie1000
pigroplc Inserita: 20 giugno 2009 Segnala Inserita: 20 giugno 2009 Il parametro RET_VAL si riferisce all'informazione in uscita dal blocco sullo stato dell'esecuzione del blocco stesso.il valore vero lo trovi all'interno della variabile temporanea #giorno che tu hai mappato. casomai appoggiala a delle merker word così trovi il valore agevolmente.pigroplc
ken Inserita: 20 giugno 2009 Segnala Inserita: 20 giugno 2009 Se guardi come è configurata una variabile date and time vedrai che ogni byte contiene un'informazione.vedi http://www.plcforum.it/forums/lofiversion/...php/t54409.html
monica_124 Inserita: 20 giugno 2009 Autore Segnala Inserita: 20 giugno 2009 (modificato) Grazie ragazzi, siete veramente gentili In ogni caso non riesco, per via dei miei limiti pigroplc: ho provato con l'operazione di caricamento ad appoggire la variabile ad una Word, non lo accetta CALL "DT_DAY" IN0 :=#giorno RET_VAL:=DB100.DBW10 L #giorno <--------------- mi segnala errore T MW 100 anche in questo caso dov'è che sbaglio?ken: avevo trovato, con la funzione cerca, quella discussione.Ma nelle informazioni restituite dalla variabile non vedo il numero corrispondente al giorno della settimana, per questa ragione ho pensato che con la funzione FC 7, nel parametro RET_VAL, si potesse leggere.Ma anche qui immagino che sia io a sbagliare ma dove? Modificato: 20 giugno 2009 da monica_124
monica_124 Inserita: 20 giugno 2009 Autore Segnala Inserita: 20 giugno 2009 Forse con un'immagine risulta più chiaro:
pigroplc Inserita: 20 giugno 2009 Segnala Inserita: 20 giugno 2009 suppongo che tu stia usando una FC per il lancio della FC7, se tu fai L LW2T MW100L LW4T MW102ecc ti trovi i valori che interessano a te.pigroplc
pigroplc Inserita: 20 giugno 2009 Segnala Inserita: 20 giugno 2009 se invece hai utilizzato una FB e quindi hai richiamato il blocco con una DB di istanza interroghi direttamente le DW della DB oppure sostituisci l'istruzione L LW2 con l'istruzione L DIW2pigroplc
monica_124 Inserita: 20 giugno 2009 Autore Segnala Inserita: 20 giugno 2009 pigroplc, io ti sono grata per lo sforzo che stai facendo ma devo ammettere che i mie limiti sono notevoli.Ho provato le istruzioni che mi hai suggerito ma dalla tabella delle variabili non riesco a interpretarne il significato Ritorno all'FC 7: non dovrebbe avere proprio la funzione di dissociare il giorno della settimana dal formato DATE_AND_TIME e quindi restituirmi il numero decimale corrispondente il giorno?Se oggi è Sabato dove o come leggo il numero 7 oops mi vergogno ragazzi, abbiate pazienza
Savino Inserita: 20 giugno 2009 Segnala Inserita: 20 giugno 2009 Ciao Monica,Se oggi è Sabato dove o come leggo il numero 7Se richiami da OB1, la TEMP9 contiene la DATE_AND_TIME del sistema.Sbagli nel richiamo. CALL "DT_DAY" IN :=#TEMP9 RET_VAL:=MW150Se monitori la MW150, ricavi il giorno della settimana corrente.
monica_124 Inserita: 20 giugno 2009 Autore Segnala Inserita: 20 giugno 2009 savino, grazie anche a te per la disponibilità e pazienza Ma come vedi dalla foto non c'è verso di riuscire, dall'OB1 richiamo l'FC 7 e la Word 188 mi visualizza 0Non ci stò più con la testa
JumpMan Inserita: 20 giugno 2009 Segnala Inserita: 20 giugno 2009 Il paramero IN0 è del tipo date_and_time, questo formato usa ben 8 byte codificati in BCD!0. Anno 1. Mese 2. Giorno 3. Ora 4. Minuti 5. Secondi 6. Due cifre più significative di MSEC 7. (4MSB) Cifre meno significative di MSEC 7. (4LSB) Giorno settimanale:I 4 bit bassi del 7° byte contengono il giorno della settimana:1 = Domenica 2 = Lunedì ... 7 = Sabato Non ho mai usato FC7 ma credo si limiti a estrarre il giorno della settimana dal parametro IN0 (cosa fattibile anche con un paio di istruzioni).Prima però devi usare SFC1 (READ_CLK) per leggere l'orario del sistema !iTemp1 INT int temporaneo DataOra DATE_AND_TIME Data / ora GDS INT Giorno della settimana CALL "READ_CLK" RET_VAL:=#iTemp1 CDT :=#DataOra CALL "DT_DAY" IN :=#DataOra RET_VAL:=#GDS
monica_124 Inserita: 20 giugno 2009 Autore Segnala Inserita: 20 giugno 2009 JumpMan: adesso funziona Visualizzo correttamente il numero 7 corrispondente a Sabato.Ho provato a forzare la data della CPU al 21/06/2009 ed effettivamente la Word 188 visualizza 1, cioè Domenica.Dunque era necessario richiamare l'SFC1!L'avessero specificato nella guida del Simatic , o anche in questo caso mi è sfuggito qualcosa?Per fortuna ci siete voi, un grazie di cuore a tutti per la disponibilità e la pazienza.GRAZIE 1000
Savino Inserita: 20 giugno 2009 Segnala Inserita: 20 giugno 2009 (modificato) Ciao Monica,Se tu guardi il mio attachment, vedi che la TEMP9 ( data type DATE_AND_TIME ) che sarebbe l'offset del orologio parte dall'indirizzo 12.0Infatti se tu vorresti caricare i dati dell'orologgio in OB1, indirizzi a partire del offset byte 12:L LB 12T MB 244 // annoL LB 13T MB 245 // mese..... Io vedo sul tuo attachment che l'offset della TEMP9 ha lo indirizzo 0.0 Vedi, se la TEMP9 non e' all'offset 12.0, allora non funzionera'.A me sembra strano perche nello OB1 per default, la TEMP9 e' all'offset 12.0Prima però devi usare SFC1 (READ_CLK) per leggere l'orario del sistema !Questo va bene se non carichi la TEMP9 nell'OB1. Modificato: 20 giugno 2009 da Savino
monica_124 Inserita: 20 giugno 2009 Autore Segnala Inserita: 20 giugno 2009 Savino: hai ragione, scusami se al tuo suggerimento di prima non ho considerato il richiamo nell'OB1.Richiamavo l'FC 7 da un'altro FC, mappavo la temporanea #TEMP9 convinta che avrebbe funzionato, invece ecco allora la ragione del richiamo di SFC1 se richiamo L'FC 7 da un'altro FC.Ora ho provato a richiamare l'FC 7 dall'OB1, effettivamente funziona Grazie di cuore anche a te.Ragazzi, vi sono estremamente riconoscente ciao, monica.
JumpMan Inserita: 20 giugno 2009 Segnala Inserita: 20 giugno 2009 L'importante è anche capire le cose, non soltanto farle funzionare...Savino, è strano il tuo OB1, per quello non mi capivo, nel mio ci sono i nomi delle variabili e non TEMP....OB1_EV_CLASS BYTE Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1) OB1_SCAN_1 BYTE 1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1) OB1_PRIORITY BYTE 1 (Priority of 1 is lowest) OB1_OB_NUMBR BYTE 1 (Organization block 1, OB1) OB1_RESERVED_1 BYTE Reserved for system OB1_RESERVED_2 BYTE Reserved for system OB1_PREV_CYCLE INT Cycle time of previous OB1 scan (milliseconds) OB1_MIN_CYCLE INT Minimum cycle time of OB1 (milliseconds) OB1_MAX_CYCLE INT Maximum cycle time of OB1 (milliseconds) OB1_DATE_TIME DATE_AND_TIME Date and time OB1 started OB1_DATE_TIME che sarebbe la tua TEMP9 è proprio all'indirizzo locale 12.0, ma non mi convince del tutto...Date and time OB1 started cioè data/ora di avvio dell'OB1 e non data/ora dell'orologio...
monica_124 Inserita: 20 giugno 2009 Autore Segnala Inserita: 20 giugno 2009 Se vi può interessare, quando da un progetto S7 apro l'OB1 le variabili temp. appaiono mappate così:
JumpMan Inserita: 21 giugno 2009 Segnala Inserita: 21 giugno 2009 (modificato) OB1_DATE_TIME che sarebbe la tua TEMP9 è proprio all'indirizzo locale 12.0, ma non mi convince del tutto...Date and time OB1 started cioè data/ora di avvio dell'OB1 e non data/ora dell'orologio...Mi auto-correggo, aveva ragione Savino, le variabili "Date and time OB1 started" si aggiornano ad ogni scansione di OB1, quindi se le operazioni di controllo dell'orologio vengono eseguite in OB1 non serve nemmeno usare SFC1, ma a questo punto non serve neanche usare FC7.Esempio:L LB 12 //Anno BTIT "Anno"L LB 13 // MeseBTIT "Mese"L LB 14 // giornoBTIT "Giorno"L LB 15 // OreBTIT "Ore"L LB 16 // MinutiBTIT "Minuti"L LB 17 // SecondiBTIT "Secondi"L LB 19L 2#1111UW T "GDS"Queste ultime 4 istruzioni dovrebbero essere sufficienti a Monica per determinare il giorno della settimana in OB1Per quanto riguarda i simboli delle variabili locali di OB1 non mi spiego come mai sono l'unico ad averli... Modificato: 21 giugno 2009 da JumpMan
Savino Inserita: 21 giugno 2009 Segnala Inserita: 21 giugno 2009 (modificato) Ora ho provato a richiamare l'FC 7 dall'OB1, effettivamente funzionaBrava Monica, well done! Per quanto riguarda i simboli delle variabili locali di OB1 non mi spiego come mai sono l'unico ad averli No JumpMan, non sei l'unico ad averle.Nel esempio allegato sopra avevo aperto un'OB1 in un progetto gia' esistente, e le variabili TEMP mi le sono trovate cosi descritte, e se mi chiedi perche, adesso non mi lo ricordo Comunque, nello esempio sotto, ho creato una nuova CPU, e OB1 e allora mi ha dato per default le discrizioni dopotutto piu' corrette.Comunque, la descrizione della TEMP dall'offset 12.0 potrebbe essere cambiata, e se vogliamo ricavare gli 8 byte di data dal orologgio di sistema, la data type deve essere del tipo DATE_AND_TIME. Modificato: 21 giugno 2009 da Savino
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