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;