Буду очен благодарен если кто-нибудь опишет в каких ситуациях какой 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
//===================================================================