ndonj86 Inserito: 12 agosto 2014 Segnala Share Inserito: 12 agosto 2014 Salve a tutti, sono nuovo del forum e del mondo plc. Mi è stato assegnato un "compito" per la mia azienda. Mi trovo a sostituire un collega e dovrei creare un timer con Codesys, in grado di sincronizzarsi con l'ora reale attuale. Ho letto della libreria SysTimeRtc, ma non ho nessun altra idea in merito all'implementazione in Codesys. Grazie anticipatamente a tutti per la collaborazione.... A presto! Link al commento Condividi su altri siti More sharing options...
valvolina Inserita: 12 agosto 2014 Segnala Share Inserita: 12 agosto 2014 ciao inizia almeno dicendo di quale cpu si tratta e poi qualche spiegazione in dettaglio su quello che devi fare. per cominciare se vuoi estrarre la data e ora del plc dovresti usare la libreria syslibtime.lib con il blocco curtimeex fammi sapere saluti da Valvolina Link al commento Condividi su altri siti More sharing options...
ndonj86 Inserita: 13 agosto 2014 Autore Segnala Share Inserita: 13 agosto 2014 Ciao Valvolina, grazie inanzitutto per la disponiblità! Allora, come ti dicevo, sono praticamente a zero in materia....non mi hanno datto notizie del plc finale, simulo una cortex, ma purtroppo non ho ulteriori dettagli. I dettagli delle loro richieste sono: un temporizzatore che si sincronizzi con l'ora locale, si avvi e si fermi impostando l'orario. Spero di averti chiarito e mi scuso se sono stato un pò "brutale" nel primo post!!! Grazie ancora a tutti! dovrebbe essere un WAGO il plc finale! Link al commento Condividi su altri siti More sharing options...
valvolina Inserita: 13 agosto 2014 Segnala Share Inserita: 13 agosto 2014 (modificato) ciao, presupponiamo che il plc sia ad esempio un Wago 750-841 !!! innanzi tutto fai un nuovo programma in linguaggio st. per prima cosa richiami un blocco per l'estrazione della data e ora attuali del plc dalla libreria syslibtime.lib blocco curtimeEX dichiarazione delle variabili VAR data_ora_plc : CurTimeEx; data_ora_act: SystemTimeDate; data_ora_num: SysTime64; uscita_comandata : BOOL; END_VAR codice (* estrazione data e ora plc attuale ++++++++++++++++++++++++++++++++ *) data_ora_plc(SystemTime:= data_ora_num , TimeDate:= data_ora_act ); a questo punto nella variabile data_ora_act hai ottenuto una struttura dati così composta: dwHighMsec DWORD Year UINT Year, e.g. "2002" Month UINT Month, e.g. "12" Day UINT Day of month, e.g. "3" Hour UINT Hour of the current day, e.g. "13" Minute UINT Minutes of the current hour, e.g. "43" Second UINT Seconds of the current minute, e.g. "15" Milliseconds UINT Milliseconds of the current second, e.g. "649" DayOfWeek UINT Day of the week, e.g. "2" (Sunday=0, Monday = 1...) quindi ad esempio con il seguente codice: uscita_comandata := (data_ora_act.Hour >=10) AND (data_ora_act.Hour <=11); hai un uscita (bool) che si attiva dalle ore 10 fino alle ore 11 nello stesso modo puoi comparare minuti, secondi, giorno della settimana ecc.. spero di essere stato utile saluti da Valvolina Modificato: 13 agosto 2014 da valvolina Link al commento Condividi su altri siti More sharing options...
ndonj86 Inserita: 14 agosto 2014 Autore Segnala Share Inserita: 14 agosto 2014 buongiorno, siamo d'accordo sul dispositivo, sul linguaggio ST, ma per sincronizzarsi con l'ora locale, la "UTC" mi pare, il dispositivo deve far uso della libreria: SysTimeRtc e i suoi componenti (almeno dalle specifiche che mi sono state passate!). Per il resto, qualche idea su funzioni particolari , da creare, per start e stop e per settare il giorno della settimana? Grazie ancora!!! Link al commento Condividi su altri siti More sharing options...
valvolina Inserita: 14 agosto 2014 Segnala Share Inserita: 14 agosto 2014 (modificato) ciao faccio un pò fatica a capire cosa devi fare. con la libreria SysTimeRtc e in particolare con la funzione SysRtcSetTime imposti l'ora e data che vuoi, nell'orologio del plc. una volta settata data e ora, puoi leggere data e ora attuali del plc ad ogni giro di programma (con l'esempio messo sopra) in modo che hai data e ora attuali sempre aggiornati al volo. Ovviamente l'orologio del plc vive di vita sua e non lo puoi arrestare ed avviare quando vuoi, per cui non ti resta che compararne i valori nella struttura hai : anno mese giorno ore minuti secondi e anche il giorno della settimana ciascuno messo in una variabile data_ora_act.DayOfWeek assume i seguenti valori 1=lunedi 2=martedi........ 6=sabato e 0=domenica questa variabile è legata all'orologio ed è l'orologio che la governa quindi una volta settato l'orologio verrà aggiornata automaticamente. quindi per realizzare un uscita che si accende e si spegne in base a ore minuti e giono della settimana non ti resta che comparare i valori, per il set dell'orologio ad una data e ora impostata posso metterti un esempio se è quello che ti manca. spero di aver interpretato bene saluti Valvolina Modificato: 14 agosto 2014 da valvolina Link al commento Condividi su altri siti More sharing options...
ndonj86 Inserita: 14 agosto 2014 Autore Segnala Share Inserita: 14 agosto 2014 In effetti anche per me è difficile capire cosa cercano!!!!!!!!!!! Comunque hai colto nel segno ed io sono riuscito a capire qualcosa in più... Effettivamente è un esempio pratico quello che mi manca. Se puoi aiutarmi....te ne sarei molto grato!!! Grazie comunque.... Link al commento Condividi su altri siti More sharing options...
valvolina Inserita: 14 agosto 2014 Segnala Share Inserita: 14 agosto 2014 ciao di seguito un esempio per il set dell'orologio: i dati da scriviere nell'orologio vengono preparati (scritti) in intero convertiti in caratteri e poi viene assemblata la stringa da convertire in formato dt da passare al function block di scrittura orologio dichiarazione variabili VAR anno : INT; mese : INT; giorno : INT; ore : INT; minuti : INT; anno_str : STRING(4); mese_str : STRING(4); giorno_str : STRING(4); ore_str : STRING(4); minuti_str : STRING(4); data_ore : DATE_AND_TIME; data_ore_str : STRING; scrivi_data_ora: BOOL; codice programma +++++++++++++++++++++++++++++++ (* esempio stringa da formare : DT#1970-01-01-00:00 *) (* conversione dati in stringa ++++++++++++++++++++ *) anno_str := INT_TO_STRING(anno); mese_str := INT_TO_STRING(mese); giorno_str := INT_TO_STRING(giorno); ore_str := INT_TO_STRING(ore); minuti_str := INT_TO_STRING(minuti); (* inizio formazione stringa ++++++++++++++++++++++ *) data_ore_str := 'DT#'; data_ore_str := CONCAT(data_ore_str , anno_str); data_ore_str := CONCAT(data_ore_str , '-'); data_ore_str := CONCAT(data_ore_str , mese_str); data_ore_str := CONCAT(data_ore_str , '-'); data_ore_str := CONCAT(data_ore_str , giorno_str); data_ore_str := CONCAT(data_ore_str , '-'); data_ore_str := CONCAT(data_ore_str , ore_str); data_ore_str := CONCAT(data_ore_str , ':'); data_ore_str := CONCAT(data_ore_str , minuti_str); (* ++++++++++++++++++++++++++++++++++++++++++++++++ *) (* conversione in date and time +++++++++++++++++++ *) data_ore := STRING_TO_DT(data_ore_str); (* scrittura data e ora del plc +++++++++++++++++++ *) IF scrivi_data_ora THEN SysRtcSetTime(data_ore); END_IF; (* ++++++++++++++++++++++++++++++++++++++++++++++++ *) saluti da Valvolina Link al commento Condividi su altri siti More sharing options...
ndonj86 Inserita: 15 agosto 2014 Autore Segnala Share Inserita: 15 agosto 2014 Perfetto, grazie mille, provvedo subito a testarlo. Ti faccio sapere i miei eventuali (sicuri) problemi che riscontrerò!!!! Nel frattempo, avresti qualche suggerimento per creare una sorta di menù con cui selezionare le giornate di interesse in cui attivare il timer?? Grazie davvero! Link al commento Condividi su altri siti More sharing options...
bigalex Inserita: 15 agosto 2014 Segnala Share Inserita: 15 agosto 2014 Ciao ndonj86 . Valvolina ha dimostrato grande disponibilità ma pare quasi che a forza di "suggerimenti" tu voglia ricevere l'applicazione già pronta per essere utilizzata (o quasi). Tra l'altro tu stesso dici In effetti anche per me è difficile capire cosa cercano!!!!!!!!!!! Per cui figurati lo sforzo che deve fare una persona per cercare di capire cosa vuoi fare quando nemmeno tu hai piena conoscenza di quello che ti hanno richiesto. bigalex Link al commento Condividi su altri siti More sharing options...
ndonj86 Inserita: 15 agosto 2014 Autore Segnala Share Inserita: 15 agosto 2014 (modificato) Salve Bigalex, in effetti premettendo la mia totale ignoranza in materia, non credo di essermi approfittato della buona volontà e disponiblità di Valvolina. Per qualcuno che conosce l'ambiente di sviluppo, le librerie e quant'altro, credo che sia una passeggiata risolvere i problemi che per me sembrano insormontabili (con questo non sminuisco assolutamente il lavoro di Valvolina, anzi.......). Inoltre, posso assicurarti che l'applicazione non consiste solo in quello da me esposto, ma ci sono altre funzioni che ovviamente ho omesso e che sto sviluppando. Con questo, mi scuso con Valvolina se si sente sfruttato, ma non credo di aver fatto nulla di male ponendo alcuni quesiti e chiedendo "suggerimenti" e consigli a chi è più esperto di me! Saluti Modificato: 15 agosto 2014 da ndonj86 Link al commento Condividi su altri siti More sharing options...
valvolina Inserita: 15 agosto 2014 Segnala Share Inserita: 15 agosto 2014 ciao ndonj86, ma devi usera le pagine di visualizzazione di codesys oppure hai un pannello operatore o altro? fammi sapere saluti da Valvolina Link al commento Condividi su altri siti More sharing options...
ndonj86 Inserita: 15 agosto 2014 Autore Segnala Share Inserita: 15 agosto 2014 Io utilizzo la visualizzazione di codesys per il momento.... Poi successivamente andrà implementato su un pannello di controllo, ma non saranno più problemi miei! Grazie mille..... PS: Valvolina mi scuso se ti sembro un approfittatore, soprattutto alla luce di quanto affermato da Bigalex. Sono nuovo dell'ambiente, non conosco le dinamiche e dunque non vorrei far danno a nessuno....Ti sono comunque grato davvero per la disponiblità che mi ha dimostrato!!! Link al commento Condividi su altri siti More sharing options...
bigalex Inserita: 15 agosto 2014 Segnala Share Inserita: 15 agosto 2014 Ciao ndonj86 . Neanche a farlo apposta ho cercato su Google ed ho trovato questo che è una application note di Wago (Using the library Scheduler_03.lib) e che penso farebbe al caso tuo. bigalex Link al commento Condividi su altri siti More sharing options...
ndonj86 Inserita: 15 agosto 2014 Autore Segnala Share Inserita: 15 agosto 2014 Grazie mille Bigalex, ad una svista veloce, sembrerebbe perfetto per creare il "menù".... Grazie! Link al commento Condividi su altri siti More sharing options...
bigalex Inserita: 15 agosto 2014 Segnala Share Inserita: 15 agosto 2014 Prego. Tieni presente che è una libreria che dovrebbe essere in dotazione ai plc Wago quindi dovresti averla a disposizione nell'IDE di programmazione. Ci dovrebbero essere tutti i blocchi necessari per creare la logica di cui necessiti. bigalex Link al commento Condividi su altri siti More sharing options...
ndonj86 Inserita: 15 agosto 2014 Autore Segnala Share Inserita: 15 agosto 2014 Ecco appunto....era proprio quello che stavo per chiedere....non ho la libreria!!!!! Link al commento Condividi su altri siti More sharing options...
bigalex Inserita: 15 agosto 2014 Segnala Share Inserita: 15 agosto 2014 Non hai la libreria perchè non è presente nell'IDE ? Stai usando Codesys per Wago o è Codesys stand alone (cioè non è la versione che propone Wago) ? Poichè avevi detto che il plc sarebbe stato Wago ho dato per scontato che stessi programmando con la versione per quel plc. Se non hai la libreria è evidente che dovrai lavorare in proporzione alle funzionalità che vorrai ottenere . Quindi dovresti in qualche modo stendere delle specifiche a cui attenerti per la stesura del progetto e quindi verificare di quali funzioni software avrai bisogno e se alcune di queste già sono in quale modo disponibili per essere integrate. bigalex Link al commento Condividi su altri siti More sharing options...
Water Inserita: 26 agosto 2014 Segnala Share Inserita: 26 agosto 2014 ...se possibile aggiungo una domanda che più che atro è un dubbio, se il timer si deve avviare alle 23:59 e spegnere alle 0:01 il codice postato non può funzionare ... in pratica funziona solo "giornalmente" cioè se l'ora di avvio e sempre inferiore a quella di spegnimento, mi piacerebbe capire anche a me se esiste una via facile per un timer a cavallo delle mezzanotte Giuseppe Link al commento Condividi su altri siti More sharing options...
bigalex Inserita: 26 agosto 2014 Segnala Share Inserita: 26 agosto 2014 A me è capitato di dover fare uno schedulatore settimanale con 5 fasce orarie programmabili giornalmente più altre opzioni selezionabili per ogni singola fascia oraria (funzionamento generatori di vapore industriali) e con la possibilità di avere appunto l'avviamento es:20:00 e lo spegnimento alle 05:30. (PL7 Pro Schneider ormai parecchi anni fà) Quello che occorre considerare tra le altre è appunto questa casistica . Un modo semplice semplice non lo ho trovato (o meglio il semplice è sempre relativo) , comunque non ho mai utilizzato dei timer ma confrontato sempre l'ora del plc con l'ora di inizio e fine della fascia oraria. bigalex Link al commento Condividi su altri siti More sharing options...
Water Inserita: 27 agosto 2014 Segnala Share Inserita: 27 agosto 2014 visto che la "cosa" mi serve e sono capitato quì perchè cercavo uno spunto .. lo spunto è arrivato e ne posto la soluzione prima di tutto, come consigliato da qualcuno in questo forum, trasformo tutto in minuti/giorno anche se sembra macchinosa in realtà poi diventa molto più semplce la gestione, esempio: timer che deve funzionare dalle 10:00 di mattina alle 20:00 di sera = On dopo 600 minuti Off dopo 1200 minuti e fin quì la cosa è semplice ma non funziona se il timer deve funzionare esempio dalle 20:00 di sera alle 10:00 del mattino, ho trovato questa soluzione che sembra addirittura banale con un semplice IF e due righe di codice (oppure confronto) esempio se l'orario di avvio e inferiore all'orario di spegnimento = attivo l'uscita se il valore è superiore a ON e (AND) inferiore a OFF (classico caso) se l'orario di avvio è superiore all'orario di spegnimento = attivo l'uscita se il valore è superiore a ON o (OR) inferiore a OFF (caso a cavallo della mezzanotte) francamente non l'ho testato ma solo pensato .. dovrebe fungere ogni dritta è ben accetta nota: mi spiace ma non consosco il PLC di questa sezione, ma per fortuna la logica non ha Brand Giuseppe Link al commento Condividi su altri siti More sharing options...
bigalex Inserita: 27 agosto 2014 Segnala Share Inserita: 27 agosto 2014 Il tuo ragionamento è corretto. Non capisco però perchè vuoi utilizzare dei timer (o un timer). La comparazione ora:minuti:secondi (se vuoi la precisione al secondo) è sufficiente . Poi nel caso di programmazione settimanale dovrai tenere conto del giorno della settimana e nel caso di programmazione a calenario dovrai tenere conto della data . bigalex Link al commento Condividi su altri siti More sharing options...
Water Inserita: 27 agosto 2014 Segnala Share Inserita: 27 agosto 2014 x bigalex, intaffti non utilizzo nessun timer ... è solo il nome che ho dato a quello che sarà un blocco funzione (timer_giornaliero), che poi è anche la richiesta iniziale di chi ha generato il trhead, giusto per non essere off-topic nel mio caso i secondi non servono e mi basta la precisione al minuto mentre per il settimanle la vedo più semplice visto che è disponibile la variabile riferita al giorno della settimana ma per il momento non mi serve e men che meno una gestione mensile/annuale ciao e grazie, Giuseppe Link al commento Condividi su altri siti More sharing options...
valvolina Inserita: 27 agosto 2014 Segnala Share Inserita: 27 agosto 2014 ciao una soluzione abbastanza semplice per acendere alla sera e spegnere la mattina del giorno dopo potrebbe essere IF (ore_min_stop < ore_min_start) THEN accensione := ((ore_min_actual <= 2359) AND (ore_min_actual >= ore_min_start)) OR ((ore_min_actual <= ore_min_stop)); ELSE accensione := ((ore_min_actual <= ore_min_stop) AND (ore_min_actual >= ore_min_start)); END_IF magari poi si potrebbe aggiungere qualche ulteriore controllo saluti da Valvolina Link al commento Condividi su altri siti More sharing options...
Water Inserita: 27 agosto 2014 Segnala Share Inserita: 27 agosto 2014 un grazie valvolina per tradotto ST quanto indicato io sono un più macchinoso lo so ma mi serviva dell'altro .... ma volendo lo si può semplificare di molto vi posto il codice testato e funzionante in linguaggio ST (ambiente Codesys) e funziona sia dalla sera alla mattina che dalla mattina alla sera ma non so se il PLC di questa sezione è in grado di gestirlo spero si comunque utile a qualcuno penso che le variabili siano facilmente identificabili va da se che tutti gli orari (ON/OFF/corrente) sono trasformati in minuti/giorno **************************************************************** // se il timer è di tipo standard (ON inferiore a OFF) IF T_Day_ON_Min < T_Day_OFF_Min AND Timer_En THEN Timer_Std := TRUE ; Timer_Inv := FALSE ; ELSE Timer_Inv := FALSE ; END_IF // // se il timer è di tipo inverso (ON superiore a OFF) IF T_Day_ON_Min > T_Day_OFF_Min AND Timer_En THEN Timer_Std := FALSE ; Timer_Inv := TRUE ; ELSE Timer_Inv := FALSE ; END_IF // // gestione timer standard IF Timer_Std AND Now_Min > T_Day_ON_Min AND Now_Min < T_Day_OFF_Min THEN Timer_ON := TRUE ; ELSE Timer_ON := FALSE ; END_IF // // gestione timer inverso IF Timer_Inv AND Now_Min > T_Day_ON_Min OR Now_Min < T_Day_OFF_Min THEN Timer_ON := TRUE ; ELSE Timer_ON := FALSE ; END_IF // // gestione uscita OFF IF Timer_En = FALSE OR Timer_ON = FALSE THEN Timer_ON := FALSE ; Timer_OFF := TRUE ; ELSIF Timer_En = TRUE OR Timer_ON = TRUE THEN Timer_ON := TRUE ; Timer_OFF := FALSE ; END_IF ************************************************** ciaoo 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