Относительно недавно компания Болид выпустила продукт под названием Преобразователь протокола «С2000-ПП», который, в частности, предназначен для преобразования Болидовского протокола Орион в протокол ModBus RTU. Я купил себе такую коробочку и решил попробовать подключить Болид к Ардуино. Зачем? Не знаю. Возможно разработаю SCADA-систему на базе ардуинки.
Я не буду копировать ТТХ и принцип работы преобразователя протокола — это все вы сможете прочитать сами в мануале. Перейдем сразу к практике.
В этой части мы подключим С2000-ПП к компьютеру используя две разных программы, а так же кратко разберемся как формируются пакеты для запросов от ардуинки к С2000-ПП и что мы получаем в ответ. Преобразователь я проверял как в режиме Орион-Slave, так и в режиме Орион-Master.
Подключаться мы будем через преобразователь интерфейса RS485 — RS232 C2000-USB двумя способами: через программу предоставляемую Болидом, а так же с помощью программы для работы с com-портом «AccessPort». Вообще для работы с com-портом, как и для работы напрямую по протоколу Modbus RTU, существует великое множество программ, однако нам нужно максимально приблизится к ардуино. Данная программа предоставляет возможность без заморочек передавать и принимать в ответ данные в двоичном виде в HEX формате, что очень удобно. Скачать программу вы можете внизу страницы.
Итак, приступим. Для начала, на сайте Болида нужно скачать и установить последнюю версию программы Uprog, а так же программу Панель управления «С2000-ПП». Соберем схему для первичной настройки С2000-ПП.
Здесь и далее, в качестве источника питания не обязательно использовать РИП-12, подойдет любой источник напряжением 12В и током 0,3А.
Далее запускаем Uprog и находим наш преобразователь протокола по адресу 127, если он был из коробки.
Считываем конфигурацию.
На вкладке «Прибор» мы устанавливаем параметры соединения по интерфейсу RS485. Скорость я оставил 9600 бод, без контроля четности, 1 стоповый бит (8-N-1). Тип интерфейса — Modbus RS-485. В поле адрес мы указываем адрес слейва Modbus (т.е. адрес устройства на шине Modbus), в примере — 3. Максимальное значение адреса устройства С2000-ПП на шине — 247. Возможно ли такое количество устройств на шине одновременно — Болид не уточняет).
Далее — изменим адрес по-умолчанию на интерфейсе Орион, сделаем его так-же 3.
Остальные вкладки конфигурации мы пока рассматривать не будем. Отложим все это на потом. Настройка для наших нужд закончена, заливаем конфигурацию.
После этого отключаем С2000-USB от С2000-ПП и собираем схему для работы по протоколу Modbus RTU.
После этого запускаем программу Панель управления «С2000-ПП» и осуществляем настройку подключения.
Нажимаем кнопку COM — порт, указываем параметры соединения согласно тем, что мы настроили через Uprog и выбираем из списка com-порт к которому подключен C2000-USB. Нажимаем кнопку «подключиться».
Обратите внимание на тип прибора — 36 и версию 131 (1.31) это нам понадобится в дальнейшем. Теперь для контроля обмена информацией на шине нажимаем на кнопку с изображением осциллограммы.
Здесь мы видим что обмен ведется. Программа посылает запросы, а преобразователь ей отвечает. Т.к. мы в будущем хотим подключиться к С2000-ПП с помощью ардуино и выполнять какие-то действия нам нужно для начала реализовать данный обмен с помощью программы AccessPort, а для этого нам нужно понять как строится запрос и что мы должны получить в ответ от С2000-ПП.
Давайте разбираться. Болид любезно сообщает нам что пакет Modbus имеет следующую структуру:
Давайте посмотрим из чего состоит пакет:
- 1й байт — адрес устройства на шине Modbus, к которому мы будем обращаться. В нашем примере это 3 или 0x03 в HEX формате;
- 2й байт — функция с которой мы обращаемся к устройству. Согласно описанию С2000-ПП поддерживает следующие функции протокола Modbus RTU:
- 1 (0x01) Чтение значений из нескольких регистров флагов (Read Coil Status)
- 3 (0x03) Чтение значений из нескольких регистров хранения (Read Holding Registers)
- 5 (0x05) Запись значения одного флага (Force Single Coil)
- 6 (0x06) Запись значения в один регистр хранения (Preset Single Register)
- 15 (0x0F) Запись значений в несколько регистров флагов (Force Multiple Coils)
- 16 (0x10) Запись значений в несколько регистров хранения (Preset Multiple Registers)
- с 3го по 254 байт (максимум) идет тело запроса или ответа;
- Последние 2 байта это контрольная сумма всего сообщения в формате CRC16 Modbus.
Обратите внимание что сначала записывается младший байт контрольной суммы, а затем старший!
Теперь, обладая данной информацией, давайте составим свой запрос для определения типа и версии прибора С2000-ПП.
Для этого воспользуемся шаблоном который мы найдем в описании к устройству:
Из запроса нам видно что данная информация хранится в 2х регистрах, адрес первого из которых — 46152. Нам нужно перевести данное число из десятеричной системы счисления в шестнадцатиричную. Это можно сделать любым известным вам способом или с помощью калькулятора в винде, выбрав вид калькулятора — «программист» 🙂
Итак, наш заброс без контрольной суммы будет выглядеть так:
0x03 (адрес прибора на шине), 0x03 (функция), 0xB4 0x48 (адрес регистра), 0x00 0x02 (количество регистров для чтения). Теперь нам осталось посчитать контрольную сумму. Алгоритм и функцию для расчета CRC16 Modbus мы рассмотрим в следующей части, а пока воспользуемся онлайн-калькулятором
В поле вставим наш запрос 03 03 B4 48 00 02, input type и output type установим в положение HEX и нажмем кнопку «Calc CRC-16». Пролистав список алгоритмов вниз, найдем наш CRC-16/Modbus
Получив контрольную сумму запишем запрос полностью (помня о том как записывается контрольная сумма!):
03 03 B4 48 00 02 62 0F
Следующим шагом запустим AccessPort, отправим запрос и проанализируем полученный результат.
Итак, запускаем и открываем настройки Tools->Configuration.
В настройках com-порта выбираем порт к которому подключен C2000-USB, настройки выставляем те же 9600 8N1. Send display и Receive display устанавливаем в HEX. Нажимаем OK. Кнопкой включаем com-порт, в нижнее поле записываем побайтно в HEX формате наш запрос и нажимаем кнопку SEND.
В случае, если все сделано правильно, мы должны получить ответ в HEX формате от С2000-ПП в верхнем поле.
Мы получили ответ 03 03 04 00 24 00 83 D8 59 . Последние 2 байта — контрольная сумма, которую вы можете сами проверить.
Что-же нам прислали? Давайте еще раз посмотрим на структуру запроса версии прибора С2000-ПП:
- 1й байт 0x03 — адрес ответившего прибора;
- 2й байт 0x03 — код функции, которая была выполнена. Если бы запрос выполнился с ошибкой / не выполнился, то код функции вернулся бы с установленным с старшим битом 0x83;
- 3й байт 0x04 — говорит нам о том что ответ состоит из последующих 4х байт;
- 4й и 5й байты 0x00 0x24 — тип прибора в HEX формате;
- 6й и 7й байты 0x00 0x83 — версия прибора в HEX формате;
- 8й и 9й байты 0xD8 0x59 — контрольная сумма.
Теперь если мы переведем 00 24 и 00 83 из шестнадцатиричной системы в десятеричную, мы получим соответственно: тип прибора 36, версия прибора — 131.
Вот мы и закончили подготовительный этап для работы С2000-ПП компании Болид с ардуино. В следующей части мы подключим С2000-ПП к ардуино через конвертирующий модуль на базе чипа MAX485 , рассмотрим алгоритм расчета контрольной суммы CRC16 и выполним тот же запрос с помощью ардуино.
Перейти ко второй части>>С2000-ПП и Arduino. Соединяем Болид и ардуино по протоколу Modbus RTU. Часть 2. Программа для работы с с com-портом, позволяет легко отправлять и получать данные по интерфейсу RS232 в двоичном виде.
Скачать и протестировать мои программы для подключения С2000-ПП к Raspberry Pi вы можете по ссылке : Приложения и утилиты для подключения С2000-ПП к Raspberry, Orange и т.д. с архитектурой ARM 32-bit с операционными системами семейства Unix (Linux).

Спасибо за работу. Интересная тема, а вот пожарные извещатели Болида работают по modbus-rtu ? их можно присоединить к Ардуино, булет легче чем 4хпроводные аналоговые извещатели.
Присматриваюсь пока. Дома реализую на Node-Red хаб из Modbus-RTU в MQTT и обратно.
Пожалуйста! В ближайшее время выйдет вторая часть. Про пожарные извещатели Болида, работающие по Modbus ничего не слышал. Логика работы такая: извещатель->прибор->C2000-ПП в режиме мастер->Ардуино.
Благодарю. Как раз заинтересовался темой С2000ПП. Эта статья очень помогла!
Владимир, рад помочь. Благодарю за внимание.
мы старались сделать программу Панель управления ПП понятной и доступной)
да, С2000-ПП выпускается около 10-и лет , и родилась она только год назад.
для малых систем опрос по шлейфам достаточно быстр, но для бОльших систем быстрее опрашивать получая события, протокол внутри Болида больше событийный.