Home › Forum › Programmazione IEC 61131 (LogicLab) › Gestione riscaldatore acqua con uscita PWM
- Questo topic ha 1 risposta, 1 partecipante ed è stato aggiornato l'ultima volta 1 anno, 6 mesi fa da
Sergio Bertana.
-
AutorePost
-
Marzo 21, 2025 alle 11:24 am #80738
Anonimo
InattivoDevo gestire un riscaldatore acqua, per il comando della resistenza utilizzo un relè statico collegato alla uscita 1 di un modulo di estensione statico con indirizzo 1, che vorrei gestire in PWM.
Guardando un pò gli esempi sul sito ho scritto questo programma, volevo un confronto con voi, ho settato correttamente le mask ecc?
VAR AbiScaldaAcquaEE : BOOL; (* Abilitazione riscaldamento *) FvSurplusW : UINT; (* Percettuale comando resistenza *) DOut : SysSetPhrDO; (* Manage peripheral outputs *) Pwm : PWMOut_v1; (* PWM management *) END_VAR // Inizializzazioni. IF SysFirstLoop THEN Pwm.TMin:=0.001; //Minimum output time Pwm.Frequency:=10.0; //Frequency (Hz) DOut.Address:=1; //Module address DOut.Mode:=DO_MODE#DO_8_LL; //Management mode DOut.Mask:=16#00000010; //Output mask END_IF; // Gestione PWM output. Pwm.Enable:=AbiScaldaAcquaEE; Pwm.Duty:=TO_REAL(FvSurplusW); Pwm(); IF NOT(Pwm.Out) THEN DOut.Value:=DOut.Value AND 16#FFFFFFEF; //Reset output ELSE DOut.Value:=DOut.Value OR 16#00000010; //Set output END_IF; DOut(); //Manage peripheral outputsMarzo 21, 2025 alle 11:29 am #80743Sergio Bertana
Amministratore del forumQuindi utilizzi il FB PWMOut per modulare variando il duty-cycle l’uscita di comando della resistenza. Ti ricordo che devi eseguire il programma nella task Fast che eseguita di default ogni 1mS ti permette di suddividere il periodo della frequenza di uscita (100mS) in 100 parti, ottenendo una risoluzione più che accettabile.
Veniamo ora alla domanda sul Mask, siccome le uscite sono gestite in immagine di processo nella task Slow, per permettere a task diverse dalla Slow di gestire le uscite in modo sincronizzato occorre abilitarne la gestione. Il parametro Mask del FB SysSetPhrDO serve proprio a questo, ogni modulo di uscita può gestire massimo 32 uscite, quindi settando il relativo bit nella DWORD di Mask ne viene abilitata la gestione da parte del FB. Ora se tu vuoi utilizzare l’uscita 1 del modulo di espansione con indirizzo 1 hai sbagliato il Mask, devi definire:
DOut.Address:=1; //Module address DOut.Mask:=16#00000002; //Output maskHai sbagliato anche i valori in AND ed OR sulla gestione di DOut.Value, devono essere 16#FFFFFFFD e 16#00000002. Altro consiglio per gestire DOut.Value, puoi utilizzare semplicemetne l’operando bit in questo modo:
DOut.Value.1:=Pwm.Out;
-
AutorePost
- Devi essere connesso per rispondere a questo topic.