Ранее была тема по поводу мерцаний самописного ШИМ сигнала для обычных 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