Здравствуйте!
Вопрос по проблеме обмена по Модбас - отваливаются частотники.
Мой проект состоит из СПК107, МВ110-8A -2 шт,МВ110-2АС, МУ110-8Р или 16Р, МВ110-16ДН, МУ110-6У, МВ110-224.2АС, 2 шт. частотника ПЧВ101 (вообщем количество и типы модулей зависит от конфигурации объекта)
Терминаторы подключены, длина сети не более 2 метров.
Все каналы всех модулей опрашиваются посредством "RISING EDGE", вот так:
Безымянный.png
Если отвалились все установленные модули(зависит от конфигурации объекта) использую код:
Код:
CASE ResetStep OF
0: IF MV110_8ABoks1=MV110_8A_Addr5.xError AND MV110_8ABoks2=MV110_8A_Addr6.xError AND MV110_2AC=MV110_2AC_Addr7.xError AND
MU110_6U=MU110_6U_Addr8.xError AND MV110_16DN=MV110_16DN_Addr9.xError AND MU110_8RM1=MU110_8R_Addr10.xError AND
MU110_8RM2=MU110_8R_Addr11.xError AND MK110_4DN_4R=MV110_4DN_4R_Addr12.xError AND MU110_16R=MU110_16R_Addr13.xError AND
InverterBoks1=Inverter_Addr21.xError AND InverterBoks2=Inverter_Addr22.xError
THEN ResetStep:=ResetStep+1;
ELSE ResetStep:=0;
END_IF
1: Modbus_Master_COM_Port.xStop:=TRUE;
ResetTon(IN:=TRUE , PT:=T#200MS , Q=> , ET=> );
IF ResetTon.Q THEN
IF MV110_8ABoks1 THEN MV110_8A_Addr5.xReset:=TRUE;END_IF
IF MV110_8ABoks2 THEN MV110_8A_Addr6.xReset:=TRUE;END_IF
IF MV110_2AC THEN MV110_2AC_Addr7.xReset:=TRUE;END_IF
IF MU110_6U THEN MU110_6U_Addr8.xReset:=TRUE;END_IF
IF MV110_16DN THEN MV110_16DN_Addr9.xReset:=TRUE;END_IF
IF MU110_8RM1 THEN MU110_8R_Addr10.xReset:=TRUE;END_IF
IF MU110_8RM2 THEN MU110_8R_Addr11.xReset:=TRUE;END_IF
IF MK110_4DN_4R THEN MV110_4DN_4R_Addr12.xReset:=TRUE;END_IF
IF MU110_16R THEN MU110_16R_Addr13.xReset:=TRUE;END_IF
IF InverterBoks1 THEN Inverter_Addr21.xReset:=TRUE;END_IF
IF InverterBoks2 THEN Inverter_Addr22.xReset:=TRUE;END_IF
ResetTon(IN:=FALSE);
ResetStep:=ResetStep+1;
END_IF
2: ResetTon(IN:=TRUE , PT:=T#200MS , Q=> , ET=> );
IF ResetTon.Q THEN
IF MV110_8ABoks1 THEN MV110_8A_Addr5.xReset:=FALSE;END_IF
IF MV110_8ABoks2 THEN MV110_8A_Addr6.xReset:=FALSE;END_IF
IF MV110_2AC THEN MV110_2AC_Addr7.xReset:=FALSE;END_IF
IF MU110_6U THEN MU110_6U_Addr8.xReset:=FALSE;END_IF
IF MV110_16DN THEN MV110_16DN_Addr9.xReset:=FALSE;END_IF
IF MU110_8RM1 THEN MU110_8R_Addr10.xReset:=FALSE;END_IF
IF MU110_8RM2 THEN MU110_8R_Addr11.xReset:=FALSE;END_IF
IF MK110_4DN_4R THEN MV110_4DN_4R_Addr12.xReset:=FALSE;END_IF
IF MU110_16R THEN MU110_16R_Addr13.xReset:=FALSE;END_IF
IF InverterBoks1 THEN Inverter_Addr21.xReset:=FALSE;END_IF
IF InverterBoks2 THEN Inverter_Addr22.xReset:=FALSE;END_IF
ResetTon(IN:=FALSE);
ResetStep:=ResetStep+1;
END_IF
3: ResetTon(IN:=TRUE , PT:=T#200MS , Q=> , ET=> );
IF ResetTon.Q THEN
Modbus_Master_COM_Port.xResetComPort:=TRUE;
ResetTon(IN:=FALSE);
ResetStep:=ResetStep+1;
END_IF
4: ResetTon(IN:=TRUE , PT:=T#200MS , Q=> , ET=> );
IF ResetTon.Q THEN
Modbus_Master_COM_Port.xResetComPort:=FALSE;
ResetTon(IN:=FALSE);
ResetStep:=ResetStep+1;
END_IF
5: ResetTon(IN:=TRUE , PT:=T#200MS , Q=> , ET=> );
IF ResetTon.Q THEN
Modbus_Master_COM_Port.xStop:=FALSE;
ResetTon(IN:=FALSE);
ResetStep:=ResetStep+1;
END_IF
6: ResetTon(IN:=TRUE , PT:=T#200MS , Q=> , ET=> );
IF ResetTon.Q THEN
ResetTon(IN:=FALSE);
ResetStep:=0;
END_IF
END_CASE
Если какой то один слейв отвалился, тогда такой код (на BLINK):
Код:
ResetMV110_8A_Addr5(ENABLE:= MV110_8A_Addr5.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> MV110_8A_Addr5.xReset);
ResetMV110_8A_Addr6(ENABLE:= MV110_8A_Addr6.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> MV110_8A_Addr6.xReset);
ResetMV110_2AC_Addr7(ENABLE:= MV110_2AC_Addr7.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> MV110_2AC_Addr7.xReset);
ResetMU110_6U_Addr8(ENABLE:= MU110_6U_Addr8.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> MU110_6U_Addr8.xReset);
ResetMV110_16DN_Addr9(ENABLE:= MV110_16DN_Addr9.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> MV110_16DN_Addr9.xReset);
ResetMU110_8R_Addr10(ENABLE:= MU110_8R_Addr10.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> MU110_8R_Addr10.xReset);
ResetMU110_8R_Addr11(ENABLE:= MU110_8R_Addr11.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> MU110_8R_Addr11.xReset);
ResetMV110_4DN_4R_Addr12(ENABLE:= MV110_4DN_4R_Addr12.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=>МV110_4DN_4R_Addr12.xReset);
ResetMU110_16R_Addr13(ENABLE:= MU110_16R_Addr13.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> MU110_16R_Addr13.xReset);
ResetInverter_Addr21(ENABLE:= Inverter_Addr21.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> Inverter_Addr21.xReset);
ResetInverter_Addr22(ENABLE:= Inverter_Addr22.xError, TIMELOW:= T#200ms, TIMEHIGH:= T#1S, OUT=> Inverter_Addr22.xReset);
Измеряли сигналы на RS осциллографом - при подключении частотников сигнал в сети начинает сильно искажаться.
Из выше указанного вопрос: нет ли у меня в коде какие-то ошибки, и как можно победить эти помехи (кабель - витая пара, терминаторы стоят)?