Lettura di 3 temperature da sonde 1-Wire
Home › Forum › Programmazione IEC 61131 (LogicLab) › Lettura di 3 temperature da sonde 1-Wire
- Questo topic ha 34 risposte, 9 partecipanti ed è stato aggiornato l'ultima volta 3 anni, 8 mesi fa da
[email protected].
-
AutorePost
-
Aprile 1, 2011 alle 12:05 pm #34988
Anonimo
InattivoUtilizzando la CPU SlimLine, devo acquisire i valori di temperatura da 3 sensori 1-Wire collegati ad una delle porte RS232 del modulo CPU attraverso l’adattatore RS232 to OneWire.Ho preso l’esempio relativo alla Fb OWRdTemperature che gestisce un solo sensore, come posso fare per acquisire anche gli altri 2 ?
Aprile 1, 2011 alle 12:19 pm #36688Massimo
ModeratoreUtilizzando il blocco funzione OWRdTemperature si può eseguire la lettura ti tutte le sonde desiderate, basta istanziare un blocco funzione per ogni sonda che si vuole acquisire. Per acquisire 3 sonde di temperatura occorono quindi 3 blocchi funzioni OWRdTemperature, ad ogni blocco deve essere passato l’ID del proprio sensore. Ricordo che ogni sensore 1-Wire ha un proprio codice univoco a 64 bits.
Siccome i blocchi funzione di lettura temperatura si collegano tutti al blocco funzione OWireMng che gestisce il convertitore seriale/1-Wire, occorre fare in modo che in ogni istante, solo una delle FB di acquisizione temperatura sia attiva, occorre quindi sequenziarne l’esecuzione.
A tal proposito ho creato un blocco funzione Sequencer, il blocco funzione è realizzato in linguaggio ST ed è fornito con il codice sorgente. La FB prevede sino a 8 uscite sequenziate, se ne servono meno, basta agire sul parametro MaxSeqNr. Nel caso si desideri aumentare il numero delle uscite basta modificare la FB.
l’FB prevede il passaggio da una sequenza alla successiva, sia quando si setta il relativo input SeqxOk, sia per timeout, questa FB trova utilizzo in molti ambiti, e quindi possibile esportarla dal programma di esempio ed importarla in un proprio programma. Allego la stampa ed il codice sorgente di un programma esempio.
Marzo 19, 2014 alle 3:37 pm #38138Sergio Bertana
Amministratore del forumDalla versione SFR059B000 della libreria ePLC1WireLib, l’FB di acquisizione temperatura da sensore DS18B20 è stato modificato ora si deve utilizzare l’FB sOWRdTemperature, One-Wire read temperature. Questa FB è molto simile a quella precedente, ma per permettere di gestire l’acquisizione di più sensori connessi ad un unico adattatore è possibile mettere in fila le FB.
Come si vede nella stampa, il programma del post precedente è stato semplificato eliminando il sequenziatore, il passaggio dalla lettura di una sonda all’altra è gestito dall’uscita Done della FB. Attivando Enable viene gestita l’acquisizione del sensore, terminata (Anche se in errore) si attiva l’uscita Done, che abilita l’acquisizione del sensore successivo e così via. Il Done della FB dell’ultimo sensore disabilita l’FB del primo ed il ciclo riparte.
Come si può notare ogni sensore è caratterizzato dal proprio ID univoco, se l’ID è stato rilevato tramite il programma OneWireViewer (Vedi post) occorre definire l’ID nella variabile scrivendolo nello stesso modo visualizzato nella finestra del programma (Screenshot). Allego programma sorgente.
Marzo 19, 2014 alle 4:10 pm #38139Sergio Bertana
Amministratore del forumDal mese di Gennaio del 2014 abbiamo inserito nella gamma di prodotti commercializzati i sensori della Sensit, nel catalogo Sensit viene proposto anche un sensore di temperatura basato sul DS18B20.
Maggio 3, 2016 alle 7:02 pm #39560Antonio
PartecipantePremesso che in ladder riesco tranquillamente a leggere fino a 8 sonde (ma penso che si possa ancora incrementare il numero) stavo tentando senza successo la trasformazione in linguaggio ST per una maggiore compatezza e flessibilità del codice.
Maggio 9, 2016 alle 3:32 pm #39561Sergio Bertana
Amministratore del forumHo realizzato un semplice programma in ST (OWTemperature) che esegue la lettura di 2 sonde in sequenza ecco il listato del programma.
Come si vede nella parte di gestione one-wire ho inserito anche il FB OWID di tipo sOWRdIdentifier per poter acquisire l’ID. Per acquisirlo occorre abilitare il FB. Attenzione, per rilevare l’ID del sensore bisogna collegare un solo sensore di temperatura.
OWID(Enable:=TRUE); (* One wire identifier *)
Acquisito l’ID basterà copiare il valore di IDCode nella definizione del sensore. Come vedi nel mio esempio ho definito due sensori di cui ho rilevato l’ID (Download programma).
Ottobre 17, 2017 alle 4:25 pm #39993Marcello
PartecipanteBuongiorno, se dovessi acquisire sul medesimo bus 12 sonde esiste un modo per “refreshare” l’FB sOWRdTemperature con un nuovo ID senza dover creare 12 blocchi indipendenti ?
Ho visto che su questo topic si dice che la CPU Cortex 7 ora ha l’interfaccia 1-Wire nativa da che versione è possibile utilizzarla ?
Ottobre 18, 2017 alle 9:02 am #39994Sergio Bertana
Amministratore del forumSi certo puoi utilizzare una sola istanza del FB sOWRdTemperature, basta definire prima di abilitarlo l’IDCode della sonda. Terminata l’acquisizione della temperatura, puoi disabilitare l’FB, cambiare IDCode e ripetere l’acquisizione della nuova sonda, e così via…
Ottobre 18, 2017 alle 4:34 pm #39995Marcello
PartecipanteHo provato disabilitando Enable con NOT(sOWRdTemperature.Ok) ma stranamente, dopo la prima acquisizione, Done e Ok restano in TRUE mentre mi aspetterei che passino, con Enable:=FALSE, entrambe in FALSE. Ho provato anche con una variabile indipendente ma niente, una volta eseguita la prima lettura Ok e Done restano TRUE. Dove sto sbagliando ?
Ottobre 19, 2017 alle 6:11 am #39996Sergio Bertana
Amministratore del forumNon devi usare Ok ma Done per gestire l’Enable, sOWRdTemperature(Enable:=NOT(sOWRdTemperature.Done)). Se vedi il manuale riporta:
Ok: Attivo per un loop se lettura temperatura eseguita correttamente
Done: Si attiva al termine della esecuzione lettura temperaturaQuindi se le lettura non và a buon fine Ok non si attiva ma Done si. Però comunque è strano quello che dici perchè Ok è attiva un solo loop (Quindi non puoi vederla in debug, troppo veloce) e disabilitando Enable si deve azzerare Done. La mia impressione e che tu con Ok attivo non esegui più il FB.
Giugno 15, 2018 alle 8:43 am #44305Paolo
PartecipanteStò utilizzando uno Slimline Cortex M7 che presenta una porta dedicata per il protocollo 1-wire e vorrei sfruttarlo per leggere in sequenza una sonda di temperatura e una sonda umidità.
Vorrei sapere quale porta ‘aprire’ con sysfopen per poter sfruttare il connettore P11 dello SlimLine.
Novembre 26, 2019 alle 9:35 am #51366Andrea
PartecipanteVorrei utilizzare il DS9097U-S09 adattatore 1-Wire a RS232 per acquisire 27 sonde 1-wire DS18B20 con una CPU SlimLine MPS046B, volevo sapere se è possibile acquisire così tante sonde nel caso qual è lo schema di collegamento.
Novembre 26, 2019 alle 9:48 am #51462Sergio Bertana
Amministratore del forumTrovo in Internet specifiche che indicano come lunghezza massima della rete 1-WIRE 400 metri e 500 il numero massimo di sensori. Ogni sensore equivale ad un accorciamento di 0,5 metri di lunghezza e ogni 100 metri di cavo causa una capacità aggiuntiva di 5nF aumentando la distorsione del segnale. In pratica la lunghezza della rete ed il numero di sensori dipendono da:
Tipo di cavi.
Qualità delle connessioni.
Interferenza da campi elettromagnetici esterni.Si accomanda cavi intrecciati per computer UTP collegando i cavi non utilizzati, e se cavo schermato anche lo schermo, alla linea di terra. Tutti i sensori sono connessi in parallelo alla linea, possono essere utilizzati sensori a 2 fili anche se nel caso di molti sensori connessi al bus per evitare il sovraccarico del segnale si consiglia di utilizzare sensori a 3 fili portando anche l’alimentazione.
Personalmente so di clienti che hanno realizato reti con il DS9097U-S09 in cui sono stati collegati fino a 20 sensori a 2 fili su una lunghezza di 100 mt. Essendo sensori a 2 fili per evitare di caricare troppo il bus è stata posta una resistenza da 100 Ohm in serie al segnale su ogni sensore, come cavo trattandosi di applicazione domotica è stato utilizzato del normale doppimo telefonico fatto passare in cavo corrugato distante da linee di potenza a 220Vca.
Ottobre 2, 2020 alle 8:27 am #57742Mattia Dal Santo
PartecipanteCortesemente dovrei leggere 10 sonde one-wire collegate alla porta COM0 del modulo CPU attraverso l’adattatore RS232 to OneWire e con necessità di avere il listato in ST. Ho preso come riferimento alcuni programmi postati nel forum ma gli esempi forse sono datati (Fanno riferimento al FB funzione OWMng).
Si potrebbe avere il listato ST della lettura di due o più sonde tramite la nuova libreria eLLab1WireLib?
Ottobre 2, 2020 alle 8:31 am #57748Sergio Bertana
Amministratore del forumLe librerie sono in continua evoluzione, ora con il rilascio della versione XUnified dei sistemi operativi tutte le librerie sono state aggiornate per renderle compatibili con la nuova architettura. Quindi per usare le nuove librerie puoi aggiornare il sistema operativo del tuo prodotto oppure inserire nel progetto la libreria eLLabXTargetAdjLib come indicato qui.
Venendo alla tua domanda nella knowledge base troverai gli esempi che ti interessano in questo articolo trovi come utilizzare il FB OWRdIdentifier per acquisire l’identificatore univoco di ogni sensore.
In questo articolo troverai esempi per l’acquisizione delle sonde di temperatura, come vedi dal programma in FBD se hai più sonde devi istanziare piu FB OWRdTemperature collegando il Done del primo sull’Enable del successivo e così di seguito. Immaginando la lettura di 3 sonde avremo.
// Acquires the temperature. Temp[0].OwID:=OWire.OwID; //One-Wire management ID Temp[0].Enable:=NOT(Temp[2].Done); //Enable Temp[0](); //Read temperature Temp[1].OwID:=OWire.OwID; //One-Wire management ID Temp[1].Enable:=Temp[0].Done; //Enable Temp[1](); //Read temperature Temp[2].OwID:=OWire.OwID; //One-Wire management ID Temp[2].Enable:=Temp[1].Done; //Enable Temp[2](); //Read temperature
-
AutorePost
- Devi essere connesso per rispondere a questo topic.