Обработка сообщений BACnet multi

<< Click to Display Table of Contents >>

Navigation:  Проект в MasterSCADA 4D > Дерево системы > Получение и отправка данных > Дополнительные протоколы > BACnet multi > Свойства BACnet Device >

Обработка сообщений BACnet multi

В протоколе BACnet multi реализована возможность получать и квитировать сообщения с контроллера. Сообщения отображаются в журнале, а хранятся в Основном архиве сообщений.

Устройство BACnet может формировать уведомления (Event и Alarm) при возникновении различных ситуаций - превышения или занижения границ измерения, отказа канала, а также для булевых переменных - переход канала в определенное состояние (например, срабатывание пожарной сигнализации, открытие двери и т.д.). При этом существуют внутренние тревоги (Intrinsic Alarming), которые формируются внутри объекта (например, объект Analog Value перешел в состояние HighLimit), и алгоритмические тревоги (Algorithmic Alarming), которые формирует специальный объект EventEnrollment на основании значений других объектов. В протоколе поддерживаются только внутренние тревоги.

В качестве источника тревоги используется PresentValue объекта. Поэтому формируются только сообщения от тех объектов, которые добавлены в модуль и имеют свойство PresentValue. Если объект сообщения не опрашивается протоколом или его PresentValue не добавлен, сообщение не записывается в Основной архив сообщений и не отображается в журнале.

Сообщения возникают при переходе из одного состояния в другое. В протоколе поддержаны три основных состояния - Normal, OffNormal, Fault. Если устройство передает статус выше OffNormal, он трактуется как OffNormal. Дополнительно некоторые объекты могут использовать статусы HighLimit и LowLimit, а также статусы, которые задают производители устройств.

В протоколе поддерживаются два способа получения сообщений.

Первый - периодический опрос специального сервиса Get Information Service. Этот сервис выдает текущие активные сообщения устройства (как требующие квитирования, так и не требующие).

Второй - спорадический прием через сервисы Unconfirmed Event Notification и Confirmed Event Notification. В случае Unconfirmed устройство передает уведомление широковещательно. В случае Confirmed уведомления приходят на заранее настроенные BACnet клиенты, которые должны подтвердить получение.

Можно использовать или только первый способ, или оба способа одновременно. Настройки обработки сообщений находятся в разделе Обработка сообщений. Для включения получения данных через Get Information Service установите флаг Включить обработку сообщений.

Для приема уведомлений через Unconfirmed Event Notification и Confirmed Event Notification на уровне протокола нужно включить получение Broadcast запросов. Включите настройку Принимать Broadcast пакеты и укажите UDP порт для прослушивания.

Алгоритм обработки следующий. На старте протокол проверяет все устройства и определяет, есть ли среди них устройства с включенной обработкой сообщений. Если хотя бы у одного устройства обработка включена, протокол начинает монопольное прослушивание заданного UDP порта.

При поступлении уведомления протокол определяет отправителя по IP и BACnet MAC адресу, обрабатывает уведомление и передает данные в модуль протокола. Затем модуль на основании полученных данных формирует сообщение с текстом из настроек модуля. Сообщение записывается в Основной архив сообщений и отображается в журнале.

Важно! Прослушивание UDP порта выполняется только монопольно. Если другой программой будет занят заданный порт, то прослушивание невозможно. В этом случае весь протокол и все его модули блокируются и переводятся в состояние отказа, а в параметре Ошибка протокола будет выведено сообщение Listen UDP port is busy. Аналогичная ситуация возникает при запуске двух протоколов, настроенных на прослушивание одного и того же порта - работать будет только один. Поэтому, чтобы получать сообщения от нескольких модулей, помещайте их в один протокол.

Также, если запущена исполнительная система с прослушиванием Broadcast, не будет работать поиск устройств (порт 47808 уже занят). При этом считывание тегов для устройства с настроенным подключением (IP, MAC и Network) выполняется, так как используется динамический порт.

Независимо от способа получения сообщения - через Get Information Service или через Unconfirmed Event Notification - из уведомления извлекаются метка времени, идентификатор объекта и статус сообщения. Далее модуль выполняет поиск идентификатора объекта и проверяет наличие канала PresentValue. Если объект с PresentValue найден, создается сообщение с текстом из настроек модуля. Если сообщение требует квитирования и в настройках модуля разрешено квитирование сообщений, то в журнале становится доступной кнопка Квит.

Если сообщение было сначала получено через Unconfirmed Event Notification, а затем через Get Information Service, оно не будет повторно записано в Основной архив сообщений и отображено в журнале. Таким образом опрос Get Information Service помогает не пропустить сообщения, которые могли быть получены во время недоступности (например, если связь была отключена и сообщение возникло в контроллере, а в Unconfirmed уведомлениях оно не пришло).

Если объект в контроллере перешел в определенное состояние (Fault, Normal, OffNormal), для перехода в другое состояние может потребоваться подтверждение оператора - внешнее квитирование. Какие переходы должны обязательно квитироваться, определяется настройками Notification Class у объекта. В протоколе реализована возможность квитирования сообщений.

Квитирование сообщения выполняется двумя способами.

Через журнал: нажмите кнопку Квит у нужного сообщения и укажите примечание. Запрос (в том числе и примечание) отправляется в контроллер, сообщение считается квитированным и обновляется в Основном архиве сообщений.

Через вход Квитировать сообщения контроллера: по переднему фронту выполняется внеочередное считывание всех сообщений контроллера через Get Information Service, после чего квитируются все сообщения. Квитируются также сообщения тех объектов, которые не опрашиваются протоколом, а также объекты Event Enrollment. Если при квитировании будет обнаружено сообщение, которое еще не было квитировано в журнале, оно будет квитировано и в нем.