Оглавление:
- Шаг 1. Загрузите и запустите симулятор ведомого устройства Modbus TCP
- Шаг 2. Подготовьте компьютер к подключению к устройству
- Шаг 3. Подготовьте устройство и подключитесь к нему
- Шаг 4: Загрузите главную библиотеку Modbus
- Шаг 5: подключитесь к сети
- Шаг 6: Инициализируйте связь с Modbus Slave
- Шаг 7: чтение и запись регистров
Видео: ESP32 Modbus Master TCP: 7 шагов
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В этом классе вы запрограммируете процессор 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 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 или конвертер. Проверьте версию вашего устройства (какой тип порта оно использует) и найдите соответствующий порт или конвертер.
- Подключите устройство к ПК
- Затем подключите к нему блок питания
Подключите устройство к ПК, а затем подключите к нему блок питания. Вы также можете подключить кабель Ethernet к Moduino ESP32 (если у него есть этот порт).
Подключение должно быть как на фотографиях выше
Найдите путь к порту, который используется для подключения устройства. Это может быть, например: / dev / ttyS1, / dev / ttyUSB0.
Для конвертеров USB путь будет содержать слово USB.
Вы можете подключиться к устройству с помощью программы picocom:
picocom / dev / ttyUSB0 -b 115200
Командная строка устройства похожа на одно из изображений ниже.
Moduino ESP32: см. Здесь
Moduino Pycom: см. Здесь
Шаг 4: Загрузите главную библиотеку 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 одинаковы для обоих устройств.
Они различаются по инициализации.
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 есть метод для каждой функции:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- 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.