Порушення та робота з ними у 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 = "", bool force = false) або її варіанту простору параметру SYS.DAQ["Modul"]["Controller"]["Parameter"].alarmSet(string mess, int lev = -5, bool force = false), яка уніфікує категорію. Для виклику цих функцій з контексту шаблону треба додати ВВ "this" типу "Об'єкт", після чого встановлення порушення матиме вигляд this.alarmSet("Параметр: порушення", -5);. Вказана функція наразі використовується у багатьох модулях джерел даних, для контролю глобальних порушень об'єктів контролерів. Функція надає контроль перемикання пропуску повідомлень до буферу повідомлень, відтак ви можете спокійно здійснювати повторну генерацію та очищення порушень цією функцією без переповнення архіву повідомлень та що може бути корисним для періодичної актуалізації стану порушення.
Функція формує порушення з категорією al{ModId}:{CntrId}[.{PrmId}] та текстом {CntrNm} > {PrmNm}: {MessText}, де:
Формат тексту цією функцією не регламентуються, але є практика формування тексту порушення, визначена кадрами формування звітних документів на кшталт "Протокол порушень", де застосовується формат: {PrmId}: {PrmName}: {Alarm} та де додатково визначено:
Загалом треба відзначити, що сповіщення та облік порушень це різні механізми, які можуть використовуватися окремо — для простих проектів або разом — для великих-комплексних проектів.
Documents/How_to/Violations,_alarms_and_notifications/uk - GFDL | December 2024 | OpenSCADA 1+r3000 |