Здравствуйте!
Непрерывно записывать 0 - нормальная ситуация, любая импульсная команда по сути это делает:
IF #cmdClear THEN
FOR #i := 0 TO #maxI BY 1 DO
#data[#i] := 0;
END_FOR;
#cmdClear := FALSE;
END_IF;
Т.е. команда clear проживет всего несколько мс (в моем случае меньше 8мс) и сбросится.
Разумеется, на OPC серверах (в моем случае их 2 – встроенный OPC UA Server на S7-1500 и OPC DA KepServerEx 6) за это время не будет сгенерировано событий, и формально пункты 5 и 6 не происходят.
Могу перефразировать пункты:
5. OPC сервер не считал новое значение, потому что оно уже такое же как старое.
6. SCADA не получила новое значение, потому что у нее уже есть фактическое.
Ситуация все равно штатная. Нештатная ситуация, когда на контроллере одно значение, а на Scada другое, или, когда потеряна связь и состояние тега Bad.
По умолчанию, KepServerEx OPC UA Client работает в режиме Subscribe, но переключение в режим Poll и игра с частотой обновления глобально не решает проблему.
Проверил сейчас привязку KepServer напрямую через стандартный протокол Siemens.
"IEC_Timer_0_DB".TON(IN:=#cmdTest,
PT:=#timeReset, // #timeReset = 50ms
Q=> #TestQ);
#cmdTest := #cmdTest AND (NOT #TestQ);
Да, ситуация улучшается, и 50мс тоже отрабатываются, как и у вас на Schneider (в отличии даже от 500мс через OPC UA).
Возможно переключу протокол на этапе запуска, если будет заметна разница. В процессе разработки UA очень удобен для импорта тегов.
Версия Scada 2.2.7.1