НовостиСИГМА-группа компанийНаукаПроизводствоСтатьи и публикацииСертификатыЛицензииНаградыОтзывыКонтактыЦентральный офисСеверо-ЗападВакансииЛоготипы
| |
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 несложно организовать конфигурирование и администрирование оборудования, обновление состояний объектов, а также обмен данными между различным оборудованием и подсистемами.
-
Продолжение следует.
Архив публикаций