Автор: Роман Савоченко
Порушення та робота з ними у 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} та де додатково визначено:
Загалом треба відзначити, що повідомлення та облік порушень це різні механізми, які можуть використовуватися окремо — для простих проектів або разом — для великих-комплексних проектів.