С2000-ПП и Arduino. Соединяем Болид и ардуино по протоколу Modbus RTU. Часть 1. Теоретическая.

Относительно недавно компания Болид выпустила продукт под названием Преобразователь протокола «С2000-ПП», который, в частности, предназначен для преобразования Болидовского протокола Орион в протокол ModBus RTU. Я купил себе такую коробочку и решил попробовать подключить Болид к Ардуино. Зачем? Не знаю. Возможно разработаю SCADA-систему на базе ардуинки.
Я не буду копировать ТТХ и принцип работы преобразователя протокола — это все вы сможете прочитать сами в мануале. Перейдем сразу к практике.


В этой части мы подключим С2000-ПП к компьютеру используя две разных программы, а так же кратко разберемся как формируются пакеты для запросов от ардуинки к С2000-ПП и что мы получаем в ответ. Преобразователь я проверял как в режиме Орион-Slave, так и в режиме Орион-Master.

Подключаться мы будем через преобразователь интерфейса RS485 — RS232 C2000-USB двумя способами: через программу предоставляемую Болидом, а так же с помощью программы для работы с com-портом «AccessPort». Вообще для работы с com-портом, как и для работы напрямую по протоколу Modbus RTU, существует великое множество программ, однако нам нужно максимально приблизится к ардуино. Данная программа предоставляет возможность без заморочек передавать и принимать в ответ данные в двоичном виде в HEX формате, что очень удобно. Скачать программу вы можете внизу страницы.

Итак, приступим. Для начала, на сайте Болида нужно скачать и установить последнюю версию программы Uprog, а так же программу Панель управления «С2000-ПП». Соберем схему для первичной настройки С2000-ПП.

Схема подключения С2000-ПП через С2000-USB к ПК
Схема подключения С2000-ПП через С2000-USB к ПК

Здесь и далее, в качестве источника питания не обязательно использовать РИП-12, подойдет любой источник напряжением 12В и током 0,3А.

Далее запускаем Uprog и находим наш преобразователь протокола по адресу 127, если он был из коробки.

Находим С2000-ПП с помощью Uprog
Находим С2000-ПП с помощью Uprog

Считываем конфигурацию.
Конфигурация С2000-ПП
Конфигурация С2000-ПП

На вкладке «Прибор» мы устанавливаем параметры соединения по интерфейсу RS485. Скорость я оставил 9600 бод, без контроля четности, 1 стоповый бит (8-N-1). Тип интерфейса — Modbus RS-485. В поле адрес мы указываем адрес слейва Modbus (т.е. адрес устройства на шине Modbus), в примере — 3. Максимальное значение адреса устройства С2000-ПП на шине — 247. Возможно ли такое количество устройств на шине одновременно — Болид не уточняет).

Далее — изменим адрес по-умолчанию на интерфейсе Орион, сделаем его так-же 3.

Смена адреса С2000-ПП на интерфейсе Орион
Смена адреса С2000-ПП на интерфейсе Орион

Установка адреса С2000-ПП на интерфейсе Орион
Установка адреса С2000-ПП на интерфейсе Орион

Остальные вкладки конфигурации мы пока рассматривать не будем. Отложим все это на потом. Настройка для наших нужд закончена, заливаем конфигурацию.
После этого отключаем С2000-USB от С2000-ПП и собираем схему для работы по протоколу Modbus RTU.
Схема для работы по протоколу Modbus RTU
Схема для работы по протоколу Modbus RTU

После этого запускаем программу Панель управления «С2000-ПП» и осуществляем настройку подключения.

Настройка подключения в программе Панель управления "С2000-ПП"
Настройка подключения в программе Панель управления «С2000-ПП»

Нажимаем кнопку COM — порт, указываем параметры соединения согласно тем, что мы настроили через Uprog и выбираем из списка com-порт к которому подключен C2000-USB. Нажимаем кнопку «подключиться».
Окно программы Панель управления С2000-ПП в случае успешного подключения
Окно программы Панель управления С2000-ПП в случае успешного подключения

Обратите внимание на тип прибора — 36 и версию 131 (1.31) это нам понадобится в дальнейшем. Теперь для контроля обмена информацией на шине нажимаем на кнопку с изображением осциллограммы.
Окно наблюдение за линией
Окно наблюдение за линией

Здесь мы видим что обмен ведется. Программа посылает запросы, а преобразователь ей отвечает. Т.к. мы в будущем хотим подключиться к С2000-ПП с помощью ардуино и выполнять какие-то действия нам нужно для начала реализовать данный обмен с помощью программы AccessPort, а для этого нам нужно понять как строится запрос и что мы должны получить в ответ от С2000-ПП.
Давайте разбираться. Болид любезно сообщает нам что пакет Modbus имеет следующую структуру:
Структура пакета Modbus
Структура пакета 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-ПП.
Для этого воспользуемся шаблоном который мы найдем в описании к устройству:

Структура запроса версии прибора С2000-ПП
Структура запроса версии прибора С2000-ПП

Из запроса нам видно что данная информация хранится в 2х регистрах, адрес первого из которых — 46152. Нам нужно перевести данное число из десятеричной системы счисления в шестнадцатиричную. Это можно сделать любым известным вам способом или с помощью калькулятора в винде, выбрав вид калькулятора — «программист» 🙂

Итак, наш заброс без контрольной суммы будет выглядеть так:
0x03 (адрес прибора на шине), 0x03 (функция), 0xB4 0x48 (адрес регистра), 0x00 0x02 (количество регистров для чтения). Теперь нам осталось посчитать контрольную сумму. Алгоритм и функцию для расчета CRC16 Modbus мы рассмотрим в следующей части, а пока воспользуемся онлайн-калькулятором Online CRC Calculator

Получение CRC16 Modbus с помощью онлайн калькулятора
Получение CRC16 Modbus с помощью онлайн калькулятора

В поле вставим наш запрос 03 03 B4 48 00 02, input type и output type установим в положение HEX и нажмем кнопку «Calc CRC-16». Пролистав список алгоритмов вниз, найдем наш CRC-16/Modbus
Получение CRC16 Modbus с помощью онлайн калькулятора
Получение CRC16 Modbus с помощью онлайн калькулятора

Получив контрольную сумму запишем запрос полностью (помня о том как записывается контрольная сумма!):
03 03 B4 48 00 02 62 0F
Следующим шагом запустим AccessPort, отправим запрос и проанализируем полученный результат.
Итак, запускаем и открываем настройки Tools->Configuration.
Настройка программы AccessPort
Настройка программы AccessPort

В настройках com-порта выбираем порт к которому подключен C2000-USB, настройки выставляем те же 9600 8N1. Send display и Receive display устанавливаем в HEX. Нажимаем OK. Кнопкой включаем com-порт, в нижнее поле записываем побайтно в HEX формате наш запрос и нажимаем кнопку SEND.
Отправка данных в com-порт через программу AccessPort
Отправка данных в com-порт через программу AccessPort

В случае, если все сделано правильно, мы должны получить ответ в HEX формате от С2000-ПП в верхнем поле.
Получение данных из com-порта через программу AcceessPort
Получение данных из com-порта через программу AcceessPort

Мы получили ответ 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-портом AccessPort

Программа для работы с с com-портом, позволяет легко отправлять и получать данные по интерфейсу RS232 в двоичном виде.

Size: 468 kB

Скачать и протестировать мои программы для подключения С2000-ПП к Raspberry Pi вы можете по ссылке : Приложения и утилиты для подключения С2000-ПП к Raspberry, Orange и т.д. с архитектурой ARM 32-bit с операционными системами семейства Unix (Linux).

Нужен ли видеоурок по теме: С2000-ПП и Arduino. Соединяем Болид и ардуино по протоколу Modbus RTU. Часть 1. Теоретическая.

Просмотреть результаты

Загрузка ... Загрузка ...

Оцените пожалуйста статью:

ПечальноТак себеНе плохоХорошоОтличная статья! 1 оценок.
Загрузка...

5 Replies to “С2000-ПП и Arduino. Соединяем Болид и ардуино по протоколу Modbus RTU. Часть 1. Теоретическая.

  1. Спасибо за работу. Интересная тема, а вот пожарные извещатели Болида работают по modbus-rtu ? их можно присоединить к Ардуино, булет легче чем 4хпроводные аналоговые извещатели.
    Присматриваюсь пока. Дома реализую на Node-Red хаб из Modbus-RTU в MQTT и обратно.

    1. Пожалуйста! В ближайшее время выйдет вторая часть. Про пожарные извещатели Болида, работающие по Modbus ничего не слышал. Логика работы такая: извещатель->прибор->C2000-ПП в режиме мастер->Ардуино.

  2. Благодарю. Как раз заинтересовался темой С2000ПП. Эта статья очень помогла!

  3. мы старались сделать программу Панель управления ПП понятной и доступной)
    да, С2000-ПП выпускается около 10-и лет , и родилась она только год назад.

    для малых систем опрос по шлейфам достаточно быстр, но для бОльших систем быстрее опрашивать получая события, протокол внутри Болида больше событийный.

Добавить комментарий для Владимир Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *