Оглавление:

ESP32 Modbus Master TCP: 7 шагов
ESP32 Modbus Master TCP: 7 шагов

Видео: ESP32 Modbus Master TCP: 7 шагов

Видео: ESP32 Modbus Master TCP: 7 шагов
Видео: Modbus TCP-RS485| ESP32. Визуализация на Virtuino. 2024, Июнь
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

В этом классе вы запрограммируете процессор ESP32 как Modbus TCP Master.

Мы будем использовать два устройства, которые содержат этот процессор: Moduino ESP32 и Pycom. Оба устройства работают в среде MicroPytthon. Наш Modbus Slave будет ПК с запущенным на нем программным обеспечением симулятора Modbus.

Тебе понадобится:

  • Устройство Moduino ESP32 или Moduino Pycom (посетите этот веб-сайт, чтобы узнать больше об устройстве Moduino ESP32 и об этом, чтобы проверить устройство Pycom)
  • ПК с операционной системой Linux
  • Порт RS-232 / RS-485 на вашем компьютере или преобразователь USB в RS-232 / RS-485

Шаг 1. Загрузите и запустите симулятор ведомого устройства Modbus TCP

Загрузите и запустите Modbus TCP Slave Simulator
Загрузите и запустите Modbus TCP Slave Simulator

Загрузите симулятор Modbus Slave с https://www.modbusdriver.com/diagslave.html, затем откройте загруженный архив и распакуйте версию для операционной системы Linux.

Запустите программу из консоли с аргументом -p:

./diagslave -p

это порт, на котором будет работать ведомый сервер Modbus. Для протокола Modbus по умолчанию - 502, но вы можете использовать другой.

В Linux порты ниже 1024 не могут использоваться программами, запущенными от обычного пользователя (без привилегий root).

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

Шаг 2. Подготовьте компьютер к подключению к устройству

Подготовьте компьютер к подключению к устройству
Подготовьте компьютер к подключению к устройству

Вам потребуются программы для подключения к устройству и отправки на него файлов.

Установите среду Python и pip (если у вас его нет):

apt-get установить python3

apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py

Установите picocom:

apt-get install picocom

Эта программа нужна для подключения к устройству и выполнения на нем команд. Установите mpfshell:

pip install mpfshell

Эта программа позволяет отправлять файлы на устройство.

Вы также можете установить его из исходников. Обратитесь к этой странице:

Шаг 3. Подготовьте устройство и подключитесь к нему

Подготовьте устройство и подключитесь к нему
Подготовьте устройство и подключитесь к нему
Подготовьте устройство и подключитесь к нему
Подготовьте устройство и подключитесь к нему
Подготовьте устройство и подключитесь к нему
Подготовьте устройство и подключитесь к нему

Для подключения устройства Moduino или Pycom к ПК вам потребуется порт RS-232 / RS-485 или конвертер. Проверьте версию вашего устройства (какой тип порта оно использует) и найдите соответствующий порт или конвертер.

  1. Подключите устройство к ПК
  2. Затем подключите к нему блок питания

Подключите устройство к ПК, а затем подключите к нему блок питания. Вы также можете подключить кабель Ethernet к Moduino ESP32 (если у него есть этот порт).

Подключение должно быть как на фотографиях выше

Найдите путь к порту, который используется для подключения устройства. Это может быть, например: / dev / ttyS1, / dev / ttyUSB0.

Для конвертеров USB путь будет содержать слово USB.

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

picocom / dev / ttyUSB0 -b 115200

Командная строка устройства похожа на одно из изображений ниже.

Moduino ESP32: см. Здесь

Moduino Pycom: см. Здесь

Шаг 4: Загрузите главную библиотеку Modbus

Загрузить главную библиотеку Modbus
Загрузить главную библиотеку Modbus

github.com/pycom/pycom-modbus/ Для связи с Modbus Slave вам потребуется соответствующая библиотека. Библиотеки для Pycom несовместимы с Moduino. Ознакомьтесь с инструкциями, которые соответствуют вашему устройству.

Закройте picocom перед отправкой файлов: нажмите Ctrl + A, а затем Ctrl + X.

Библиотека uModBus для Moduino ESP32 основана на библиотеке pycom-modbus для Moduino Pycom. Он модифицирован для работы на обычном устройстве ESP32. Он также имеет дополнительные методы close () для классов коннекторов.

1) Moduino ESP32

Загрузите библиотеку с https://github.com/techbase123/micropython-modbus. Распакуйте архив и отправьте все 4 файла на устройство Moduino.

Используйте mpfshell, чтобы загрузить их. Запустите эту программу в каталоге с этими файлами.

Подключитесь к устройству, выполнив: ЭТО

ttyUSB0 - это имя последовательного порта, к которому подключено устройство.

Измените каталог на / flash / lib с помощью команды:

cd / flash / lib

Поместите все файлы с командами:

поставить uModBusConst.py

поставить uModBusFunctions.py положить uModBusTCP.py положить uModBusSerial.py

ПРИМЕР

Затем выйдите из консоли с помощью команды exit и перезапустите устройство с помощью кнопки Reset.

2) Moduino Pycom

Загрузите библиотеку с https://github.com/pycom/pycom-modbus/. Распакуйте архив и отправьте содержимое каталога uModbus на устройство. Используйте mpfshell для их загрузки. Запустите эту программу в каталоге с этими файлами.

Подключитесь к устройству, выполнив:

открыть ttyUSB0

ttyUSB0 - это имя последовательного порта, к которому подключено устройство.

Измените каталог на / flash / lib, создайте каталог uModbus и войдите в него с помощью команд:

cd / flash / libmd uModbus cd uModbus

Поместите все файлы с командами:

положить const.py

положить functions.py положить tcp.py положить serial.py

Затем выйдите из консоли с помощью команды выхода и перезапустите устройство с помощью кнопки Reset.

ПРИМЕР

Шаг 5: подключитесь к сети

Подключиться к сети
Подключиться к сети

Команды для установления соединения отличаются между Moduino и Pycom.

Подключитесь к устройству с помощью picocom для выполнения соответствующих команд. Вы можете подключить устройство Moduino к сети проводным или беспроводным способом. В следующих примерах предполагается, что в вашей сети есть рабочий DHCP-сервер.

В противном случае устройство не получит IP-адрес. Поддержка Wi-Fi есть в каждом Moduino. Порт Ethernet - это опция, и не на всех устройствах он есть.

1) Moduino ESP32

Подключение к Wi-Fi

Выполните на устройстве следующие команды:

из netWiFi import netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

Замените ESSID именем вашей сети Wi-Fi, а PASS - паролем от нее.

Через некоторое время после запуска start () вы должны получить IP-адрес, который был назначен вашему устройству.

Подключение к сети Ethernet

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

Затем выполните следующие команды:

из netETH импорт netETHeth = netETH () eth.start ()

Через некоторое время после запуска start () вы должны получить IP-адрес, который был назначен вашему устройству.

2) Moduino Pycom

Подключиться к Wi-Fi

Выполните на устройстве следующие команды:

из сети импорт WLANwlan = WLAN (mode = WLAN. STA) nets = wlan.scan () для сети в сетях: if net.ssid == 'ESSID': print ('Сеть найдена!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000), а не wlan.isconnected (): machine.idle () print ('WLAN-соединение успешно!') break

Замените ESSID именем вашей сети Wi-Fi, а PASS - паролем от нее.

Шаг 6: Инициализируйте связь с Modbus Slave

Инициализировать связь с Modbus Slave
Инициализировать связь с Modbus Slave

Главные библиотеки Modbus одинаковы для обоих устройств.

Они различаются по инициализации.

1) Инициализировать uModBus на Moduino ESP32

Выполнять:

из uModBusTCP импортировать uModBusTCP как TCP

2) Инициализировать uModBus на Pycom

Выполнять:

из uModbus.tcp импорт TCP

Открытое соединение

Затем откройте соединение с помощью:

modbus = TCP ('IP', ПОРТ, 60)

куда:

  • IP - IP-адрес вашего ПК с симулятором Modbus Slave
  • ПОРТ - порт Modbus Slave
  • 60 - это тайм-аут

Если при выполнении команд чтения / записи возникает следующая ошибка: ПРИМЕР

выполнять:

для Moduino ESP32:

modbus.close ()

для Moduino Pycom:

modbus._sock.close ()

а затем воссоздать соединение:

modbus = TCP ('IP', ПОРТ, 60)

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

Шаг 7: чтение и запись регистров

Чтение и запись регистров
Чтение и запись регистров

Modbus поддерживает несколько функций для чтения и записи регистров.

В библиотеке uModBus есть метод для каждой функции:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. write_single_register

Во-первых, давайте запишем некоторые значения.

1) Запись катушек (функция: 5)

Записать 1 значение в регистр 200 из ведомого 1:

modbus.write_single_coil (1, 200, 0xFF00)

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

Второй - номер регистра, а thirs - значение. Для 1 вы должны указать здесь 0xFF00. Запишите 0 в 201 регистр из ведомого 1:

modbus.write_single_coil (1, 201, 0)

Этот метод позволяет записывать только логические значения: 0 или 1.

2) Запись регистров (функция: 6)

Теперь запишите несколько целочисленных значений в несколько регистров.

Записать значение 111 со знаком в регистр 100 ведомого 1:

modbus.write_single_register (1, 100, 111, Истина)

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

Записать значение -457 со знаком в регистр 101 ведомого 1:

modbus.write_single_register (1, 101, -457)

Записать не подписанное значение 50 в регистр 100 ведомого 3:

modbus.write_single_register (3, 100, 50, Ложь)

Этот метод позволяет записывать целочисленные значения в один регистр.

Один регистр может содержать 16-битные значения.

Метод возвращает True, если входное значение допустимо, и False, если нет. Значение записывается, даже если оно недействительно (слишком велико для регистра)

3) Считывание катушек / дискретных входов

Теперь давайте прочитаем записанные логические значения. Чтобы прочитать регистр с функцией чтения катушки 1, выполните:

modbus.read_coils (slaveId, register, count) [0: count]

Чтобы прочитать регистр с функцией 2 чтения дискретного входа, выполните:

modbus.read_discrete_inputs (slaveId, регистр, счетчик) [0: счетчик]

куда:

  • slave-id - идентификатор виртуального подчиненного устройства (симулятор подчиненного устройства принимает все допустимые идентификаторы)
  • регистр - номер регистра для чтения
  • count - количество регистров для чтения (поместите желаемое количество в оба места)

Эти методы возвращают массив с логическими значениями. Каждое значение соответствует каждому регистру.

Фрагмент: [0: count] необходим, потому что этот метод возвращает больше значений, чем count. Он всегда возвращает количество значений, которое делится на 8. Дополнительные значения ложны и не соответствуют ни одному регистру.

Прочтите наши логические значения обоими методами:

modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]

Результат будет таким: ПРИМЕР

Истина относится к 1 значению, Ложь - к 0.

4) Чтение регистров

Теперь прочтите значения из регистров, записанных с помощью 6 функций.

Чтобы прочитать регистры с функцией 3 чтения регистров хранения, выполните:

modbus.read_holding_registers (slaveId, регистр, счетчик, подписанный = True)

Чтобы прочитать регистры с функцией 4 чтения входных регистров, выполните:

modbus.read_input_registers (slaveId, регистр, счетчик, подписанный = True)

куда:

  • slave-id - id виртуального подчиненного
  • регистр - номер регистра для чтения
  • count - количество регистров для чтения
  • знаковый - указывает, следует ли считать считанные значения числами со знаком. Состояние по умолчанию: True

Возвращаемое значение - кортеж с желаемым количеством регистров.

Чтение регистров, установленных в предыдущем пункте:

modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, False) modbus.read_input_registers (3, 100, 1, False)

Результаты должны выглядеть как на этом снимке экрана: ПРИМЕР

В следующем уроке вы узнаете, как создать ведущее устройство Modbus RTU на устройстве с поддержкой ESP32.

Рекомендуемые: