Проблема:
Неустойчивое соединение ПЛК323 мастер - СПК107 слейв. От мастера (16(0x10)) приходят в слейв pBuffer, COM_Service,- нормально. Из pBuffer в мастер (3(0x03)) иногда приходят данные с задержкой в несколько минут, иногда нет.
Контроллеры:
ПЛК323: мастер; (v.3.947); (Версия: 3.5.0.40); Port4 - 14 device (DI, DO) - нормально в работе, на нём же СПК107 (Версия: 3.5.2.0) - периодически мигает красным (шина не запущена); Port5 - 10 device (AO,AI) - нормально в работе; через библиотеку MB_TCP_Slave - нормально в работе; Port6 - зарезервирован под ASCII.
СПК107: слейв; (v.5.472); (Версия: 3.5.4.26); через библиотеку COM_Service (3.5.4.2) вроде в работе в буфер отправляет, принимает. Стандартный Modbus_Slave не работает, никакой версии почему-то?!
Что делал. Проект в разработке:
м1) До этого работал ПЛК323 Modbus_Slave (3.4.0.0) - СПК107 Com_Serice (3.1.0). Работал вяло, устойчиво.
* Нужно было преодолеть ограничение 40 переменных на ПЛК323 Modbus_Slave. Нажатия на СПК107 плохо срабатывали, соединение не устойчивое, но работало.
*-- Предпринял усилия улучшить конфигурацию, преодолеть ограничение 40 переменных, чёткость touch.
* Переменные в Visu из GVL - это нормально? Поставил VISU_TASK (Интервал t#200ms, приоритет 15), что такое Восприимчивость(1) из конфигурации СПК? . Как ещё улучшить чёткость touch СПК107?
* Чёткость touch СПК107 улучшилась, но видимо можно лучше. Возвратить к устойчивому варианту не удалось. Где-то ошибка.
м2) Программа. Опрос в ПЛК323 Modbus_Slave, Обработка в СПК107 COM_Service разбиты на шаги, проверку ошибок. Алгоритм выполняется.
м3) Добавлял задержки в программу опроса, обработки. Нет результата. Мастер не получает данные, либо с неприемлемой задержкой. От мастера в слейв данные поступают можно сказать нормально, если бы не периодические (2 мин.) потери соединения. Где-то ошибка.
м4) После отключения СПК, иногда ПЛК323 Modbus_Slave теряет соединение. Находиться в состоянии "шина не запущена" (красный), не восстанавливается. Добавил код, но похоже он не восстанавливает Modbus_Slave:
//----------------------------------------------------------------
// Перезапуск соединения, задержка TON1, счётчик ошибок CTU1
//----------------------------------------------------------------
IF Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xError THEN
TON1(IN:= NOT TON1.Q, PT:= T#60S, Q=> , ET=> );
IF TON1.Q THEN
TON2(IN:= NOT TON2.Q, PT:= T#5S, Q=> , ET=> );
IF TON2.Q THEN
Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xReset := TRUE;
END_IF;

CTU1 (
CU:= Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xReset,
RESET:= ,
PV:= ,
Q=> ,
CV=> wCurrentCounterValue
);
Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xReset := FALSE;

END_IF;
ELSE
Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xReset := FALSE;
END_IF;
Можно ли программно восстановить Modbus_Slave_COM_Port у СПК107?