This article needs additional citations for verification. (May 2017) |
Очень простой протокол управления ( VSCP ) [1] — это бесплатный протокол автоматизации, подходящий для всех видов задач автоматизации, где основное внимание уделяется автоматизации зданий или домов .
Его главное преимущество в том, что каждый VSCP-узел может работать полностью автономно, являясь частью распределенной сети других узлов.
VSCP не зависит от физического уровня (например, шины CAN , Ethernet , RS-485 , RS-232 , MiWi ), соединяющего отдельные узлы для формирования сетевой шины автоматизации. На шине могут быть узлы считывания показаний переключателей, управления освещением , жалюзи , окнами или информационными дисплеями, трансляции физических измерений (например, температуры , освещенности , энергопотребления и т. д.), управления мультимедиа , охранной или пожарной сигнализацией и т. д.
Существует подмножество протокола (уровень I), которое очень сильно адаптировано к шине CAN и микроконтроллерам с ограниченными ресурсами . Протокол уровня II разработан для Ethernet (UDP, TCP и собственный Ethernet-тип Raw-Ethernet ) и беспроводных физических уровней. Все они используют одни и те же общие поля сообщений и структуру и могут быть подключены через шлюзы.
VSCP основан на событиях . Каждый раз, когда происходит событие , оно транслируется всем остальным узлам. Каждый узел в сети получит событие и решит, нужно ли обрабатывать это событие или нет.
Пример, приведенный на схеме, описывает нажатие кнопки. Это приведет к тому, что узел 1 отправит сообщение о событии на шину, информируя все остальные о нажатии кнопки. Узел 2 получает сообщение, но решает, что эта кнопка не должна вызывать событие для узла 2. Узел 3 получает сообщение и решает, что эта кнопка должна вызвать включение лампы 2.
События могут быть для всех видов происходящих вещей: событие может быть нажатием кнопки, срабатыванием датчика присутствия или заходом солнца. События также могут отправляться периодически, например, показания температуры каждую минуту. VSCP предопределяет множество событий, которые могут происходить. Эти события определяются в классы и типы. Следует ли обрабатывать полученное событие, определяется матрицей решений или DM вкратце. Также DM объясняется далее.
События организованы в классы . Класс представляет собой набор событий, которые каким-то образом связаны друг с другом. Существуют классы для ALARM , MEASUREMENTS , CONTROL , INFORMATION и т. д. В настоящее время VSCP определяет около 25 классов, но есть место для гораздо большего количества 1. Каждый класс, в свою очередь, подразделяется на типы . Тип далее определяет событие внутри класса. Например, события класса 20 (0x14) являются событиями INFORMATION . В этом классе есть подтип 1 (0x01) BUTTON, сигнализирующий о нажатии кнопки. В этом же классе INFORMATION есть также типы для сигнализации ON , OFF , BELOW LIMIT и т. д. Аналогично в классе Measurements есть типы для сигнализации температуры, тока, напряжения и т. д. Определение всех этих классов и типов заставляет узлы говорить на одном языке. Полный список предопределенных классов и типов можно найти в вики VSCP.
События, которые передаются, содержат ряд полей, вместе образующих одну датаграмму VSCP. То, как именно эти поля отображаются на физическом уровне, указано для ряда протоколов физического уровня, таких как CAN, Ethernet, TCP и т. д. Для других это еще не определено, но в целом несложно отобразить эти поля на протокол физического уровня. Существует 2 уровня протокола VSCP, называемые LEVEL I и LEVEL II . Они оба в основном являются одним и тем же протоколом, но различаются размером различных полей.
Уровень I предназначен для работы на узлах с более ограниченными ресурсами, а поля определяются немного более консервативно. Уровень I на самом деле является подмножеством уровня II, и при наличии соответствующего шлюза события могут пересекаться между сетями уровней I и II.
Приоритет | Жестко закодированный идентификатор | СОРТ | ТИП | SenderNickID | РазмерДанные | Полезная нагрузка | КПР |
---|---|---|---|---|---|---|---|
3 бита | 1 бит | 9 бит | 8 бит | 8 бит | 4 бита | от 0 до 8 байт | 16 бит |
Уровень II предназначен для работы на узлах, которые имеют небольшие ограничения по ресурсам и могут легко справляться с сообщениями большего размера.
Приоритет | Жестко закодированный идентификатор | СОРТ | ТИП | SenderGUID | РазмерДанные | Полезная нагрузка | КПР |
---|---|---|---|---|---|---|---|
3 бита | 1 бит | 16 бит | 16 бит | 128 бит | 16 бит | от 0 до 487 байт | 16 бит |
Когда узел получает события, он должен определить, нужно ли ему выполнять задачу на основе этого события. Это делается путем оценки матрицы решений или сокращенно DM. Матрица DM состоит из ряда условий IF ... THEN .... Каждое такое условие IF/THEN называется строкой , а несколько строк составляют матрицу решений.
Класс и тип входящего сообщения всегда оцениваются строкой DM. Оценка класса и типа выполняется путем пропускания класса/типа сначала через маску, а затем сравнения с фильтром. Этот метод позволяет нескольким классам/типам вызывать допустимое условие для 1 строки DM. Другие условия для строки DM (SenderGUID, Zone, Subzone) оцениваются опционально. Если строка DM допустима, то выполняется ДЕЙСТВИЕ . Вместе с ДЕЙСТВИЕМ есть параметры ДЕЙСТВИЯ . Пример ДЕЙСТВИЯ: включение реле 6 , где 6 является параметром действия . Какие именно ДЕЙСТВИЯ возможны для принимающего узла, определяется конструкцией самого узла. Разработчик прошивки должен определить, какие действия могут быть выполнены. После этого документирование возможного действия в файле MDF (см. ниже) ПО конфигурации будет знать, как выбрать это действие. DM можно изменить, установив соответствующие регистры конфигурации узла. Удобный способ сделать это — использовать ПО конфигурации VSCPWorks.
Отправляемое событие также может нести полезную нагрузку данных. Содержание и организация этой полезной нагрузки зависят от класса и типа события. Например, событие класса 10 (измерение) и типа 6 (температура) будет нести данные о температуре (с кодировкой, определяемой байтом 0, градусами или градусами Цельсия) в своей полезной нагрузке. Событие кнопки будет нести информацию о кнопке и зоне/подзоне кнопки в своей полезной нагрузке данных. Для каждого класса/типа форматирование данных определяется в спецификации, подробности см. в вики.
Некоторые (довольно некоторые) события содержат зону поля и подзону поля в своих данных. Эта функциональность присутствует для того, чтобы сделать возможной группировку узлов. Например, мы могли бы определить, что все кнопки, управляющие определенной лампой, являются частью одной группы. Это упрощает DM для определенных сценариев. Вместо того, чтобы иметь одну линию DM в качестве узла лампы для каждой кнопки (1 линия на кнопку: IF button x then turn-on lamp), мы могли бы иметь 1 линию DM, говорящую только IF (zone match) THEN turn-on lamp . Включение нескольких узловых переключателей в группу выполняется путем настройки узлов, прошивка узла будет поддерживать эту функциональность.
Узел должен быть настроен соответствующим образом, прежде чем он выполнит свою функцию. Каждый узел VSCP предоставляет свой собственный набор регистров конфигурации, адаптированных для его функции. Узел кнопки будет иметь некоторую возможность настраивать зону/подзоны, к которым принадлежат кнопки. Узел температуры будет иметь некоторую возможность устанавливать значения триггера. Также настройка DM является частью настройки узла.
Настройка узла выполняется путем записи в регистры . Каждый узел (уровня I) обеспечивает доступ к 256 регистрам. Верхние 128 регистров зарезервированы для основных функций VSCP. В этих 128 регистрах мы находим такие элементы, как GUID узла, псевдоним, MDF и регистр подкачки. Нижние 128 регистров свободны для использования в конкретных приложениях. Если 128 регистров недостаточно, то есть возможность 16-битной подкачки. Это позволяет использовать 65536 x 128 8-битных регистров для использования приложениями. Запись/чтение этих регистров выполняется с использованием событий CLASS 0. События класса 0 — это сообщения функциональности протокола VSCP, предназначенные для настройки и управления узлами.
Отслеживание того, какой регистр служит какой цели, может быть сложной задачей, особенно для регистров, специфичных для приложения. Но здесь в игру вступает файл описания модуля или MDF. Файл MDF — это машиночитаемый XML-файл, описывающий функцию каждого регистра модуля, предоставляющий параметры конфигурации для этого регистра и т. д. Этот файл используется конфигурационным программным обеспечением (VSCPWorks) для отображения параметров конфигурации, специфичных для адресуемого модуля. Файл MDF может храниться на самом узле и извлекаться оттуда VSCPWorks, но чаще всего файл MDF будет XML-файлом, размещенным где-то на веб-сервере. Затем узлу просто нужно сообщить VSCPWorks, где (URL) можно найти XML-файл. Этот URL присутствует в зарезервированных регистрах VSCP 0xE0-0xFF.
VSCPworks — это инструмент на базе ПК (Linux и Windows) для настройки и управления узлами. VSCPWorks позволяет считывать/настраивать регистры, представляя эти регистры в удобном для восприятия формате путем автоматического анализа файла MDF. VSCPWorks также предоставляет мастера для настройки матрицы решений.
Если VSCP — это протокол, VSCP & Friends используется для обозначения программного API, схемы и уровня абстракции, построенных вокруг VSCP. VSCP & Friends допускает многоуровневые абстракции устаревших устройств с помощью драйверов, которые делают их похожими на устройства VSCP. Это означает, что любое устройство можно контролировать и отслеживать с помощью фреймворка VSCP & Friends. VSCP & Friends решает четыре общие проблемы IoT и M2M