BACnet – путь к интеграции систем безопасности в общую систему управления зданием. Часть 4


Скачать

Сергей ЛЁВИН,
главный конструктор СИГМА–ИС
les@sigma-is.ru

Хранение, доступ и управление данными в BACnet

Формализация процесса работы с данными – важная составляющая любой системы. И зачастую, казалось бы стандартная процедура хранения и доступа к данным по сложности не уступает основной прикладной задаче. И это неспроста, ведь продумать все детали, спроектировать и реализовать быстрые и надежно работающие методы доступа к объектам конфигурации или данным состояния системы, задача совсем нетривиальная. Кроме того, в серьезных проектах должны быть решены вопросы безопасности при работы с данными системы. Процедура проверки полномочий, защита от записи или удаления ключевых объектов конфигурации системы. Унифицированные методы доступа к данным различных объектов, пакетная обработка для повышения скорости доступа. В конце концов, грамотная и эффективно работающая система идентификации объектов. В общем вопросов и проблем при реализации всегда возникает масса. Поэтому хорошо продуманные и отлаженные системные механизмы позволяют довольно просто получить надежные и масштабируемые решения, а разработчики могут сосредоточиться на прикладных задачах, возложив ответственность обращения к данным на систему. BACnet предлагает полный набор системных служб для работы с свойствами объектов: как через файлы, так и через объекты BACnet.

Службы доступа к файлам

В BACnet определен набор служб используемых для доступа и работы с файлами, содержащимися в BACnet-устройствах. Здесь используется следующая концепция файлов - это видимое по сети представление байтов произвольной длины и назначения. Это совершенно абстрактный подход, который не описывает правила использования диска, ленты или других конкретных устройств хранения данных в BACnet. Стандартные службы работы с файлами могут использоваться для доступа к файлам, формат которых определен производителем оборудования, а также к специфичным файлам определенным в стандарте BACnet.

Каждый файл, который может быть доступен через файловые службы BACnet должен иметь соответствующий объект в устройстве – File object. Этот объект используется для идентификации файла по уникальному имени. Дополнительно File object предоставляет доступ к заголовку файла, где хранится служебная информация о размере, дате создания и типе файла. В BACnet файлы могут представляться двумя способами: последовательный поток байтов и последовательность нумерованных записей. Службы доступа к файлам предоставляют атомарные операции чтения и записи. В данном контексте «атомарность» означает, что в течение выполнения операции чтения или записи (AtomicReadFile и AtomicWriteFile), никакие другие подобные операции не могут выполняться с этим же файлом. Синхронизация этих служб с внутренними процедурами BACnet устройства не определяется стандартом, это является задачей прикладного разработчика.

Служба чтения из файла AtomicReadFile

Эта служба используется для выполнения операции Открытие – Чтение – Закрытие над содержимым указанного файла. Доступ может быть осуществлен как в режиме записей, так и в режиме потока байтов. Ниже дается описание параметров процедуры:

 

Аргументы при вызове операции чтения

Параметр

Описание

File Identifier

Параметр формата Object_Identifier, определяющий конкретный файл для чтения

Stream Access

Параметр показывает, что доступ к файлу будет потоковый, включает в себя параметры File Start Position и Request Octet Count

Stream Access : File Start Position

Параметр типа INTEGER, указывающий на количество байтов от начала файла до позиции, откуда будет производиться чтение. Значение «0» соответствует первому байту файла.

Stream Access : Request Octet Count

Параметр типа Unsigned, указывающий на количество байтов, которые будут читаться из файла начиная с позиции File Start Position.

Record Access

Параметр показывает, что доступ к файлу будет организован как доступ к записям, включает в себя параметры File Start Record и Request Record Count.

Record Access : File Start Record

Параметр типа INTEGER, указывающий на количество записей от начала файла до позиции, откуда будет производиться чтение. Значение «0» соответствует первой записи файла.

Record Access : Request Record Count

Параметр типа Unsigned, указывающий на количество записей, которые будут читаться из файла начиная с записи File Start Record.

 

Результат выполнения операции чтения

Параметр

Описание

End Of File

Параметр типа BOOLEAN, принимает значение TRUE, если ответ включает последний байт файла и FALSE в противном случае. Этот параметр используется для контроля конца файла, когда число считанных байтов или записей меньше, чем запрошено.

Stream Access

Параметр показывает, что был запрошен потоковый доступ к файлу, включает в себя параметры File Start Position и File Data.

Stream Access : File Start Position

Параметр типа INTEGER, указывающий на количество байтов от начала файла до позиции, откуда было произведено чтение. Значение «0» соответствует первому байту файла.

Stream Access : File Data

Параметр содержит строку байтов, содержащую запрошенные данные файла.

Record Access

Параметр показывает, что доступ к файлу был организован как доступ к записям, включает в себя параметры File Start Record,Returned Record Count и File Record Data.

Record Access : File Start Record

Параметр типа INTEGER, указывающий на количество записей от начала файла до позиции, откуда производилось чтение. Значение «0» соответствует первой записи файла.

Record Access : Returned Record Count

Параметр типа Unsigned, указывающий на количество записей, которые были реально считаны из файла. Это значение может меньше, чем указанное при запросе в Request Record Count.

Record Access : File Record Data

Параметр содержит список массивов байтов, содержащих запрошенные данные.

 

 

Служба записи в файл AtomicWriteFile

Эта служба используется для выполнения операции Открытие – Запись – Закрытие со строкой байтов в указанную позицию или список строк байтов в указанную группу записей в файле. Также как и при чтении доступ может быть осуществлен как в режиме записей, так и в режиме потока байтов. Ниже дается описание параметров процедуры:

 

Аргументы при вызове операции записи

Параметр

Описание

File Identifier

Параметр формата Object_Identifier, определяющий конкретный файл для чтения

Stream Access

Параметр показывает, что доступ к файлу будет потоковый, включает в себя параметры File Start Position и File Data

Stream Access : File Start Position

Параметр типа INTEGER, указывающий на количество байтов от начала файла до позиции, куда будут записываться данные. Значение «0» соответствует первому байту файла. Значение «-1» показывает, что это будет операция добавления данных в конец файла.

Stream Access : File Data

Параметр содержит строку данных, которые должны быть записаны в файл.

Record Access

Параметр показывает, что доступ к файлу будет организован как доступ к записям, включает в себя параметры File Start Record, Record Count и File Record Data.

Record Access : Record Count

Параметр типа INTEGER, указывающий на количество записей от начала файла до позиции, куда будет производиться запись. Значение «0» соответствует первой записи файла. Значение «-1» показывает, что записи будут добавлены в конец файла.

Record Access : File Record Data

Параметр содержит список строк данных, которые будут записаны в файл.

 

Результат выполнения операции записи

Параметр

Описание

Stream Access

Параметр показывает, что был запрошен потоковый доступ к файлу, включает в себя параметр File Start Position.

Stream Access : File Start Position

Параметр типа INTEGER, указывающий на количество байтов от начала файла до позиции, откуда была произведена запись. Значение «0» соответствует первому байту файла.

Record Access

Параметр показывает, что доступ к файлу был организован как доступ к записям, включает в себя параметр File Start Record.

Record Access : File Start Record

Параметр типа INTEGER, указывающий на количество записей от начала файла до позиции, откуда производилось запись. Значение «0» соответствует первой записи файла.



Службы доступа к объектам

В BACnet имеется девять прикладных служб, которые совместно предоставляют возможности для доступа и управления свойствами BACnet-объектов. В данном случае под BACnet-объектом понимается любой объект, чьи свойства доступны через стандартный протокол, вне зависимости от выполняемой функции объекта в устройстве, в котором этот объект размещен. Эти службы могут использоваться для доступа к свойствам объектов определенных производителями оборудования точно также, как и к стандартным объектам BACnet.

Служба AddListElement

Эта служба используется клиентом BACnet-user для добавления одного или нескольких элементов списка в свойствах объекта.

Структура параметров вызова AddListElement

Параметр

Описание

Object Identifier

Параметр типа BACnetObjectIdentifier, идентифицирующий объект, чьи параметры обрабатываются данной службой.

Property Identifier

Параметр типа BACnetPropertyIdentifier, уникальный идентификатор свойства, которое модифицируется данной службой.

Property Array Index

Если идентификатор, описанный выше, определяет свойство как массив данных, этот условный параметр указывает на элемент в массиве данных свойства, который будет модифицироваться данной службой. В противном случае этот параметр опускается.

List of Elements

Этот параметр определяет один или несколько элементов, которые будут добавлены к свойству, определенному параметром Property Identifier. Тип данных этих элементов определяется типом объекта в параметре Object Identifier.


После проверки правильности запроса, производится попытка модификации объекта, указанного в Object Identifier. Если объект существует и имеет свойство, указанное в параметре Property Identifier, выполнятся операция добавления всех элементов, указанных в List of Elements. Если операция выполняется успешно, возвращается положительный ответ Result(+). Если один или несколько элементов уже представлены в списке, добавление игнорируется. Таким образом, дублирующие элементы списка исключаются. Игнорирование существующих элементов не приводит к выдаче сообщения об ошибке. Если указанный объект не существует, указанное свойство не существует, тогда служба возвращает ошибку. Если один или несколько элементов не могут быть добавлены в список и их нет в списке, также возвращается ошибка и ни один элемент добавлен не будет. Таким образом, данная операция может рассматриваться как атомарная по отношению к добавляемым элементам, так как могут быть добавлены либо все указанные в параметрах элементы, либо ни одного.

Служба RemoveListElement

Эта служба используется клиентом BACnet-user для удаления одного или нескольких элементов списка в свойствах объекта. Если элемент сам представляет из себя список, весь этот элемент будет удален. Данная служба не позволяет работать с элементами вложенных списков. Структура параметров вызова идентична службе AddListElement. После проверки правильности запроса, производится попытка модификации объекта, указанного в Object Identifier. Если операция выполняется успешно, возвращается положительный ответ Result(+). Если один или несколько элементов не могут быть удалены или их нет в списке, возвращается ошибка Result(-) и ни один элемент удален не будет.

Служба CreateObject

Служба используется для создания нового экземпляра объекта. Создаваться могут как стандартные объекты BACnet, так и определенные производителем оборудования. Свойства создаваемого объекта могут быть инициализированы двумя способами: начальные значения могут передаваться как часть параметров службы CreateObject или значения могут быть записаны в уже созданный объектов вызовом службы WriteProperty. Поведение объектов, созданных данной службой изначально не определено или определено частично начальными значениями свойств и зависит от конкретного устройства.

Структура параметров вызова CreateObject

Параметр

Описание

Object Specifier

Параметр сообщает информацию о типе создаваемого объекта. Параметр может иметь тип ObjectType или ObjectIdentifier. В первом случае указанный тип объекта записывается в свойство Object_Type создаваемого объекта, идентификатор объекта задается автоматически.

List of Initial Values

Этот параметр является списком типа BACnetPropertyValues, значения свойств из которого будут записаны в свойства объекта при его создании.


После проверки правильности запроса, производится попытка создания нового объекта с типом указанным в Object Specifier. Если указан тип объекта, свойство Object_Identifier заполняется уникальным значением автоматически в BACnet устройстве. Свойство Object_Type инициализируется значением из Object Specifier. Если Object Specifier содержит идентификатор объекта, производится проверка на уникальность идентификатора. Если такой объект уже существует, новый объект не создается и возвращается ошибка. Если задан параметр List of Initial Values, все свойства оттуда будут скопированы в новый объект. При неудачной инициализации свойств выдается ошибка и новый объект не создается.

Служба DeleteObject

Служба используется для удаления существующего объекта. Несмотря на то, что данная служба применима к объектам любого типа, большинство объектов в реальной системе не смогут быть удалены, так как они обычно защищены от удаления. Тем не менее некоторые объекты могут создаваться и удаляться динамически.

Структура параметров вызова DeleteObject

Параметр

Описание

Object Identifier

Параметр типа BACnetObjectIdentifier определяет удаляемый объект


После проверки правильности запроса, производится попытка удаления объекта указанного в Object Identifier. Если указанный объект существует и может быть удален, возвращается положительный результат, если объект не существует или защищен от удаления, выдается ошибка.

Служба ReadProperty

Эта служба используется для запроса значения одного свойства одиночного объекта BACnet. Служба позволяет прочитать любое свойство любого объекта.

Структура параметров вызова ReadProperty

Параметр

Описание

Object Identifier

Параметр типа BACnetObjectIdentifier, идентифицирующий объект, чье свойство будет прочитано и возвращено этой службой.

Property Identifier

Параметр типа BACnetPropertyIdentifier, уникальный идентификатор свойства, которое запрашивается данной службой.

Property Array Index

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


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

Служба ReadPropertyMultiple

Эта служба используется для запроса значения одного или нескольких свойств одного или нескольких объектов BACnet. Служба позволяет прочитать любое свойство любого объекта. Пользователь может прочитать одиночное свойство одиночного объекта, список свойств одиночного объекта или любое число свойств любого количества объектов.

Структура параметров вызова ReadPropertyMultiple

Параметр

Описание

List of Read Access Specifications

Параметр содержит список одной или нескольких Read Access Specification. Каждая спецификация содержит два параметра Object Identifier и List of Property References.


Спецификация Read Access Specifications

Параметр

Описание

Object Identifier

Параметр типа BACnetObjectIdentifier, идентифицирующий объект, чьи свойства будут прочитаны и возвращены этой службой.

List of Property References

Этот параметр содержит список из одного или нескольких BACnetPropertyReferences, каждый из которых прямо указывает на конкретное свойство объекта. Если значение идентификатора содержит значение ALL, это означает что доступ запрашивается ко всем свойствам объекта. Значение REQUIRED означает, что запрашиваются стандартные свойства объекта. Значение OPTIONAL означает, что запрашиваются опциональные свойства.


Ответ данной службы имеет следующий формат:

Структура параметров ответа ReadPropertyMultiple

Параметр

Описание

Object Identifier

Параметр типа BACnetObjectIdentifier, идентифицирующий объект, чьи свойства возвращаются в ответе на запрос этой службы.

List of Results

Результат запроса свойств в виде списка. Каждый элемент списка содержит Property Identifier, условный параметр Property Array Index и Property Value или Property Access Error, если чтение завершилось с ошибкой.

Property Identifier

Параметр типа BACnetPropertyIdentifier, уникальный идентификатор свойства, которое запрашивается данной службой.

Property Array Index

Если идентификатор, описанный выше, определяет свойство как массив данных, этот условный параметр указывает на элемент в массиве данных свойства, который возвращается данной службой. Иначе параметр опускается.

Property Value

Если доступ к указанному свойству совершен успешно, возвращается этот параметр со значением этого свойства.

Property Access Error

Если доступ к указанному свойству указанного объекта запрещен, возвращает этот параметр с кодом ошибки доступа.

 

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

Служба ReadRange

Эта служба используется для чтения указанного диапазона данных из свойства объекта, которое представляет из себя список значений. Служба может использоваться для чтения любого списка или массива списков свойств.

Структура параметров вызова ReadRange

Параметр

Описание

Object Identifier

Параметр типа BACnetObjectIdentifier, идентифицирующий объект, чье свойство будет прочитано и возвращено этой службой.

Property Identifier

Параметр типа BACnetPropertyIdentifier, уникальный идентификатор свойства, которое запрашивается данной службой.

Property Array Index

Если идентификатор, описанный выше, определяет свойство как массив списков, этот условный параметр указывает на элемент в массиве списков свойства, которое будет запрашиваться данной службой. Если свойство не является массивом, параметр не учитывается.

Range

Здесь задается последовательный диапазон элементов запрашиваемого свойства. Причем критериями задания диапазона может быть позиция элемента, порядковый номер элемента или timestamp элемента в массиве.

Служба WriteProperty

Эта служба используется для изменения значения одного свойства одиночного объекта BACnet. Служба позволяет записать любое свойство любого объекта. Иногда свойства объекта защищены от записи. В этом случае попытка записи такого свойства вернет ошибку.

Структура параметров вызова WriteProperty

Параметр

Описание

Object Identifier

Параметр типа BACnetObjectIdentifier, идентифицирующий объект, чье свойство будет модифицировано этой службой.

Property Identifier

Параметр типа BACnetPropertyIdentifier, уникальный идентификатор свойства, которое будет модифицировано данной службой.

Property Array Index

Если идентификатор, описанный выше, определяет свойство как массив данных, этот условный параметр указывает на элемент в массиве данных свойства, который будет модифицироватся данной службой. Если этот параметр опущен, действие применяется ко всему массиву. Если свойство не является массивом, параметр также не учитывается.

Property Value

Новое значение, которое записывается в модифицируемое свойство.

Priority

Этот параметр может иметь значение в диапазоне 1-16 и обозначает приоритет данной операции записи. Если запись производится без указания приоритета, будет установлено значение по умолчанию 16 (низший приоритет).


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

Служба WritePropertyMultiple

Эта служба используется для модификации значения одного или нескольких свойств объекта BACnet. Служба потенциально позволяет записать любое свойство любого объекта.

Структура параметров вызова WritePropertyMultiple

Параметр

Описание

List of Write Access Specifications

Параметр содержит список одной или нескольких Write Access Specification. Каждая спецификация содержит до пяти параметров: Object Identifier, List of Properties References each of which consist of, Property Identifier, Property Array Index, Property Value и Priority


Спецификация Write Access Specifications

Параметр

Описание

Object Identifier

Параметр типа BACnetObjectIdentifier, идентифицирующий объект, чьи свойства будут модифицированы этой службой.

List of Properties

Этот параметр содержит список из одного или нескольких свойств, которые должны быть модифицированы. Каждый элемент этого списка содержит параметры, описанные ниже.

Property Identifier

Параметр типа BACnetPropertyIdentifier, уникальный идентификатор свойства.

Property Array Index

Если идентификатор, описанный выше, определяет свойство как массив данных, этот условный параметр указывает на элемент в массиве данных свойства, который модифицируется данной службой. Иначе параметр опускается. Если параметра не задан для массива, модифицируется весь массив.

Property Value

Новое значение модифицируемого свойства.

Priority

Этот параметр может иметь значение в диапазоне 1-16 и обозначает приоритет данной операции записи. Если запись производится без указания приоритета, будет установлено значение по умолчанию 16 (низший приоритет).


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

Продолжение следует.

Источник: Журнал "Алгоритм безопасности", №4, 2012

Архив публикаций