С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-ПП и Arduino. Соединяем Болид и ардуино по протоколу Modbus RTU. Часть 1. Теоретическая.

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

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

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

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

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

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

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

Добавить комментарий

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