Получилось реализовать ШИМ на основе двух таймеров, только вот мерцания все так же сохранились. Скорее всего это из-за того, что эти выходы работают с максимальной частотой 300 Гц в зависимости от цикла ПЛК
Код:
PROGRAM PWM
VAR_INPUT
pwm_coef: UDINT := 0; //1%=10
pwm_freq: UDINT := 20; //в UW
time_set: TIME;
END_VAR
VAR_OUTPUT
out_value: BOOL;
END_VAR
VAR
freqTimer: OSCAT_BUILDING.OSCAT_BASIC.CLK_PRG; //таймер, выводящий сигнал с потоянной частотой
pwmTimer: OSCAT_BUILDING.OSCAT_BASIC.TP_X; //таймер ШИМ
END_VAR
Код:
//time_set := REAL_TO_TIME(1000*REAL_TO_UDINT(1.0/TO_REAL(pwm_freq)));
freqTimer(PT := time_set);
//time_set := REAL_TO_TIME(REAL_TO_UDINT((1.0/TO_REAL(pwm_freq))*TO_REAL(pwm_coef)));
time_set := TO_TIME(TO_REAL(T#20ms) * TO_REAL(pwm_coef)/1000);
pwmTimer(IN := freqTimer.Q, PT := time_set);
out_value := pwmTimer.Q;