Здравствуйте коллеги.
Помогите разобраться с ситуацией...
Дано:
1) Шнайдеровский контроллер (модель не помню, но какой то обычный) - помимо всей логики работы установки, так же является OPC сервером. Находится непосредственно возле "железа" и запитан электричеством от той же ветки ЛЭП.
2) Скада для визуализации процессов.
Что произошло:
На объекте периодически отключают электричество. Отключается именно установка с контроллером. Скада продолжает работать. Но у клиента происходит небольшая "паника", т.к. он видит что все показатели "горят" восклицательным знаком, но иконки вентиляторов продолжают вращаться (именно это их только и смущает

). (Короткое видео прилагаю)
Суть (тут будет многословно, извините

):
После очередного такого отключения, поступил запрос на исправление ситуации с вентиляторами. Состояние вентиляторов передается в "запакованной" переменной, где определенный бит отвечает за состояние. У объекта TM_Image на событии "Изменилась переменная" висит скрипт :
begin
if Sender is TM_Image then
with Sender as TM_Image do
if GetBit(AsInt, Tag) = TRUE then
begin
AnimSpeed := 20;
end else
begin
AnimSpeed := 0;
end;
end.
Первым делом, для решения проблемы было добавлено условие Variable.IsGoodQuality = TRUE в надежде что это решит проблему.
Но решил копнуть дальше и посмотреть на графики, и увидел оч странные данные.... Они на скриншотах.
Клиент утверждает, что, грубо говоря, с 11.00 и до 14.00 электричества не было. Но откуда тогда взялось значение в переменных? Тем более значения такие, что никак не могут быть в установке. На скриншоте с давлениями видны значения и признак плохого качества. Установка не могла выдавать такие значения, так как логика работы ПЛК аварийно выключит установку при таких значениях. Откуда они могли взяться? Тип архивации комбинированный для давлений и по времени для электроэнергии.
Собственно вопрос: как такие значения могли появиться или откуда они взялись, если ПЛК был выключен, а следовательно и OPC сервер, который встроен в ПЛК.
И дополнительный вопрос: я не уверен что проверка на качество исправит проблему с продолжением анимации вращения вентиляторов. Как мне можно определить факт того, что OPC "лег" и остановить анимацию? Думал воспользоваться пингом, но не увидел как мне найти в скриптах адрес OPC сервера. Жестко забивать его в скрипт не хочу, т.к. проект тиражируемый. 2 объекта уже работает и планируются еще (проект реализован при помощи функционала шаблонов). На каждом объекте от 1го до 4х контроллеров, в зависимости от размеров. И адреса разные. Понятно что визуал мне и так менять под каждый проект, но не хотелось бы в скрипты лезть каждый раз.