Здравствуйте коллеги.
Помогите разобраться с ситуацией...
Дано:
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х контроллеров, в зависимости от размеров. И адреса разные. Понятно что визуал мне и так менять под каждый проект, но не хотелось бы в скрипты лезть каждый раз.
Здравствуйте.
На скриншоте с давлениями видны значения и признак плохого качества. Установка не могла выдавать такие значения, так как логика работы ПЛК аварийно выключит установку при таких значениях. Откуда они могли взяться?
Значения внешних тегов поступают в скада-систему от OPC-сервера и без каких-либо преобразований архивируются в тренды. Скада-система это обычная скомпилированная программа, которая работает всегда одинаково. Она не может в произвольный момент времени сама по себе записывать какие-либо произвольные значения в случайные переменные, т.к. для этого нам пришлось бы написать такой алгоритм случайного присвоения значений. Если Вы видите какое-то значение в трендах, значит такое значение пришло с OPC-сервера. Откуда оно взялось на OPC-сервере, мы сказать не можем, вероятно в Вашем случае появление таких значении возможно при аварийных отключениях контроллера. Возможно, в момент отключения OPC-сервер успевает передать некорректные данные. Вы можете прислать нам для проверки на support@simple-scada.com папку с логами "..\Simple-Scada 2\Logs", возможно после проверки логов мы сможем дать более подробные комментарии.
Если нужно, чтобы при плохом качестве переменной анимация останавливалась, то измените скрипт следующим образом:
begin
if Sender is TM_Image then
with Sender as TM_Image do
if (GetBit(AsInt, Tag) = TRUE) and (Variable.IsGoodQuality = TRUE) then
AnimSpeed := 20
else
AnimSpeed := 0;
end.
Как мне можно определить факт того, что OPC "лег" и остановить анимацию?
Для контроля связи можно использовать способы описанные по ссылке (https://simple-scada.com/help/script/comm-control.html). Если использовать пинг, то в любом случае нужно в скрипте прописывать адрес контроллера, который нужно пинговать. Возможности получить IP-адрес OPC-сервера из скрипта нет.