Документы/Как сделать/Нарушения, сигнализация и уведомления

This page is a translated version of the page Documents/How to/Violations, alarms and notifications and the translation is 100% complete.

Other languages:
English • ‎российский • ‎українська

Автор: Роман Савоченко

Нарушения и работа с ними в OpenSCADA реализуется двояко, что связано со структурой OpenSCADA, способами её использования, а также самой природой нарушений.

Первой стороной нарушений, с которой OpenSCADA работает изначально и которая наиболее востребована, является уведомление различными способами. Поскольку уведомление это часть интерфейса пользователя то и реализованы они в движке визуализации UI.VCAEngine и визуализаторах UI.Vision, UI.WebVision. На данный момент, механизм уведомлений о нарушениях реализует функции, часть из которых ещё не реализована в UI.WebVision:

В среде визуализации, при реализации уведомлений, нет установленного правила получения и формирования признака нарушения, поскольку нет однозначности в разных ситуациях. На данный момент, на стороне типизированных шаблонов источника данных, практикуется способ формирования атрибута ошибки "err" с кодами и текстом нарушения, а их обработка и формирование уведомления осуществляется уже в самом визуальном образе объекта данных. Иногда обработка границ уставок также осуществляется прямо, в визуальном образе объекта данных.

Впоследствии возникла необходимость протоколирования, а также учёта актуальных на текущий момент нарушений. Если для протоколирования достаточно формирования сообщений программы с оговоренной категорией и форматом сообщения, то для контроля за текущими нарушениями необходим некий буфер. Такой буфер был добавлен, в виде надстройки над подсистемой сообщений, а адресация к нему осуществляется инверсией уровня сообщения. Так, запись сообщения с уровнем "-2" и категорией "TEST" поместит сообщение в буфер нарушений и продублирует его в архиве сообщений. При запросе сообщений с отрицательным уровнем, сообщения будут браться из буфера нарушений. Удаление-снятие нарушения осуществляется записью сообщения с той же категорией "TEST" и неотрицательным уровнем.

Такая концепция учёта активных нарушений позволяет использовать стандартные механизмы работы с сообщениями:

Регистрацию нарушений лучше всего осуществлять на стороне типизированных шаблонов источника данных, посредством специальной функции SYS.DAQ["Modul"]["Controller"].alarmSet(string mess, int lev = -5, string prm = ""), которая унифицирует категорию. Для вызова этой функции из контекста шаблона нужно добавить IO "this" типа "Объект", после чего установка нарушения будет иметь вид this.cntr().alarmSet("Параметр: нарушение", -5, "prm");. Указанная функция сейчас используется во многих модулях источников данных, для учёта глобальных нарушений объектов контроллеров.

Функция формирует нарушение с категорией: al{ModId}:{CntrId}[.{PrmId}], где:

Формат текста этой функцией не регламентируется, но есть практика формирования текста нарушения, определённая кадрами формирования отчётной документации вроде "Протокол нарушений", где применяется формат: {PrmId}: {PrmName}: {Alarm} и где дополнительно определено:

At.png В целом нужно отметить, что уведомления и учёт нарушений это разные механизмы, которые могут использоваться отдельно — для простых проектов или вместе — для больших-комплексных проектов.