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


Ответить с цитированием
