Списался с технической поддержкой Insat, также отправил ссылку на эту беседу. Говорят у них проблема не воспроизводится.
Мы же описали выше точную причину ошибки и как сделать так, чтобы она воспроизводилась чаще. На наш взгляд информации для выявления и исправления более чем достаточно. Вот суть ошибки:
если UA-клиент передаст MasterOPC два запроса: PublishRequest + ReadRequest, то есть вероятность, что MasterOPC ответит с номером последовательности в обратном порядке, например, первый ответ вернёт с Sequence Number = 100, а второй = 99.
Чтобы ошибка не возникала, такую ситуацию нужно исключить.
Вот способ её воспроизведения, чтобы не приходилось делать слишком долгие тесты:
Если создать подписку с частотой 100 мс. и выставить таймер чтения статуса сервера почаще (например каждые 2 секунды), то вероятность воспроизведения ошибки вырастет многократно, т.к. PublishRequest + ReadRequest будут передаваться значительно чаще.
Вот инструкция для UaExpert по шагам:
1. В меню "Settings -> Configure UaExpert" выставляем "General.WatchdogTime" = 2000 и "General.WatchdogTimeout" = 2000. Теперь UaExpert будет каждые 2 секунды читать статус сервера. Также включаем опции "Trace.SDKTraceEnabled", "Trace.StackTraceEnabled", чтобы лог был подробнее;
2. Создаём подписку на тег Saw из стандартного проекта MasterOPC и выставляем PublishingInterval = 100 мс. Теперь UaExpert будет чаще посылать PublishRequest.
В результате этих действий вероятность одновременного выполнения запросов "PublishRequest + ReadRequest" вырастет и ошибка будет возникать чаще. В наших тестах она возникла через 6 часов теста, а в другой раз через всего три минуты.
Также поставил последнюю версию UaExpert с сайта разработчика, и одновременно к одному ОРС UA подключил локально установленную SCADA и UaExpert. Снимок во вложении. Интересно, что за сравнительно небольшой период у SCADA в логах было одно переподключение, а у UaExpert нет. Понятно, что у каждого клиента своя подписка и событие для каждого клиента произойдет не одновременно (или вообще не произойдет для какого то из них)
прим.: на картинке 09:14 последнее время события в UaExpert, он был запущен ранее и больше событий в логах нет, а SCADA была запущена позже
В чем смысл данного теста? Ошибка выявлена, её причины подробно описаны, не видим смысла тратить время на решённый вопрос и рассматривать результаты новых тестов. Она может вообще никогда не возникать (и она, конечно, не будет возникать одновременно для разных UA-клиентов). У неё просто есть вероятность, которая зависит от частоты выполнения PublishRequest и ReadRequest со стороны UA-клиента. Если скада это делает чаще, то и вероятность ошибки в журнале скады увеличится. Возможно есть также небольшая зависимость от производительности ПК. Если есть сомнения в описанном, то Вы можете самостоятельно сделать снимок трафика через Wireshark, посмотреть на пакеты ответов UA-сервера, сравнить номера последовательностей и убедиться в наличии проблемы (пример разбора снимка для UaExpert на скринах во вложении).
Если вышеописанной информации недостаточно для решения проблемы, то, к сожалению, не знаем что ещё можно добавить.