Описание объекта:
Есть прибор с стандартным протоколом Modbus + счетчик с модбасоподобным протоколом (для его опороса был написан скрипт).
Все это опрашивается через один GPRS модем.
После запуска OPC все работает отлично.
Спустя день (2 дня) происходит сбой скрипта опроса счетчика. При этом второй прибор опрашивается без проблем (прямые теги).
Перезапуск OPC сервера решает проблему. Но спустя день ошибка повторяется.
Реинициализация узла не помогает.
Как перезапустить скрипт при ошибке без перезапуска программы?
В скрипте в функции Get_Register() формируется запрос к счетчику, выполняется байтстаффинг массива запроса и отправляется в счетчик функцией server.SendAndReceiveDataByMask.
Функция server.SendAndReceiveDataByMask возвращает ответ, производится байтстаффинг, проверка контрольной суммы, обработка результата и передача требуемой переменной.
Скрипт работает, но после некоторого количества запросов прекращается получение данных от счетчика.
При запросе 1 раз в секунду скрипт выдавал ошибку примерно через 20 часов работы, при запросе раз в минуту - около 3-х дней.
При запуске скрипта происходит следующее:
В локальный массив Array[] помещаются байты запроса, вычисляется контрольная сумма и выполняется байтстаффинг.
Посылается запрос счетчику массива Array без вычисления контрольной суммы с предполагаемой длиной ответа до 80 байт.