Вопрос или проблема
У меня есть встроенный компьютер на базе ARM, который для обсуждения можно считать Raspberry Pi. Мне нужно реализовать сервер BACnet для связи с системой управления зданием (BMS), и мне нужна возможность реализовать MS/TP (Modbus через BACnet). Этот компьютер имеет встроенный Modbus. Я посмотрел различные пакеты. Bacpypes3 казался многообещающим, но не поддерживает MS/TP. Я посмотрел репозитории и не нашел много интересного. Кажется, есть много устаревших проектов, которым по 20 лет, но не так много текущей поддержки. BACnet и BMS все еще используются, и судя по тому, что я нашел в шлюзах, все они используют Linux, но сделали свое программное обеспечение проприетарным.
Я ищу программное обеспечение, которое сможет справиться с этой задачей, или API, а также… возможно, туториал по настройке сервера BACnet на Ubuntu.
Хотя я не большой поклонник проприетарного программного обеспечения, я готов платить, если это значит, что мой проект сможет заработать в ближайшем будущем.
Ответ или решение
Для реализации сервера BACnet на Ubuntu для вашего встраиваемого ARM-компьютера (аналог Raspberry Pi) необходимо рассмотреть несколько ключевых аспектов, включая совместимость с MS/TP (Modbus Serial Protocol over BACnet) и доступность актуальных библиотек.
1. Выбор программного обеспечения
Хотя BACpypes3 является многообещающим решением, оно действительно не поддерживает MS/TP. Вместо этого я рекомендую рассмотреть следующие варианты:
a. BACnet4J
BACnet4J – это Java-ориентированная библиотека, которая поддерживает различные протоколы BACnet, включая MS/TP. Вы можете использовать Java на Ubuntu для запуска BACnet4J. Однако, вам потребуется некоторое время для настройки Java-среды, если она еще не установлена.
b. BACnet Stack
Это одна из самых активных библиотек, поддерживающих BACnet. Она написана на C и поддерживает работу в средах Linux. В рамках этой библиотеки есть реализация для MS/TP. Для использования BACnet Stack потребуется установить компилятор GCC и соответствующие зависимости.
Линк на проект: BACnet Stack GitHub
2. Установка BACnet Stack на Ubuntu
Для установки BACnet Stack выполните следующие шаги в терминале:
-
Установка зависимостей:
sudo apt update sudo apt install build-essential git
-
Клонирование репозитория:
git clone https://github.com/i2t/bacnet-stack.git cd bacnet-stack
-
Сборка и установка:
make sudo make install
-
Настройка сети для работы с MS/TP:
Обязательно настройте параметры сети в соответствии с вашими требованиями к BMS (например, ssid, ip, порт).
3. Пример кода для BACnet сервера
Вот упрощенный пример кода для создания BACnet сервера на C с использованием BACnet Stack:
#include "bacnet.h"
int main() {
bacnet_init();
bacnet_start(0); // Запустите сервер на интерфейсе 0 для MS/TP
while (1) {
bacnet_poll();
// Обработка ваших запросов
}
bacnet_cleanup();
return 0;
}
4. Получение данных из Modbus
Если у вас уже есть интегрированный интерфейс Modbus на вашем компьютере, вы можете использовать библиотеки, такие как libmodbus, для работы с Modbus и интегрировать их с BACnet Stack.
5. Дополнительная информация и ресурсы
Если вы ищете документацию и учебные материалы, вот несколько полезных ресурсов:
- Официальная документация BACnet Stack (включая примеры)
- Форумы и обсуждения на GitHub, где можно задать вопросы и получить советы от других разработчиков.
- Вы можете также посетить сайти, такие как Stack Overflow, для решения конкретных проблем.
Заключение
Несмотря на то, что пробелы в доступных библиотеках могут вызывать сложности, описанные вами шаги помогут вам успешно реализовать BACnet сервер на Ubuntu с поддержкой MS/TP. Обязательно экспериментируйте с примерами кода и конфигурацией, а также не стесняйтесь обращаться за помощью в сообщества разработчиков. Если у вас есть необходимость в поддержке или более комплексных решениях, вы можете рассмотреть возможность сотрудничества с компаниями, специализирующимися на BACnet.