Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Как использовать Modbus с Arduino

Компоненты и расходные материалы

Arduino UNO
× 1
Профессиональный щит RS422 / RS485 для Arduino
× 1
преобразователь USB-to-RS485
× 1
Макет (общий)
× 1
LED (общий)
× 1
Резистор 10 кОм
× 1
Резистор 221 Ом
× 1
Перемычки (общие)
× 1
Кнопочный переключатель SparkFun, 12 мм
× 1

Приложения и онлайн-сервисы

IDE Arduino
Modbustester

Об этом проекте

Modbus, стандарт последовательной связи, стал де-факто стандартным протоколом связи и теперь является общедоступным средством подключения промышленных электронных устройств. В Modbus RTU и Modbus ASCII RS485 используется в качестве физического уровня. В приложениях Modbus можно использовать Arduino в качестве ведомого (и с некоторыми ограничениями также в качестве ведущего), но требуется интерфейс RS485. Наш RS422 / RS485 Shield - это полностью гальванически изолированный экран последовательной связи, предназначенный для использования с Arduino UNO и другими совместимыми платами, такими как Arduino 101, STM Nucleo ... Этот экран является идеальным выбором для таких приложений.

Цель этого документа - показать, как создать вместе с Arduino UNO простое ведомое устройство Modbus. Мы будем использовать ПК в качестве ведущего устройства Modbus.

Инструменты и материалы

  • Arduino UNO
  • RS485 Shield для Arduino
  • Любой адаптер RS485-USB для подключения к ПК (или более дешевый).

Необязательно:

  • Макет
  • Кнопка
  • Красный светодиод
  • Резистор 220 Ом
  • Резистор 10 кОм
  • Перемычки

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

  • IDE Arduino
  • Modbustester

Подключение RS485:

Электромонтаж очень простой. Вы должны соединить только клеммы A и B экрана с линией A и B системы Modbus. Терминалы Y и Z не используются для этого типа приложений. Для больших расстояний рекомендуется использовать витые пары для A и B.

Подключение Arduino (необязательно):

Рекомендуется добавить к Arduino светодиод и кнопку, чтобы увидеть некоторые эффекты связи Modbus. Это необязательно и не обязательно.

Настройки DIP-переключателя:

RS422 / RS485 Shield поставляется с 3 блоками DIP-переключателей. Вы должны установить эти DIP-переключатели для Modbus, как показано на рисунке ниже.

Переключатель 1:1-ВЫКЛ. 2-ВКЛ. 3-ВКЛ. 4-ВЫКЛ.

Переключатель 2:1-ВЫКЛ. 2-ВЫКЛ. 3-ВКЛ. 4-ВКЛ.

Переключатель 3:1-ВЫКЛ. Или ВКЛ. * 2-ВЫКЛ. 3-ВЫКЛ. 4-ВЫКЛ.

* В зависимости от положения экрана RS422 / RS485 в линии Modbus вам необходимо включить или выключить согласующий резистор. Переключите резистор в положение ON, только если экран находится на одном конце шины. Во всех остальных случаях выключите оконечный резистор:

Настройки перемычки:

На щите вы можете найти 3 разных области перемычек. Очень важна перемычка JP1 для напряжения источника питания. Arduino UNO работает с внутренним напряжением 5 В. Вы должны установить эту перемычку в положение 5 В (для плат на 3,3 В, например, Arduino 101 в положение 3,3 В).

Кроме того, установите перемычки для портов связи в верхнем левом углу, как показано на рисунке выше. В этом случае внутренний UART на портах 0 и 1 будет подключен к интерфейсу RS485 экрана.

И последнее, но не менее важное:мы должны установить перемычку для порта управления RX / TX. Мы не используем эту перемычку, потому что настроено автоматическое переключение RX / TX.

Установите программное обеспечение Modbus Tester на ПК:

В этом примере мы будем использовать ПК в качестве ведущего устройства Modbus. Вам необходимо скачать Modbustester. Распакуйте zip-архив в новый каталог на жестком диске. Откройте программу и измените отмеченные поля, как на картинке ниже. Вам необходимо подключить USB-RS485-адаптер, пожалуйста, выберите правильный COM-порт для этого адаптера в Modbustester.

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

Пожалуйста, загрузите прошивку в Arduino IDE для компиляции и программирования.

Проверьте свою работу:

Пришло время протестировать вашу работу!

Вы можете нажать кнопку «Читать» в Modbustester. Эта команда прочитает 8 байтов памяти нашего нового ведомого устройства. По адресу 400008 вы можете найти статус кнопки. Адрес 400001 - 400006 содержит значения портов АЦП.

С помощью кнопки записи вы можете управлять регистрами ведомого устройства. Вы можете ввести в адрес 400007 0 или 1 для включения или выключения светодиода.

Код

  • Пример кода для Arduino UNO
Пример кода для Arduino UNO Arduino
 / * * Тестовая программа для Arduino RS422 / RS485 Shield * Версия 1.0 * Copyright (C) 2018 Hartmut Wendt www.zihatec.de * * (на основе источников https://github.com/angeloc/simplemodbusng) * * * Эта программа является бесплатным программным обеспечением:вы можете распространять ее и / или изменять * ее в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной * Free Software Foundation, либо версии 3 лицензии, либо * (по вашему выбору) любая более поздняя версия. * * Эта программа распространяется в надежде, что она будет полезной, * но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См. * Стандартную общественную лицензию GNU для получения более подробной информации. * * Вы должны были получить копию Стандартной общественной лицензии GNU * вместе с этой программой. Если нет, см. . * / #Include  #define ledPin 12 // встроенный светодиод #define buttonPin 7 // кнопка / * В этом примере кода есть 9 регистров хранения. 6 аналоговых входов, 1 кнопка, 1 цифровой выход и 1 регистр для индикации ошибок, обнаруженных с момента запуска. Функция 5 (запись одиночной катушки) не реализована, поэтому я использую весь регистр и функцию 16 для установки встроенного светодиода на Atmega328P. Метод modbus_update () обновляет массив регистров holdingRegs и проверяет связь. Примечание. Размер последовательного кольцевого буфера Arduino составляет 128 байтов или 64 регистра. В большинстве случаев вы будете подключать Arduino к мастеру через последовательный порт, используя MAX485 или аналогичный. В запросе функции 3 мастер попытается прочитать данные с вашего ведомого устройства, и поскольку 5 байтов уже используются для ID, FUNCTION, NO OF BYTES и двух байтов CRC, мастер может запросить только 122 байта или 61 регистр. В запросе функции 16 мастер попытается записать на ваше ведомое устройство, и поскольку 9 байтов уже используются для ID, FUNCTION, ADDRESS, NO OF REGISTERS, NO BYTES и двух байтов CRC, мастер может записать только 118 байтов или 59 регистров. . При использовании преобразователя FTDI USB в последовательный порт максимальное количество байтов, которые вы можете отправить, ограничено его внутренним буфером, который составляет 60 байтов или 30 беззнаковых целых регистров. Таким образом:в запросе функции 3 мастер попытается прочитать данные с вашего ведомого устройства, и поскольку 5 байтов уже используются для ID, FUNCTION, NO OF BYTES и двух байтов CRC, мастер может запросить только 54 байта или 27 регистров. В запросе функции 16 мастер попытается записать на ваше ведомое устройство, и поскольку 9 байтов уже используются для ID, FUNCTION, ADDRESS, NO OF REGISTERS, NO BYTES и двух байтов CRC, мастер может записать только 50 байтов или 25 регистров. . Поскольку предполагается, что вы в основном будете использовать Arduino для подключения к мастеру без использования преобразователя USB в последовательный порт, внутренний буфер установлен так же, как и кольцевой буфер последовательного порта Arduino, который составляет 128 байт. * / // Использование инструкции enum позволяет для простого // метода добавления и удаления регистров. Выполнение этого способа избавляет вас от # определения размера // массива регистров ваших подчиненных устройств каждый раз, когда вы хотите добавить больше регистров, // и кратко информирует вас о структуре регистров ваших подчиненных устройств. /////////// ///// регистры вашего ведомого /////////////////// enum {// просто добавьте или удалите регистры и все готово ... // Первый регистр начинается с адреса 0 ADC0, ADC1, ADC2, ADC3, ADC4, ADC5, LED_STATE, BUTTON_STATE, TOTAL_ERRORS, // оставьте этот TOTAL_REGS_SIZE // общее количество регистров для функций 3 и 16 совместно используют один и тот же массив регистров}; unsigned int holdingRegs [ TOTAL_REGS_SIZE]; // массив регистров функции 3 и 16 ////////////////////////////////////////// ////////////////// void setup () {/ * параметры (длинная скорость передачи, идентификатор символа без знака, вывод разрешения передачи символа без знака, размер регистров хранения без знака int, низкая задержка символа без знака ) Контакт разрешения передачи используется в полудуплексной связи для активации MAX485 или аналогичного для деактивации этого режима, используйте любое значение <2, потому что 0 и 1 зарезервированы для Rx и Tx. Низкие задержки делают реализацию нестандартной, но практически она работает со всеми основными реализациями Modbus master. * / modbus_configure (9600, 1, 6, TOTAL_REGS_SIZE, 0); pinMode (ledPin, ВЫХОД); pinMode (buttonPin, ВВОД); } void loop () {// modbus_update () - единственный метод, используемый в loop (). Он возвращает общее // количество ошибок с момента запуска ведомого устройства. Вам не обязательно использовать его, но он полезен // для поиска неисправностей мастером Modbus. holdRegs [TOTAL_ERRORS] =modbus_update (holdingRegs); для (байт i =0; i <6; i ++) {holdingRegs [i] =analogRead (i); delayMicroseconds (50); } байт buttonState =digitalRead (buttonPin); // считываем состояния кнопок // присваиваем значение buttonState регистру временного хранения holdingRegs [BUTTON_STATE] =buttonState; // считываем значение регистра LED_STATE и устанавливаем высокий или низкий уровень встроенного светодиода с помощью функции 16 байт ledState =holdingRegs [LED_STATE]; if (ledState) // установить led {digitalWrite (ledPin, HIGH); } else if (ledState ==0) // сбросить led {// digitalWrite (ledPin, LOW); holdRegs [LED_STATE] =0; }} 

Схема

Подключение некоторых тестовых компонентов к Arduino

Производственный процесс

  1. Очередь C# с примерами:что такое очередь C# и как ее использовать?
  2. Затемнение света с ШИМ с помощью кнопки
  3. Игра с гироскопом Arduino с MPU-6050
  4. Unopad - MIDI-контроллер Arduino с Ableton
  5. Простой датчик препятствий с Arduino
  6. Найди меня
  7. Джойстик Arduino
  8. Насколько легко использовать термистор ?!
  9. Как создавать музыку с помощью Arduino
  10. Как использовать NMEA-0183 с Arduino