PDA

Просмотр полной версии : Периодически происходит обрыв связи СПК107 с модулями



mikola_wow
08.09.2015, 17:33
Добрый день.
Просьба подсказать в чем может быть проблема. Все работает на протяжении нескольких часов , а потом происходит обрыв связи с модулями DI/AI/DO/
Обрыв происходит то с AI то c DO.
После включения и выключения СПК - все опять работает.

Заранее благодарен.
С ув. Николай

Логвиненко Андрей
09.09.2015, 09:17
В CDS3 при сбое связи по Modbus её надо перезапускать принудительно.
В документации это не прописано, нашел методом тыка.
Каждое устройство Modbus slave это экземпляр ФБ IoDrvModbus.ModbusSlaveComPort.
Этот ФБ имеет выходную переменную xError и входную xReset.
Выглядеть это должно примерно так:

FUNCTION_BLOCK MbCtrl
VAR_OUTPUT
error: BOOL;
END_VAR
VAR_IN_OUT
mv: IoDrvModbus.ModbusSlaveComPort;
END_VAR
VAR
Reset: R_TRIG;
tofError: tof;
END_VAR

Reset(CLK:=mv.xError );
mv.xReset:=Reset.Q;
tofError(in:=mv.xError,pt:=T#2S, Q=>error);

mikola_wow
09.09.2015, 10:33
В CDS3 при сбое связи по Modbus её надо перезапускать принудительно.
В документации это не прописано, нашел методом тыка.
Каждое устройство Modbus slave это экземпляр ФБ IoDrvModbus.ModbusSlaveComPort.
Этот ФБ имеет выходную переменную xError и входную xReset.
Выглядеть это должно примерно так:

FUNCTION_BLOCK MbCtrl
VAR_OUTPUT
error: BOOL;
END_VAR
VAR_IN_OUT
mv: IoDrvModbus.ModbusSlaveComPort;
END_VAR
VAR
Reset: R_TRIG;
tofError: tof;
END_VAR

Reset(CLK:=mv.xError );
mv.xReset:=Reset.Q;
tofError(in:=mv.xError,pt:=T#2S, Q=>error);

но ведь я установил галочку. автоматический перезапуска в настройках модбас мастер

Логвиненко Андрей
09.09.2015, 11:49
С новой версией Модбаса я не работал, так как сделал свою программу опроса.
А так, я бы сначала попробовал, а потом задавал вопросы.
Значок, как я понимаю перезапускает мастера, а у вас модули отваливаются по одному,
то есть виснет слейв.

mikola_wow
09.09.2015, 12:46
я выключаю питание модулей и связь пропадает. потом включают питание и связь восстанавливается. думаю проблема глубже.

KSergey
16.09.2015, 12:11
Была похожая проблема с частотниками. Вышел из положения перезагрузкой слэйвов в случае ошибки:

IF Modbus_Slave_COM_Port.xError THEN
BL(ENABLE:=TRUE , TIMELOW:=T#5000MS , TIMEHIGH:=T#100MS , OUT=> );
Modbus_Slave_COM_Port.xReset:=BL.OUT;
ELSE
BL(ENABLE:=FALSE , TIMELOW:=T#5000MS , TIMEHIGH:=T#100MS , OUT=> );
Modbus_Slave_COM_Port.xReset:=FALSE;
END_IF;

IF Modbus_Slave_COM_Port_1.xError THEN
BL1(ENABLE:=TRUE , TIMELOW:=T#5000MS , TIMEHIGH:=T#100MS , OUT=> );
Modbus_Slave_COM_Port_1.xReset:=BL1.OUT;
ELSE
BL1(ENABLE:=FALSE , TIMELOW:=T#5000MS , TIMEHIGH:=T#100MS , OUT=> );
Modbus_Slave_COM_Port_1.xReset:=FALSE;
END_IF;

IF Modbus_Slave_COM_Port_2.xError THEN
BL2(ENABLE:=TRUE , TIMELOW:=T#5000MS , TIMEHIGH:=T#100MS , OUT=> );
Modbus_Slave_COM_Port_2.xReset:=BL2.OUT;
ELSE
BL2(ENABLE:=FALSE , TIMELOW:=T#5000MS , TIMEHIGH:=T#100MS , OUT=> );
Modbus_Slave_COM_Port_2.xReset:=FALSE;
END_IF;

По сути, Логвиненко Андрей прав.

mikola_wow
21.09.2015, 11:00
Добрый день. Это я сделал. Но проблема не ушла.