Gestione isteresi su comando riscaldatore
Home › Forum › Programmazione IEC 61131 (LogicLab) › Gestione isteresi su comando riscaldatore
- Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 2 mesi fa da
Sergio Bertana.
-
AutorePost
-
Novembre 18, 2015 alle 2:19 pm #35879
Anonimo
InattivoHo realizzato un semplice programma ladder che gestisce il comando di un riscaldatore su acquisizione di temperatura da Pt100. Per evitare oscillazioni sul comando del riscaldatore ho gestito una isteresi sul valore di tempertaura.
Non essendo molto pratico nel linguaggio ST, seguendo quanto riportato in questo topic ho realizzato il tutto in ladder, ecco lo screenshot del programma. Chiedevo se era possibile avere un esempio in ST, così può essermi utile anche per avvicinarmi all’utilizzo del linguaggio.
Novembre 18, 2015 alle 2:30 pm #39195Sergio Bertana
Amministratore del forumPremesso che la gestione della isteresi che hai fatto è corretta, lo schema che hai realizzato non ha nulla del ladder è più adatto al linguaggio FBD (Screenshot). Tant’è che nella nuova versione di LogicLab 4 l’editor del ladder è stato rivisto per “costringere” lo sviluppatore a seguire le regole dettate dalla normativa IEC 61131. Ma niente paura è sempre possibile continuare ad usare la retrocompatibilità con l’editor attuale. Ora vediamo come scrivere il programma in ST.
AnInp.Address:=0; (* Module address *)
AnInp.Channel:=0; (* Module channel *)
AnInp.Mode:=AD_VOLT_0_10_COMMON; (* Acquisition mode *)
AnInp(); (* Execute the analog acquisistion *)IF (AnInp.Value < Minimum) THEN Heating:=TRUE; END_IF; (* If the value drops below minimum set the command *)
IF (AnInp.Value >= Maximum) THEN Heating:=FALSE; END_IF; (* If the value reach the maximum reset the command *)
IF (AnInp.Fault) THEN Heating:=FALSE; END_IF; (* On FB fault reset the command *)Anche per chi non ha esperienza di programmazione in linguaggio ST credo il programma sia leggibile, nella prima parte viene gestita l’acquisizione. Poi il valore acquisito viene comparato con lo statement IF con i valori minimo e massimo e se la condizione è vera si eseguono le operazioni scritte dopo il THEN.
Novembre 18, 2015 alle 3:40 pm #39196Sergio Bertana
Amministratore del forumNaturalmente è conveniente creare una funzione per gestire l’isteresi. In questo programma (Stampa) ho realizzato due funzioni per la gestione della isteresi una scritta in ST e l’altra in FBD (Download programma).
Novembre 20, 2015 alle 2:00 pm #39198Anonimo
InattivoDovrei realizzare un controllo che:
Temperatura < di SetPoint -> apri valvola A (heat)
Temperatura > di SetPoint -> apri valvola B (cool)
-2° da SetPoint > Temperatura < +2° da SetPoint -> chiudi sia valvola A e BIn questo modo se l’afflusso di caldo o freddo (per le pompe o valvole sovradimensionate) è troppo, arrestandole prima del valore di set point non si tende ad oltrepassarlo.
Novembre 20, 2015 alle 2:15 pm #39199Sergio Bertana
Amministratore del forumIntanto diciamo che con una regolazione On/Off è difficile evitare gli overshoots, il sistema tende sempre un po ad andare olte i valori di set point, solo una regolazione PID permette di evitare questo problema. Ma per realizzare una regolazione PID dovresti disporre di pompe e/o valvole gestibili analogicamente (Velocità/Portata variabile).
Comunque è buona la soluzione di creare una banda morta attorno al valore di SetPoint (Tu hai fissato ±2 gradi) ma si può avere un valore variabile da impostare sperimentalmente in base ai test reali sull’impianto. Aumentando la banda morta potrai arrestare l’azione prima di raggiungere il SetPoint lasciando alla inerzia termica il compito di portare la temperatura al valore di SetPoint senza avere overshoot.
Ecco lo screenshot in simulazione su SimuLab di un semplice riscaldatore a doppio effetto con banda morta (Download programma).
Febbraio 3, 2016 alle 8:15 am #39330Sergio Bertana
Amministratore del forum -
AutorePost
- Devi essere connesso per rispondere a questo topic.