Vai al contenuto

Gestione riscaldatore acqua con uscita PWM

Home Forum Programmazione IEC 61131 (LogicLab) Gestione riscaldatore acqua con uscita PWM

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #80738
    Anonimo
    Inattivo

    Devo 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 outputs
    #80743
    Sergio Bertana
    Amministratore del forum

    Quindi 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 mask

    Hai 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;
Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.