Обычные выходы как выходы с ШИМ
Ранее была тема по поводу мерцаний самописного ШИМ сигнала для обычных DO ПЛК210-03. Проблема была решена после того, как замкнул быстрый вход и обычный выход в цепь. Но вот возникла другая проблема: частота. Частота получается около 15Гц, что мало для работы клапанов манипулятора. Нужно хотя бы 50Гц получить, это было бы уже приемлемо для их работы. Вот код ШИМ, который по итогу получился:
Код:
PROGRAM BLINKER
VAR_INPUT
pwm_coef: UDINT;
END_VAR
VAR
flag1: BOOL;
in: BOOL;
isPWM: BOOL;
B_TRIG: OSCAT_BUILDING.OSCAT_BASIC.B_TRIG;
x: UINT := 0;
COEF17: ARRAY [0..5] OF BOOL := [1,0,0,0,0,0];
COEF34: ARRAY [0..5] OF BOOL := [1,1,0,0,0,0];
COEF50: ARRAY [0..5] OF BOOL := [1,1,1,0,0,0];
COEF67: ARRAY [0..5] OF BOOL := [1,1,1,1,0,0];
//COEF84: ARRAY [0..5] OF BOOL := [1,1,1,1,1,0];
counter: INT := 0;
out_value: BOOL;
END_VAR
VAR_OUTPUT
END_VAR
Код:
IF flag1 AND in THEN
isPWM := TRUE;
flag1 := FALSE;
ELSIF NOT flag1 AND NOT in THEN
isPWM := TRUE;
flag1 := TRUE;
END_IF
IF isPWM THEN
CASE pwm_coef OF
0:
out_value := FALSE;
1:
out_value := COEF17[x];
2:
out_value := COEF34[x];
3:
out_value := COEF50[x];
4:
out_value := COEF67[x];
5:
out_value := TRUE;
END_CASE
x := x+1;
isPWM := FALSE;
IF x >= 5 THEN
x := 0;
END_IF
END_IF