Modbus master tool инструкция на русском

Время на прочтение
10 мин

Количество просмотров 223K

image

Протокол Modbus довольно распространен как в промышленных системах автоматизации, так и сетях систем типа «Умный дом», автоматизации малых объектов (теплицы и т.п.) и стыковки различного оборудования с домашним компьютером. Появление таких проектов как Arduino и Raspberry Pi значительно повысило интерес к задачам, связанным с робототехникой, автоматикой и автоматизацией. Все это обеспечивает рост популярности Modbus среди любителей и профессионалов. В статье рассмотрен вопрос тестирования и наладки, как отдельных устройств, так и сетей на базе протокола Modbus с позиции требований к программному обеспечению для решения таких задач и обзора существующих инструментов.

Если вы знакомы с архитектурой протокола, то можете смело пролистать пару следующих абзацев и перейти к дальнейшему описанию. Если же нет, то специально для вас ниже приведено небольшое введение в Modbus.

Modbus, краткое введение

Modbus является довольно распространённым протоколом в системах автоматизации на среднем и нижнем (полевом) уровнях. Средний — это уровень контроллеров — устройств, осуществляющих сбор данных и управление технологическим процессом. Нижний или полевой — это уровень взаимодействия датчиков и контроллеров или датчиков напрямую с сервером. Более подробно об уровнях в системах автоматизации можно посмотреть здесь.

Как правило, структура типовой системы автоматизации, использующей в качестве базового протокола Modbus, выглядит так как показано на рисунке в начале статьи. В качестве ”среды” для протокола Modbus может выступать либо RS-485/422/232 (подробно про RS-485 можно прочитать здесь и здесь), поверх него работает Modbus RTU или Modbus ASCII, либо транспортный протокол TCP в TCP/IP сетях, такая версия носит название Modbus TCP. В данной статье будет рассмотрен Modbus RTU.

Протокол Modbus предполагает наличие одного ведущего устройства в сети (оно называется Master или Client) и от 1 до 247 ведомых (они называются Slave или Server). Полное описание можно найти на официальном сайте или в вики.

Master периодически взаимодействует со Slave-устройствами, считывая или записывая в них какую-либо информацию. Этот процесс осуществляется в форме запрос-ответ. Запрос представляет собой последовательность байт, называемую кадром, в котором время между байтами стандартизировано и зависит от скорости передачи данных (напомним, что речь идет о Modbus RTU) и составляет не более длительности интервала, в течение которого может быть передано 1,5 байта данных. Время между кадрами должно быть не меньше времени передачи 3,5 байт.

Формат запроса имеет следующий вид:

image

ID — адрес устройства (1 байт),
FN — Modbus функция (1 байт),
[args] — аргументы функции (N байт, зависит от функции),
CRC — контрольная сумма CRC-16 (2 байта).

Ответ имеет схожий формат:

image

Почти все поля ответного кадра аналогичны кадру запроса, за исключением поля DATA, оно имеет различное наполнение, в зависимости от функции.

Если устройством не поддерживается запрашиваемая функция или аргументы в поле [args] запроса являются некорректными для данного Slave-устройства, то в ответе, в поле FN старший бит будет выставлен в 1 (т.е. на FN наложится маска 0x80), а в поле DATA будет помещена дополнительная информация об ошибке.

Каждое Slave-устройство может иметь определенные области данных и содержать дополнительную специфическую информацию.
Возможные области данных представлены в таблице ниже:

Поле Доступ Размер Описание
Discrete Inputs Только чтение Один бит Данные от системы ввода/вывода
Coils Чтение/Запись Один бит Ячейки могут использоваться по своему усмотрению
Input registers Только чтение 16 бит Данные от системы ввода/вывода
Holding registers Чтение/Запись 16 бит Регистры могут использоваться по своему усмотрению

За более подробной информацией следует обратиться к полному описанию Modbus RTU, доступному в виде спецификации.

Тестирование устройств с поддержкой Modbus RTU в рамках процесса разработки

Как при разработке, так и при наладке устройств с поддержкой протокола Modbus RTU, вам необходимо иметь специализированное программное обеспечение и технические средства. Из технических средств наиболее простой вариант — это преобразователь RS-485/USB, из всех устройств такого типа, по нашему мнению, наилучшим выбором является MOXA UPORT 1130/UPORT 1150, цена вопроса которого составит 5000 — 6000 руб. Существуют различные отечественные решения, например, преобразователи фирмы Fractal или ОВЕН. Конструкция этих устройств достаточно проста, и при определенной сноровке такой преобразователь можно собрать самостоятельно. Более сложными являются решения типа Ethernet/RS-485 (например, NPORT от MOXA).

При разработке устройств с поддержкой Modbus RTU, чаще всего требуется реализовать функцию Slave, так как в основном это различные датчики, управляемые реле, модули ввода/вывода и т.п., Master-устройства создаются реже. В сетях автоматизации в качестве мастера, обычно выступает контроллер, а он, как правило, уже имеет реализацию Modbus-стека, либо OPC Server/SCADA система, укомплектованные Modbus-драйвером.

Вопрос разработки непосредственно Modbus-стека мы не будем рассматривать в этой статье. Единственное, стоит отметить библиотеку FreeMODBUS, на базе которой достаточно просто построить устройство с поддержкой функций Modbus Slave. Пример реализации описан в статье на Хабре.

Вторым важным моментом при разработке Modbus-устройств является тестирование. Здесь всё зависит от стадии разработки и цели тестирования.

На начальных этапах полезным инструментом является Modbus-терминал. С помощью него мы можем вручную сконструировать запрос, послать его и проанализировать ответ. Существуют терминалы в чистом виде, например, SmartTerminal, Access Port, терминалы с поддержкой Modbus RTU — Termite от S2-Team или Pic18 Terminal от Fractal (не обновлялась с 2006 года) и т.п. Последний заточен под оборудование компании Fractal, но позволяет “общаться” с любыми устройствами, у которых в настойках порта выставлена четность None, с другими вариантами он не работает.

В процессе разработки нередко возникает ситуация, когда устройство принимает запрос и отвечает на него (это можно понять либо по светодиодам приема/передачи пакетов, если вы их предусмотрели в конструкции, либо через отладчик, поставив breakpoint в нужном месте), а в терминале или какой-то другой специализированной программе, данные не отображаются. В таком случае вам пригодится сниффер для последовательного порта, желательно, с поддержкой протокола Modbus. В качестве примера можно привести Free Serial Analyzer, COM Port Toolkit. Последний в настоящее время, похоже, прекратил свое развитие.

В дальнейшем, требуется не только проверять работает ли устройство в принципе (т.е. корректно отвечает на запросы), но и определять наработку на отказ с помощью длительного тестирования. Важными аспектами здесь являются поддержка авто-опроса с изменяемой нагрузкой (количество запросов в секунду) и наличие функции логирования. С этими задачами поможет справиться Modbus Poll или Modscan, это ПО платное, но имеется пробный период.

Следует учитывать, что собранные логи нужно будет анализировать, то есть определять количество запросов, на которые устройство не ответило, обнаруживать сбои, например, самопроизвольное изменение данных в ячейках и т.п. Конечно, можно использовать полноценную SCADA-систему, либо самому разработать и написать систему анализа и визуализации логов. Как вариант, рекомендуем обратить внимание на MasterSCADA от Insat. Она имеет встроенный Modbus-драйвер и версия до 32 точек является бесплатной, довольно проста в освоении (на сайте производителя есть хорошая документация и видео уроки).

В конце данной статьи мы определим список функций “идеального” инструмента для тестирования и наладки устройств/систем на базе протокола Modbus, а также сделаем небольшой обзор существующих инструментов.

Наладка систем автоматизации, использующих Modbus устройства

Людей, занимающихся наладкой систем автоматизации и просто пытающихся “подружиться” с каким-либо устройством, на борту которого находится Modbus, в разы больше чем, тех, кто эти устройства разрабатывает. Исходя из специфики задачи, требования к соответствующему ПО будут немного отличаться.

Если необходимо соединить контроллер и одиночное Slave-устройство, то прежде всего, нужно установить с ним связь с помощью преобразователя интерфейсов RS-485/USB, ПК и специализированного программного обеспечения либо терминала. В таком случае, логика работы и набор инструментов ничем не отличается от тех, что применяются при разработке Slave-устройства на стадии тестирования. На этом этапе не требуется длительное тестирование с последующим анализом большого количества лог-файлов.

В случае, когда у вас уже есть готовая сеть устройств, можно выделить следующие задачи:

  • проверка работоспособности всех устройств в сети (опрос каждого устройства в отдельности и проверка корректности ответа);
  • нагрузочное тестирование (опрос устройств в сети в течение длительного времени). Желательно сделать несколько экспериментов с различной частотой опроса, а после провести анализ собранных данных на наличие отказов, не ответов, порчи данных и т.п.

В этом случае, понадобится либо терминал с возможностью создания списка запросов, либо специализированный инструмент типа Modbus Poll, который позволяет опрашивать несколько устройств в рамках одного проекта.

Modbus-устройства могут иметь определенные настройки интерфейса RS-485: количество бит данных, четность и количество стоп бит. Устройства с различными настройками не могут работать в одной сети с одним и тем же мастером. Тестирование и конфигурирование таких устройств удобно проводить, применяя терминальные программы, имеющие возможность быстрого переключения между предустановленными профилями настроек портов или работающие с несколькими линиями одновременно.

Реже возникает задача организации обмена данными с устройством, протокол которого отличается от стандартной спецификации Modbus RTU. Нам приходилось встречаться с ситуацией, когда протокол Slave-устройства логически повторяет Modbus (структура пакета, таймауты и т.п.), но использует функции вне стандарта. В таком случаем возможна работа с использованием Modbus Poll, он позволяет строить произвольные запросы, или терминала, обладающего сходным функционалом. Стандартная SCADA-система, обычно, в такой ситуации бессильна, и работа с подобным оборудованием осуществляется через специальный OPC сервер.

Требования к ПО для работы с Modbus-устройствами в режиме мастера

Описав различные задачи, которые возникают при разработке, настройке и наладке устройств с протоколом Modbus, составим список требований к специализированному программному обеспечению.

  1. Поддержка настроек COM-порта (номер, скорость, четность, количество бит данных и стоп бит)
  2. Настройка таймаутов (время ожидания приема ответа на запрос, время между символами и кадрами)
  3. Поддержка стандартного Modbus
  4. Поддержка нестандартного Modbus
  5. Авто-опрос одного/нескольких устройств
  6. Настройка авто-опроса
  7. Логирование сессии / настройка логирования
  8. Создание профилей для быстрого переключения между настройками порта
  9. Работа в режиме сниффер
  10. Лицензия продукта
  11. Сопровождение продукта разработчиком

Обзор ПО для работы с Modbus протоколом

Modbus Poll

Начнем с классического приложения и довольно известного в наших “узких” кругах — Modbus Poll от Witte Software.

image

Эта программа является симулятором мастера в Modbus-сети. Интерфейс Modbus Poll интуитивно понятен. Если вы представляете себе логику работы протокола, то разобраться с программой труда не составит.

Функция Наличие Комментарий
Поддержка настроек COM-порта +
Настройка таймаутов + Доступны: время ожидания ответа
Поддержка стандартного Modbus + Список функций ограничен
Поддержка нестандартного Modbus +
Авто-опрос одного / нескольких устройств + / +
Настройка авто-опроса + Доступно: время между запросами
Логирование сессии / настройка логирования + / +
Создание профилей для быстрого переключения между настройками порта
Работа в режиме сниффер
Лицензия продукта ПО платное Есть пробный период 30 дней
Сопровождение продукта +

Достоинства: хорошая система логирования, достаточное количество поддерживаемых функций (во всяком случае, наиболее востребованные присутствуют), большое количество настроек внешнего вида.

Недостатки: цена (одна лицензия $ 129.00), нестандартный Modbus поддерживается как опциональная функция, нет профилей для быстрого переключения портов — приходится каждый раз перенастраивать соединение.

Modscan32/64

Следующим ПО в нашем обзоре будет Modscan от WinTECH. Внешне эта программа очень похожа на Modbus Poll, но функционалом она обладает значительно меньшим.

image

У Modscan есть одна уникальная особенность для программ данного типа — это возможность создания форм (своего рода мнемосхем). Пока ее функционалу далеко до реальных SCADA-систем, но наличие такого бонуса радует. На сегодняшний день это достаточно скудный, по своим возможностям инструмент (имеется ввиду редактор форм), но будем надеяться, что со временем, разработчики доведут его до хорошего уровня.

Функция Наличие Комментарий
Поддержка настроек COM-порта +
Настройка таймаутов + Доступны: время ожидания ответа
Поддержка стандартного Modbus + Список функций ограничен
Поддержка нестандартного Modbus
Авто-опрос одного / нескольких устройств + / +
Настройка авто-опроса + Доступно: время между запросами
Логирование сессии / настройка логирования + / —
Создание профилей для быстрого переключения между настройками порта
Работа в режиме сниффер
Лицензия продукта ПО платное Есть пробный период
Сопровождение продукта +

Достоинства: возможность создания собственных форм для просмотра данных, поддержка MMI & OLE Automation.

Недостатки: цена (одна лицензия $ 84.95), нет поддержки нестандартного Modbus, нет профилей для быстрого переключения портов, ненастраиваемая система логирования, малое количество поддерживаемых Modbus-функций.

Termite

Следующим в нашем списке будет терминал Termite от S2-Team. Termite является специализированный Modbus терминалом. Это означает, что он сам будет считать за вас CRC, распознавать сообщения об ошибках в ответах и т.д., ваша задача заключается в том, чтобы ввести корректное тело запроса в поле команды.

image

Функция Наличие Комментарий
Поддержка настроек COM-порта +
Настройка таймаутов + Доступны: время ожидания ответа,
время между символами и кадрами
Поддержка стандартного Modbus +
Поддержка нестандартного Modbus +
Авто-опрос одного / нескольких устройств + / +
Настройка авто-опроса + Доступно: время между запросами
Логирование сессии / настройка логирования + / —
Создание профилей для быстрого переключения между настройками порта +
Работа в режиме сниффер
Лицензия продукта Есть платная и
бесплатная версии
Бесплатная версия обладает
ограниченным функционалом
(на количество каналов,
одновременно ведомых лог файлов и
количество разных запросов в авто-опросе)
Сопровождение продукта +

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

Недостатки: PRO версия платная (одна лицензия $ 10), в текущем релизе нет возможности гибко настраивать логирование.

AccessPort

Программа из разряда “чистых” терминалов. Она не поддерживает Modbus, поэтому при её использовании будьте готовы считать CRC для ваших кадров самостоятельно. Несомненным плюсом является то, что в неё встроен сниффер последовательного порта.

image

Функция Наличие Комментарий
Поддержка настроек COM-порта +
Настройка таймаутов +
Поддержка стандартного Modbus
Поддержка нестандартного Modbus
Авто-опрос одного / нескольких устройств + / —
Настройка авто-опроса + Доступно: время между запросами
Логирование сессии / настройка логирования + / —
Создание профилей для быстрого переключения между настройками порта
Работа в режиме сниффер +
Лицензия продукта ПО бесплатное
Сопровождение продукта Не поддерживается Крайняя версия продукта
была выпущена 2012-04-23

Достоинства: наличие сниффера порта, ПО бесплатное, настраиваемое представление данных, возможность передачи файлов.

Недостатки: не поддерживает Modbus вообще, нет возможность создавать профили, в режиме авто-опрос можно работать только с одним устройством, в настоящее время ПО не развивается.

В заключение хотелось бы добавить, что в сети достаточно большое количество программ для работы с последовательным портом, но если есть необходимость работать именно с Modbus протоколом, то его поддержка в таком ПО крайне желательна. Одна из основных причин — это расчет CRC, в ручную это делать накладно, также важно, чтобы программа могла уметь разделять кадры, иначе все превращается в сплошную мешанину байтов, ну и если есть авто-опрос, то это сильно упрощает жизнь.

Хочется дополнить список ПО и библиотек для работы с Modbus, тем, что было переставлено в комментариях.
SCADA
FreeSCADA
Modbus TCP/RTU
Advanced TCP/IP Data Logger
Ardsoft Эмулятор Modbus
PortMon
MODBUS FOR WINDOWS
PeakHMI
Modpoll Modbus Master Simulator
QModMaster
modbus_tk
pymodbus
libmodbus

Благодарю всех, кто помог улучшить статью!

Спасибо за внимание!

Как использовать инструменты тестирования Modbus ModbusPoll и Modbus Slave
1. Введение
Modbus Poll: имитатор главного устройства Modbus, используемый для тестирования и отладки подчиненных устройств Modbus. Программа поддерживает ModbusRTU, ASCII, TCP / IP. Используется для помощи разработчикам в тестировании ведомых устройств Modbus или для тестирования и моделирования других протоколов Modbus. Он поддерживает несколько интерфейсов документов, то есть можно одновременно отслеживать несколько подчиненных устройств / полей данных. Каждое окно просто устанавливает идентификатор подчиненного устройства, функцию, адрес, размер и интервал опроса. Вы можете читать и писать регистры и катушки из любого окна. Если вы хотите изменить один регистр, просто дважды щелкните значение. Или вы можете изменить несколько значений регистров / катушек. Предоставляет несколько форматов данных, таких как числа с плавающей запятой, двойной точности, длинное целое число (можно обмениваться последовательностями байтов).
Modbus Slave: имитатор подчиненного устройства Modbus, который может имитировать 32 подчиненных устройства / поля адреса. Каждый интерфейс обеспечивает поддержку автоматизации OLE для отчетов EXCEL. В основном используется для имитации ведомых устройств Modbus, получения пакетов команд от главной станции и отправки пакетов данных обратно. Помогите разработчикам коммуникационного оборудования Modbus смоделировать и протестировать протокол связи Modbus для моделирования, тестирования и отладки коммуникационного оборудования Modbus. В 32 окнах можно моделировать до 32 подустройств Modbus. Пользовательский интерфейс такой же, как Modbus Poll, поддерживает функции 01, 02, 03, 04, 05, 06, 15, 16, 22 и 23, отслеживая последовательные данные.
Два, использование опроса Modbus
1), установка и регистрация:
После завершения установки вы увидите ярлык ModbusPoll на рабочем столе, дважды щелкните ярлык, чтобы открыть программное обеспечение, и интерфейс после открытия будет таким, как показано на рисунке ниже.

Нажмите «Соединение» -> «Подключиться», появится окно регистрации; откройте файл readme после распаковки сжатого пакета, скопируйте серийный номер ModbusPoll 5A5742575C5D10 и вставьте его в столбец регистрации окна регистрации, как показано на рисунке ниже. Щелкните ОК, чтобы завершить регистрацию.
Введение в главное окно программы Modbus Poll 4.3.4
где: Tx = 4 означает количество кадров данных, отправленных на главную станцию, 4 раза на рисунке; ​​Error = 0 означает количество ошибок связи, 0 раз на рисунке; ​​ID = 1 означает аналоговый Адрес субустройства Modbus, адрес на рисунке 1; F = 03 означает используемый код функции Modbus, а цифра — код функции 03; SR = 1000 мс означает цикл сканирования. Красная часть указывает на текущее состояние ошибки, а «Нет соединения» указывает на неподключенное состояние.
3), настройки параметров:
Нажмите [Чтение / запись определения… F8] в меню [Настройка], чтобы установить параметры, и появится диалоговое окно настройки параметров.


Среди них: A. Slave — это адрес подчиненного устройства Modbus (подчиненного устройства), к которому необходимо получить доступ, соответствующий значению идентификатора в главном окне (главном экране), по умолчанию — 1. B. Функция — это выбор кодов функций регистра. Всего существует четыре типа, и соответствующие отношения следующие:

Код Название Регистр Адрес ПЛК Битовая операция / Словарная операция Количество операций
01 Состояние бита чтения / записи 00001-09999 бит, один или несколько
02 Чтение (ввод) бита 10001–19999 бит, один или несколько
03 Чтение / запись (сохранение) слова 40001–49999 слов, одно или несколько слов
04 Чтение (ввод) слов 30001–39999 слов, написанных одно или несколько
05 Запись одиночной катушки 00001-09999 бит одиночной
06 Запись одного регистра временного хранения 40001–49999 слово, слово, одно слово
15 Запись нескольких катушек 00001-09999 бит, кратный
16 Запись нескольких регистров хранения 40001–49999 слов, несколько слов
C. Адрес — это начальный адрес регистра, по умолчанию он начинается с 0.
D. Длина — это количество последовательных регистров, значение по умолчанию — 10, что соответствует количеству каналов программы настройки.
E. Скорость сканирования — это цикл чтения данных в миллисекундах, по умолчанию — 1000 мс.
После настройки нажмите кнопку ОК, и в окне моделирования отобразится определенный список регистров.
4), настройки отображения:
Настройка режима отображения данных:
По умолчанию режим отображения данных регистра — Подписанный (двоичный код с шестнадцатеричным знаком), а диапазон данных составляет -32768 ~ 32767. Если пользователь хочет отображать другие числовые способы, он может выбрать и установить через меню 【Display】, как показано на рисунке ниже:

Настройка формата адреса: Modbus Slave использует адрес ПЛК по умолчанию, [PLC Addresses (Base 1)] в меню [Display] выбран по умолчанию, а начальный адрес регистра по умолчанию равен 1, это Последовательный порт Modbus и драйвер пересылки данных TCP точки и конфигурационное программное обеспечение одинаковы. Если вам нужно установить начальный адрес, чтобы он начинался с 0 во время теста, вы можете выбрать [Адреса протокола (база 0)]. Как правило, достаточно адреса ПЛК по умолчанию.
Используйте кнопку «Коммуникационный трафик» на панели инструментов для отображения текущих отправленных команд и полученных данных.
5), подключение к последовательному порту:
Нажмите [Подключить … F3] в меню [Подключение], чтобы подключиться к последовательному порту, как показано ниже:

Среди них: Port3, что означает используемый последовательный порт (COM3), выбор другого последовательного порта или TCP / IP для подключения в зависимости от реальной ситуации. Режим означает режим протокола Modbus, действительный при использовании последовательного порта; при использовании TCP / IP это автоматически режим TCP. Время ожидания ответа означает время ожидания чтения.Если ведомое устройство не возвращает данные в течение времени ожидания, считается, что связь не удалась. Задержка между опросами, минимальный интервал времени для каждого сканирования, по умолчанию — 10 мс. Удаленный сервер означает сетевые настройки терминального ведомого устройства в режиме TCP / IP. IP-адрес, представляет собой IP-адрес подчиненной станции в режиме TCP / IP. Порт указывает сетевой порт подчиненной станции в режиме TCP. Пользователь может установить параметры в соответствии со своими потребностями, по умолчанию: последовательный порт 1, скорость передачи 9600, бит данных 8 бит, без бита четности, 1 стоповый бит. После подтверждения настроек нажмите кнопку ОК. Если он подключен и читается правильно, в главном окне будет отображаться информация о регистре чтения.
6), изменение значения регистра:
Дважды щелкните мышью по адресу регистра в главном окне, появится диалоговое окно изменения, как показано на рисунке ниже:

Введите значение в поле ввода «Значение» для подтверждения. Диапазон значений: -32768——32767.
Среди них: Slave — это адрес подчиненного устройства Modbus, к которому необходимо получить доступ, соответствующий значению идентификатора на главном экране, значение по умолчанию — 1. Адрес — это адрес текущего реестра. На рисунке показаны операции с регистром 40001. Использовать функцию — это используемый код функции.Вы можете выбрать код функции 06 или 16. для записи.
7), проверьте фрейм данных связи:
Щелкните [Связь …] в меню [Отображение] или нажмите кнопку [101] на панели инструментов, чтобы вызвать диалоговое окно с информацией о мониторинге фрейма данных для отправки и получения данных через последовательный порт «CommunicationTraffic» для Просматривайте и анализируйте отправленные и полученные фреймы данных. Как показано ниже:

Среди них: первые 6 битов — это порядковый номер кадра данных. Rx представляет полученный кадр данных. Tx представляет отправленный фрейм данных.
8), отключите:
Нажмите [Отключить F4], чтобы отключиться и завершить тест. В это время в главном окне отображается красный значок «Нет подключения», указывающий на отключенное состояние.
Три, использование ведомого устройства Modbus
1), установка и регистрация:
Установите программное обеспечение, после завершения установки дважды щелкните, чтобы запустить ярлык ModbusSlave.
Метод регистрации: нажмите «Соединение» -> «Подключиться», появится окно регистрации; откройте файл readme после распаковки сжатого пакета, скопируйте серийный номер ModbusPoll, вставьте его в столбец регистрации в окне регистрации, нажмите «ОК», Трещина полная. Установка и взлом ModbusSlave аналогичны ModbusPoll, поэтому я не буду повторять его здесь.
2), главное окно:
Главное окно программы показано ниже:

В настоящее время он находится в неподключенном состоянии «Нет соединения». Если вы проверяете только «Регистр удержания выхода 04», вы можете щелкнуть, чтобы перейти к шагу 3. и подключиться напрямую.
3), настройки параметров:
Нажмите «Определение ведомого … F2» в меню «Настройка», чтобы установить параметры, появится следующее диалоговое окно.

Среди них: A. Slave — это адрес ведомого устройства Modbus, соответствующий значению ID на главном экране, по умолчанию — 1.
B. Функция — это выбор кодов функций регистра, всего существует четыре типа, и соответствующие отношения следующие:
Код Название на китайском языке Зарегистрировать адрес ПЛК Битовая операция / Словесная операция Количество операций
01 Чтение статуса катушки 00001-09999 Битовая операция, одиночная или множественная
02 Чтение состояния дискретного входа 10001-19999 Битовая операция Один или несколько
03 Чтение регистра временного хранения 40001-49999 Операция Word Один или несколько
04 Чтение регистра ввода 30001-39999 Операция в виде слова Один или несколько
05 Запись одиночной катушки 00001-09999 Одинарная битовая операция
06 Запись одного регистра временного хранения 40001-49999 Одинарная операция Word
15 Запись нескольких катушек 00001-09999 Несколько битовых операций
16 Запись в несколько регистров хранения 40001–49999 Операция в несколько слов
C. Адрес — это начальный адрес регистра. По умолчанию начинается с 1.
D. Длина — это количество последовательных регистров. По умолчанию — 10.
Нажмите кнопку ОК, в окне моделирования отобразится определенный список регистров:

Среди них: ID представляет адрес устройства моделируемого субустройства Modbus; F представляет код функции.
Щелкните соответствующий регистр, чтобы изменить значение или статус соответствующего регистра. Например, значение регистра 2 изменяется на 9, а значение регистра 9 изменяется на 100.
4), настройки отображения:
Настройка режима отображения данных:
По умолчанию режим отображения данных регистра — Подписанный (шестнадцатеричный беззнаковый двоичный), а диапазон данных составляет -32768——32767. Если пользователь хочет отображать другие числовые способы, он может выбрать и установить через меню «Отображение», как показано на следующем рисунке:

Настройка формата адреса:
Modbus Slave по умолчанию использует адрес ПЛК. «Адреса ПЛК (база 1)» в меню «Дисплей» — это состояние, выбранное по умолчанию. Начальный адрес регистра по умолчанию — 1, что отличается от конфигурации. Программный последовательный порт Modbus и драйвер пересылки данных TCP одинаковы. Если вам нужно установить начальный адрес на 0 во время теста, вы можете выбрать «Адреса протокола (базовый 0)». Как правило, достаточно адреса ПЛК по умолчанию.
5), соединение:
Нажмите «Подключить … F3» в меню «Подключение», чтобы подключиться. Появится диалоговое окно подключения:

Где: Port2 означает используемый последовательный порт (COM2), выберите другой последовательный порт или TCP / IP для подключения в соответствии с реальной ситуацией.
Mode, что означает режим протокола Modbus, действителен при использовании последовательного порта; автоматически в режиме TCP при использовании TCP / IP
Управление потоком, что означает управление потоком, действительное в режиме последовательного порта;
Игнорировать идентификатор устройства, что означает, что недопустимые номера групп игнорируются в режиме TCP.
Пользователи могут установить параметры последовательного порта в соответствии со своими потребностями. Значение по умолчанию: последовательный порт 1, скорость передачи 9600 бод, 8 бит данных, без бита четности и 1 стоповый бит. После подтверждения настроек нажмите кнопку «ОК». В это время красный «Нет соединения» в главном окне указывает, что информация в неподключенном состоянии исчезает, указывая, что ведомое устройство находится в нормальном состоянии соединения.
6), изменение значения регистра:
Дважды щелкните мышью по адресу регистра в главном окне, появится диалоговое окно изменения, как показано на рисунке ниже:

Введите значение в поле ввода для подтверждения. Диапазон значений: -32768——32767.
Среди них: после того, как установлен флажок «Автоинкремент», значение соответствующего регистра может увеличиваться на 1 каждую 1 секунду.
7), проверьте фрейм данных связи:
Нажмите «Связь …» в меню «Дисплей», чтобы вызвать диалоговое окно с информацией о мониторинге фреймов данных отправки и получения последовательного порта для просмотра и анализа отправленных и полученных фреймов данных. Как показано ниже:

Среди них: первые 6 битов — это порядковый номер кадра данных.
Rx: представляет получаемый фрейм данных.
Tx: означает отправку кадра данных.
8), отключите:
Нажмите «Отключить F4», чтобы отключить и завершить тест. В это время в главном окне отображается красный значок «Нет подключения», указывающий на отключенное состояние.
Четыре, программа моделирования ведущего / ведомого устройства Modbus
1) Установите инструмент виртуального последовательного порта vspd. Добавьте два порта COM2 и COM3 через инструмент.

2) Затем откройте установленное программное обеспечение Modbuspoll и Modbus Slave и нажмите «F8», чтобы настроить соответствующую конфигурацию главного и подчиненного терминалов, как показано на рисунке:

В приведенной выше конфигурации идентификатор устройства 10 ведомых счетчиков равен 1, но считываются только данные первых 6 счетчиков, которые можно настроить в соответствии с вашей ситуацией.
2. Затем нажмите «F3» для подключения, обратите внимание на изменение порта интерфейса подключения, главная и подчиненная машины соответственно выбирают наши виртуальные порты com2 и com3, потому что я использую только RTU Mode, поэтому другие параметры, такие как скорость передачи 9600, бит 8, четность 1, без эквивалента и т. Д., Могут оставаться неизменными, а затем нажмите OK для подключения. Во второй строке неподключенного окна появится подсказка.
Когда начинается связь, на стороне хоста отображается: TX = 232, Err = 0, ID = 1, F = 03, SR = 1000 мс. Это означает, что нужно отправить 232 команды, время ошибки, ID ведомого, номер функции, интервал опроса.
Используйте кнопку «Коммуникационный трафик» на панели инструментов для отображения текущих отправленных команд и полученных данных.

Простая программа для просмотра регистров контроллера с Modbus — протоколом:

  • Простой, интуитивно понятный интерфейс;
  • Все настройки вынесены на основную панель;
  • Просмотр до 125 регистров каждого из типов (coils, input, holding);
  • Регистры типа 0ХХХХХ, 1ХХХХХ, 4ХХХХХХ, 3ХХХХХХ;
  • Запись в регистры типа 0ХХХХХ;
  • Запись в регистры типа 4ХХХХХ;
  • Работа через COM-порт и поверх TCP/IP;
  • Бесплатное распространение программы.

Ещё статьи по теме:

Бесплатная SCADA-система

Бесплатный OPC-сервер Modbus

Скачать Скачать Modbus — Master

Описание протокола Modbus RTU
Modbus —коммуникационный протокол, основан на архитектуре ведущий-ведомый (master-slave). Использует для передачи данных интерфейсы RS-485, RS-422, RS-232, а также Ethernet сети TCP/IP (протокол Modbus TCP).

Сообщение Modbus RTU состоит из адреса устройства SlaveID, кода функции, специальных данных в зависимости от кода функции и CRC контрольной суммы.

VVaiIKxK0is.jpg

Если отбросить SlaveID адрес и CRC контрольную сумму, то получится PDU, Protocol Data Unit.

SlaveID – это адрес устройства, может принимать значение от 0 до 247, адреса с 248 до 255 зарезервированы.

Данные в модуле хранятся в 4 таблицах.

Две таблицы доступны только для чтения и две для чтения-записи.

В каждой таблице помещается 9999 значений.

k0FYGgxeb-g.jpg

В сообщении Modbus используется адрес регистра.

Например, первый регистр AO Holding Register, имеет номер 40001, но его адрес равен 0000.

Разница между этими двумя величинами есть смещение offset.

Каждая таблица имеет свое смещение, соответственно: 1, 10001, 30001 и 40001.

Ниже приведен пример запроса Modbus RTU для получения значения AO аналогового выхода (holding registers) из регистров от #40108 до 40110 с адресом устройства 17.

11 03 006B 0003 7687

GAnTW15fXu0.jpg

В ответе от Modbus RTU Slave устройства мы получим:

11 03 06 AE41 5652 4340 49AD

Где:

hyvUe1yj58c.jpg

Регистр аналогового выхода AO0 имеет значение AE 41 HEX или 44609 в десятичной системе.

Регистр аналогового выхода AO1 имеет значение 56 52 HEX или 22098 в десятичной системе.

Регистр аналогового выхода AO2 имеет значение 43 40 HEX или 17216 в десятичной системе.

Значение AE 41 HEX — это 16 бит 1010 1110 0100 0001, может принимать различное значение, в зависимости от типа представления.

Значение регистра 40108 при комбинации с регистром 40109 дает 32 бит значение.

Пример представления.

MjdQ4P8jqw4.jpg

Какие бывают команды Modbus RTU?
Приведем таблицу с кодами функций чтения и записи регистров Modbus RTU.

Как послать команду Modbus RTU на чтение дискретного вывода? Команда 0x01
Эта команда используется для чтения значений дискретных выходов DO.

В запросе PDU задается начальный адрес первого регистра DO и последующее количество необходимых значений DO. В PDU значения DO адресуются, начиная с нуля.

Значения DO в ответе находятся в одном байте и соответствуют значению битов.

Значения битов определяются как 1 = ON и 0 = OFF.

Младший бит первого байта данных содержит значение DO адрес которого указывался в запросе. Остальные значения DO следуют по нарастающей к старшему значению байта. Т.е. справа на лево.

Если запрашивалось меньше восьми значений DO, то оставшиеся биты в ответе будут заполнены нулями (в направлении от младшего к старшему байту). Поле Byte Count Количество байт далее указывает количество полных байтов данных в ответе.

Пример запроса DO с 20 по 56 для SlaveID адреса устройства 17. Адрес первого регистра будет 0013 hex = 19, т.к. счет ведется с 0 адреса (0014 hex = 20, -1 смещение нуля = получаем 0013 hex = 19).

nYuIHs1SJ8I.jpg

Состояния выходов DO 27-20 показаны как значения байта CD hex, или в двоичной системе 1100 1101.

В регистре DO 56-52 5 битов справа были запрошены, а остальные биты заполнены нулями до полного байта (0001 1011).

8Ty4dZ7yscU.jpg

Как послать команду Modbus RTU на чтение дискретного ввода? Команда 0x02
Эта команда используется для чтения значений дискретных входов DI.

Пример запроса DI с регистров от #10197 до 10218 для SlaveID адреса устройства 17. Адрес первого регистра будет 00C4 hex = 196, т.к. счет ведется с 0 адреса.

QqfIsePU4g0.jpg

Как послать команду Modbus RTU на чтение аналогового вывода? Команда 0x03
Эта команда используется для чтения значений аналоговых выходов AO.

Пример запроса AO с регистров от #40108 до 40110 для SlaveID адреса устройства 17. Адрес первого регистра будет 006B hex = 107, т.к. счет ведется с 0 адреса.

aASS6p0gnaI.jpg

Как послать команду Modbus RTU на чтение аналогового ввода? Команда 0x04
Эта команда используется для чтения значений аналоговых входов AI.

Пример запроса AI с регистра #30009 для SlaveID адреса устройства 17. Адрес первого регистра будет 0008 hex = 8, т.к. счет ведется с 0 адреса.

fYoxq5vKDfc.jpg

Как послать команду Modbus RTU на запись дискретного вывода? Команда 0x05
Эта команда используется для записи одного значения дискретного выхода DO.

Значение FF 00 hex устанавливает выход в значение включен ON.

Значение 00 00 hex устанавливает выход в значение выключен OFF.

Все остальные значения недопустимы и не будут влиять значение на выходе.

Нормальный ответ на такой запрос — это эхо (повтор запроса в ответе), возвращается после того, как состояние DO было изменено.

Пример записи в DO с регистром #173 для SlaveID адреса устройства 17. Адрес регистра будет 00AC hex = 172, т.к. счет ведется с 0 адреса.

QJtNPfZwQmc.jpg

Состояние выхода DO173 поменялось с выключен OFF на включен ON.

Как послать команду Modbus RTU на запись аналогового вывода? Команда 0x06
Эта команда используется для записи одного значения аналогового выхода AO.

Пример записи в AO с регистром #40002 для SlaveID адреса устройства 17. Адрес первого регистра будет 0001 hex = 1, т.к. счет ведется с 0 адреса.

eU6GtqtaT18.jpg

Как послать команду Modbus RTU на запись нескольких дискретных выводов? Команда 0x0F
Эта команда используется для записи нескольких значений дискретного выхода DO.

Пример записи в несколько DO с регистрами от #20 до #29 для SlaveID адреса устройства 17. Адрес регистра будет 0013 hex = 19, т.к. счет ведется с 0 адреса.

F-4r5c_PLhc.jpg

В ответе возвращается количество записанных регистров.

Как послать команду Modbus RTU на запись нескольких аналоговых выводов? Команда 0x10
Эта команда используется для записи нескольких значений аналогового выхода AO.

Пример записи в несколько AO с регистрами #40002 и #40003 для SlaveID адреса устройства 17. Адрес первого регистра будет 0001 hex = 1, т.к. счет ведется с 0 адреса.

uQCxd5FFayc.jpg

Какие бывают ошибки запроса Modbus?
Если устройство получило запрос, но запрос не может быть обработан, то устройство ответит кодом ошибки.

Ответ будет содержать измененный Функциональный код, старший бит будет равен 1.

Пример:

qhDfiTY3YtA.jpg

Пример запроса и ответ с ошибкой:

vJu-IQS8mvY.jpg

Расшифровка кодов ошибок

WkFMgPprWEI.jpg

Программы для работы с протоколом Modbus RTU
Ниже перечислены программы, которые облегчают работу с Modbus.

DCON Utility Pro с поддержкой Modbus RTU, ASCII, DCON. 

HYKHLbnOA6w.jpg

Modbus Master Tool с поддержкой Modbus RTU, ASCII, TCP. 

0ajXIqWprGs.jpg

Modbus TCP client с поддержкой Modbus TCP. 

8L0RztOBpQc.jpg

Источник:

https://ipc2u.ru/articles/prostye-resheniya/modbus-rtu/

Modbus — это протокол последовательной связи, который был открыт Modicon в 1979 году и используется для передачи данных по последовательным линиям между промышленными электронными устройствами. RS-485 Modbus использует RS-485 для линий передачи. Следует отметить, что Modbus — это программный протокол, а не аппаратный. Он разделен на две части, такие как Modbus Master и Modbus Slave. В сети RS-485 Modbus есть один мастер и 127 подчиненных, каждый с уникальным адресом от 1 до 127. В этом проекте MAX485 Arduino мы будем использовать Arduino Uno в качестве подчиненного устройства для последовательной связи.

Modbus в основном используется в ПЛК (программируемых логических контроллерах). Помимо этого, Modbus также используется в здравоохранении, транспорте, домашней автоматизации и т. Д. Modbus имеет 255 функциональных кодов, и в основном существуют три популярные версии Modbus:

  • MODBUS RTU
  • MODBUS ASCII
  • MODBUS / TCP

В чем разница между Modbus ASCII и Modbus RTU?

Modbus RTU и Modbus ASCII используют один и тот же протокол. Единственное отличие состоит в том, что байты, передаваемые по сети, представлены как двоичные с RTU и как читаемые ASCII с Modbus RTU. В этом руководстве будет использоваться Modbus RTU.

Это руководство посвящено использованию связи RS-485 Modbus с Arduino UNO в качестве ведомого устройства. Здесь мы устанавливаем программное обеспечение Simply Modbus Master на ПК и контролируем два светодиода и серводвигатель, используя RS-485 в качестве линии передачи. Эти светодиоды и серводвигатель подключены к Slave Arduino и управляются путем отправки значений с помощью программного обеспечения Master Modbus. Поскольку в этом руководстве используется RS-485, рекомендуется сначала пройти через последовательную связь RS485 между Arduino Uno и Arduino Nano. RS485 также может использоваться с другими контроллерами для последовательной связи:

  • Последовательная связь RS-485 между Raspberry Pi и Arduino UNO
  • Последовательная связь между STM32F103C8 и Arduino UNO с использованием RS-485

Начнем с знакомства с RS-485 и Modbus. Также узнайте больше о различных протоколах последовательной связи здесь.

Последовательная связь RS-485

RS-485 — это протокол асинхронной последовательной связи, не требующий часов. Он использует технику, называемую дифференциальным сигналом, для передачи двоичных данных от одного устройства к другому.

Так что же это за метод передачи дифференциального сигнала ??

Метод дифференциального сигнала работает путем создания дифференциального напряжения с использованием положительного и отрицательного напряжения 5 В. Он обеспечивает полудуплексную связь при использовании двух проводов, а для полудуплексного режима требуется 4 четверти провода.

Используя этот метод:

  • RS-485 поддерживает более высокую скорость передачи данных до 30 Мбит / с.
  • Он также обеспечивает максимальное расстояние передачи данных по сравнению с протоколом RS-232. Он передает данные на расстояние до 1200 метров.
  • Основным преимуществом RS-485 перед RS-232 является наличие нескольких ведомых устройств с одним ведущим устройством, в то время как RS-232 поддерживает только одно ведомое устройство.
  • Может иметь до 32 устройств, подключенных к протоколу RS-485.
  • Еще одно преимущество RS-485 — невосприимчивость к шуму, поскольку для передачи используется метод дифференциального сигнала.
  • RS-485 быстрее по сравнению с протоколом I2C.

Подключение RS-485 к Arduino

Модуль RS-485 может быть подключен к любому микроконтроллеру, имеющему последовательный порт. Для использования модуля RS-485 с микроконтроллерами необходим модуль 5V MAX485 TTL to RS485, основанный на микросхеме Maxim MAX485, поскольку он обеспечивает последовательную связь на большом расстоянии до 1200 метров. Он двунаправленный и полудуплексный со скоростью передачи данных 2,5 Мбит / с. Для этого модуля требуется напряжение 5 В.

Распиновка RS-485:

Имя контакта

Описание контакта

VCC

А

Неинвертирующий вход приемника

Выходной сигнал неинвертирующего драйвера

B

Инвертирование входа приемника

Инвертирование выхода драйвера

GND

GND (0 В)

R0

Выход приемника (вывод RX)

RE

Выход приемника (LOW-Enable)

DE

Выход драйвера (HIGH-Enable)

DI

Вход драйвера (вывод TX)

Модуль преобразования USB в RS-485

Это модуль адаптера преобразователя USB в RS485, который поддерживает WIN7, XP, Vista, Linux, Mac OS и обеспечивает простой в использовании интерфейс RS485 за счет использования COM-порта на компьютере . Этот модуль является устройством plug-and-play . Командных структур нет, все, что отправляется на виртуальный COM-порт, автоматически преобразуется в RS485 и наоборот. Модуль полностью автономен от шины USB. Таким образом, для работы нет необходимости во внешнем источнике питания.

Он отображается как последовательный / COM-порт и доступен из приложений или гипер-терминала. Этот преобразователь обеспечивает полудуплексную связь RS-485. Диапазон скорости передачи составляет от 75 до 115200 бит / с, максимум до 6 Мбит / с.

Для использования этого устройства в Интернете доступно различное программное обеспечение Modbus. В этом руководстве используется программное обеспечение под названием Simply Modbus Software.

Программное обеспечение Simply Modbus Master

Приложение Modbus Master Software необходимо для отправки данных на подчиненное устройство Modbus RS-485 Arduino через COM.

Simply Modbus Master — это программа для тестирования передачи данных. Вы можете загрузить Simply Modbus Master по указанной ссылке и узнать о нем больше, обратившись к Руководству по программному обеспечению.

Перед использованием программного обеспечения важно ознакомиться со следующей терминологией.

ID ведомого:

Каждому ведомому устройству в сети назначается уникальный адрес устройства от 1 до 127. Когда ведущее устройство запрашивает данные, первый байт, который он отправляет, является адресом ведомого. Таким образом, каждое ведомое устройство после первого байта знает, игнорировать сообщение или нет.

Код функции:

Второй байт, посланный мастером, — это код функции. Этот номер сообщает ведомому устройству, к какой таблице получить доступ и следует ли читать из таблицы или писать в нее.

Поддерживаемые коды функций регистра:

Код функции

Действие

Имя таблицы

04 (04 шестн.)

Читать

Регистры аналогового ввода

03 (03 шестнадцатеричный)

Читать

Регистры хранения аналогового вывода

06 (06 шестн.)

Написать сингл

Регистр хранения аналогового выхода

16 (10 шестн.)

Написать несколько

Регистры хранения аналогового вывода

Поддерживаемые коды функций катушки:

Код функции

Действие

Имя таблицы

02 (02 шестн.)

Читать

Дискретные входные контакты

01 (01 шестнадцатеричный)

Читать

Катушки с дискретным выходом

05 (05 шестн.)

Написать сингл

Катушка дискретного выхода

15 (0F шестнадцатеричный)

Написать несколько

Катушки с дискретным выходом

CRC:

CRC расшифровывается как Cyclic Redundancy check. Это два байта, добавляемых в конец каждого сообщения Modbus для обнаружения ошибок.

Необходимые инструменты

Оборудование

  • Arduino UNO
  • Модуль преобразователя MAX-485 TTL в RS-485
  • Модуль преобразования USB в RS-485
  • Светодиод (2)
  • Резистор 1k (2)
  • ЖК-дисплей 16×2
  • Потенциометр 10k
  • Серводвигатель SG-90

Программного обеспечения

  • Просто Modbus Master

Принципиальная электрическая схема

Схема соединения между модулем преобразователя MAX-485 TTL в RS-485 и Arduino UNO:

Arduino UNO

Модуль преобразователя MAX-485 TTL в RS-485

0 (RX)

RO

1 (Техас)

DI

4

DE и RE

+ 5В

VCC

GND

GND

Схема подключения между MAX-485 TTL и модулем RS-485 и преобразователем USB в RS-485:

MAX-485 TTL в RS-485

Модуль преобразователя

Модуль USB для RS-485

Подключен к ПК

А

А

B

B

Схема соединений между Arduino UNO и ЖК-дисплеем 16×2:

ЖК-дисплей 16×2

Arduino UNO

VSS

GND

VDD

+ 5В

V0

Для управления контактом потенциометра для регулировки контрастности / яркости ЖК-дисплея 16×2

RS

8

RW

GND

E

9

D4

10

D5

11

D6

12

D7

13

А

+ 5В

K

GND

Цепное соединение между 2 светодиодами, серводвигателем и Arduino UNO:

Arduino UNO

LED1

LED2

Серводвигатель

2

Анод через резистор 1к

5

Анод через резистор 1к

6

Штифт ШИМ (оранжевый)

+ 5В

+ 5В (КРАСНЫЙ)

GND

Катод GND

Катод GND

GND (коричневый)

Программирование Arduino UNO для RS-485 MODBUS Slave

Arduino UNO настроен как ведомый Modbus. Также к Arduino UNO прилагаются два светодиода и один серводвигатель. Таким образом, подчиненный Arduino управляется с помощью главного программного обеспечения Modbus. Связь между Arduino UNO и программным обеспечением Modbus Master осуществляется с помощью модуля RS-485. Для подключения к ПК используется модуль преобразователя USB в RS-485. И для Arduino UNO с модулем преобразователя MAX-485 TTL в RS-485 вся установка будет выглядеть следующим образом:

Для использования Modbus в Arduino UNO, библиотека
используется. Эта библиотека используется для связи с RS-485 Modbus Master или Slave по протоколу RTU. Загрузите Modbus RTU и добавьте библиотеку в эскиз, выполнив Sketch-> include library-> Add.zip Library. В программировании есть несколько основных шагов, которые будут объяснены ниже.

Первоначально включите необходимую библиотеку. Библиотека ModbusRTU предназначена для использования связи RS-485 Modbus, жидкокристаллическая библиотека предназначена для использования ЖК-дисплея с Arduino UNO, а библиотека сервомотора предназначена для использования серводвигателя с Arduino UNO.

#включают

#включают

#включают

Теперь выводы анода светодиода, которые соединены с выводами 2 и 5 Arduino, определены как LED1 и LED2.

#define led1 2 #define led2 5

Затем объявляется объект для доступа к классу Liquid Crystal с выводами ЖК-дисплея (RS, E, D4, D5, D6, D7), которые подключены к Arduino UNO.

ЖК-дисплей LiquidCrystal (8,9,10,11,12,13);

Когда ЖК-дисплей готов, инициализируйте объект серво для класса Servo. Также инициализируйте объект шины для класса Modbus.

Серво сервопривод; Шина Modbus;

Затем для хранения значений для связи Modbus объявляется массив с тремя значениями, инициализированными нулем.

uint16_t modbus_array = {0,0,0};

В функции настройки сначала ЖК-дисплей устанавливается в режим 16×2, а приветственное сообщение отображается и очищается.

lcd.begin (16,2); // ЖКдисплей установлен в режим 16×2 lcd.print («RS-485 Modbus»); // Приветственное сообщение lcd.setCursor (0,1); lcd.print («Подчиненное устройство Arduino»); задержка (5000); lcd.clear ();

После этого выводы LED1 и LED2 устанавливаются как выходные выводы.

pinMode (led1, ВЫХОД); pinMode (светодиод2, ВЫХОД);

Вывод сервоимпульса, подключенный к выводу 6 PWM Arduino, прикреплен.

сервопривод (6);

Теперь для связи Modbus установлены следующие параметры. Первая цифра «1» представляет собой идентификатор ведомого устройства, вторая цифра «1» означает, что он использует RS-485 для передачи данных, а «4» представляет собой вывод RS-485 DE&RE, подключенный к Arduino UNO.

шина = Modbus (1,1,4);

Ведомое устройство Modbus настроено на скорость 9600 бод.

Цикл начинается с определения опроса шины, а bus.poll () используется для записи и получения значения от ведущего Modbus.

bus.poll (modbus_array, sizeof (modbus_array) / sizeof (modbus_array));

Этот метод используется для проверки наличия каких-либо данных через последовательный порт.

Если в последовательном порту есть какие-либо данные, библиотека Modbus RTU проверит сообщение (проверьте адрес устройства, длину данных и CRC) и выполнит необходимое действие.

Например, чтобы записать или прочитать любое значение от ведущего устройства, ModbusRTU должен получить массив беззнаковых 16-битных целых чисел и его длину от ведущего Modbus. Этот массив содержит данные, записанные мастером.

В этом руководстве есть три массива для LED1, LED2 и угла серводвигателя.

Сначала для включения или выключения используется LED1 modbus_array.

if (modbus_array == 0) // Зависит от значения в modubus_array, записанного ведущим Modbus { digitalWrite (led1, LOW); // светодиод не горит, если 0 lcd.setCursor (0,0); lcd.print («L1: ВЫКЛ»); } else { digitalWrite (led1, HIGH); // светодиод горит, если значение отличается от 0 lcd.setCursor (0,0); lcd.print («L1: ON»); }

Затем для включения или выключения используется LED2 modbus_array.

if (modbus_array == 0) // Зависит от значения в modbus_array, записанного мастером Modbus { digitalWrite (led2, LOW); // светодиод не горит, если 0 lcd.setCursor (8,0); lcd.print («L2: ВЫКЛ»); } else { digitalWrite (led2, HIGH); // Светодиод горит, если значение отличается от 0 lcd.setCursor (9,0); lcd.print («L2: ВКЛ»); }

Затем, чтобы установить угол серводвигателя, используется modbus_array, и значение печатается на ЖК-дисплее 16×2.

int pwm = modbus_array; серво. запись (ШИМ); lcd.setCursor (0,1); lcd.print («Угол сервопривода:»); lcd.print (ШИМ); задержка (200); lcd.clear ();

На этом завершается программирование Arduino UNO для работы в качестве ведомого устройства MODBUS. Следующим шагом будет тестирование его как Modbus Slave.

Тестирование Arduino UNO в качестве ведомого устройства RS485 Modbus

После того, как соединения схемы завершены и код загружен в Arduino UNO, самое время подключить модуль USB к RS-485 с ПК, на котором установлено программное обеспечение Simple Modbus Master.

Откройте диспетчер устройств и проверьте COM-порт в соответствии с вашим ПК, к которому подключен модуль USB к RS-485, а затем откройте программное обеспечение Simply Modbus Master 8.1.1.

1. После открытия программного обеспечения Simply Modbus откройте опцию записи.

2. После открытия окна Simply Modbus Master Write. Установите параметры

Режим в RTU, COM-порт в соответствии с вашим ПК (у меня был COM6), скорость в бодах 9600, биты данных 8, стоповый бит 1, четность нет и идентификатор ведомого как 1.

3. После этого установите для первого регистра значение 40001, значение для записи — 3, а код функции — 16 (запись в регистр временного хранения).

После этого запишите от 1 до 40001 (если LED1 включен), от 1 до 40002 (если LED2 включен) и от 90 до 40003 (для угла серводвигателя), а затем нажмите кнопку SEND.

Вы можете видеть, что светодиодный индикатор горит, а угол сервопривода составляет 90 градусов.

4. После этого введите 40001 как 1 и 40002 как 0 и 40003 как 180 и нажмите кнопку ОТПРАВИТЬ.

5. Теперь записываем 135 в 40003 и 40001 как 0 и 40002 как 1.

Вот как можно использовать RS-485 Modbus для последовательной связи с Arduino UNO в качестве ведомого устройства. В следующем уроке мы будем использовать Arduino Uno в качестве ведущего в соединении MODBUS.

Найдите полный код и демонстрационное видео ниже.

Понравилась статья? Поделить с друзьями:
  • Кларитромицин для детей до 12 лет таблетки инструкция по применению
  • Сироп гербион от кашля для детей отзывы инструкция цена
  • Кальцитонин лосося инструкция по применению цена отзывы
  • Какие инструкции не разрабатываются в организации эксплуатирующей сосуды тест 24
  • Инструкция по правилам безопасного поведения учащихся в школе