Буду очен благодарен если кто-нибудь опишет в каких ситуациях какой POU лучше использовать а в частности вот такая ситуация:
к мастеру сети подключено несколько слейв устройств, есть код переподключения устройства при потери связи:

Код:
PROGRAM PLC_PRG2
VAR
	BL: BLINK;
	te1: BOOL;
	te2: BOOL;
	Con: BOOL;
	Con2: BOOL;
	sl1: Connect;
	sl2: Connect;
	MV110_16D_con: BOOL;
	SIGE2_con: BOOL;
	i: INT:=0;
	J: INT:=0;
END_VAR



        IF MV110_16D.xError THEN
	Con:=FALSE;
	j:=j+1;
	BL(ENABLE:= TRUE, TIMELOW:= T#5S, TIMEHIGH:= T#100MS, OUT=> );
	MV110_16D.xReset:=BL.OUT;
ELSE
	BL(ENABLE:= FALSE, TIMELOW:= T#5S, TIMEHIGH:= T#100MS, OUT=> );
	MV110_16D.xReset:=FALSE;
	Con:=TRUE;
END_IF
так как слейв устройств много попробовал выделить этот кусок, в результате
в функции он перестает работать (но тут кое какие соображения появились почему такое выходит),
в функциональном блоке перестает работать (а вот тут полная непонятка)
работает если так в основной программе и пишу про каждое устройство

PS FB получился такой:

Код:
FUNCTION_BLOCK Connect
VAR_INPUT
	ModbusSlave: 	IoDrvModbus.ModbusSlaveComPort;
END_VAR
VAR_OUTPUT
	Connect:BOOL;
END_VAR
VAR
	BL: 			BLINK;
END_VAR

//===================================================================
IF ModbusSlave.xError THEN
	Connect:=FALSE;
	BL(ENABLE:= TRUE, TIMELOW:= T#5S, TIMEHIGH:= T#100MS, OUT=> );
	ModbusSlave.xReset:=BL.OUT;
ELSE
	BL(ENABLE:= FALSE, TIMELOW:= T#5S, TIMEHIGH:= T#100MS, OUT=> );
	ModbusSlave.xReset:=FALSE;
	Connect:=TRUE;
END_IF
//===================================================================