Съдържание:
- Стъпка 1: Изтеглете и стартирайте Modbus TCP Slave Simulator
- Стъпка 2: Подгответе компютъра си да се свърже с устройството
- Стъпка 3: Подгответе устройството и се свържете с него
- Стъпка 4: Качете основната библиотека на Modbus
- Стъпка 5: Свържете се с мрежата
- Стъпка 6: Инициализирайте комуникацията с Modbus Slave
- Стъпка 7: Четене и запис на регистрите
Видео: ESP32 Modbus Master TCP: 7 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
В този клас ще програмирате 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 Slave Simulator
Изтеглете Modbus Slave simulator от https://www.modbusdriver.com/diagslave.html, След това отворете изтегления архив и разопаковайте версията за операционната система Linux.
Стартирайте програмата от конзолата с -p аргумент:
./diagslave -p
е порт, на който ще работи Modbus Slave сървърът. За протокол 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 инсталирайте 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
ПРИМЕР
След това излезте от конзолата с команда за изход и рестартирайте устройството с бутона 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
Свързване към WiFi
Изпълнете следните команди на устройството:
от netWiFi внос netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
Заменете ESSID с името на вашата WiFi мрежа и PASS с парола за него.
След известно време след изпълнение на start () трябва да получите IP адрес, който е присвоен на вашето устройство.
Свързване към Ethernet мрежа
Свържете устройството към кабелна мрежа с Ethernet кабел.
След това изпълнете следните команди:
от netETH внос netETHeth = netETH () eth.start ()
След известно време след изпълнение на start () трябва да получите IP адрес, който е присвоен на вашето устройство.
2) Moduino Pycom
Свържете се с WiFi
Изпълнете следните команди на устройството:
от импортиране на мрежа WLANwlan = WLAN (mode = WLAN. STA) nets = wlan.scan () за мрежа в мрежи: if net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), таймаут = 5000), докато не е wlan.isconnected (): machine.idle () print ('WLAN връзката е успешна!') прекъсване
Заменете ESSID с името на вашата WiFi мрежа и PASS с парола за него.
Стъпка 6: Инициализирайте комуникацията с Modbus Slave
Библиотеките на Modbus Master са сходни и за двете устройства
Те се различават по инициализация.
1) Инициализирайте uModBus на Moduino ESP32
Изпълни:
от uModBusTCP импортирайте uModBusTCP като TCP
2) Инициализирайте uModBus на Pycom
Изпълни:
от uModbus.tcp импортиране на TCP
Отворена връзка
След това отворете връзката с:
modbus = TCP ('IP', PORT, 60)
където:
- IP - ip адрес на вашия компютър със Modbus Slave симулатор
- PORT - пристанище на Modbus Slave
- 60 е таймаут
Ако по време на изпълнение на команди за четене/запис възникне следната грешка: ПРИМЕР
изпълни:
за Moduino ESP32:
modbus.close ()
за Moduino Pycom:
modbus._sock.close ()
и след това пресъздайте връзката:
modbus = TCP ('IP', PORT, 60)
Това е важно да затворите гнездото, преди да пресъздадете връзката. Устройството има ограничено количество налична връзка към гнездото.
Стъпка 7: Четене и запис на регистрите
Modbus поддържа няколко функции за четене и запис на регистри.
Библиотеката uModBus има метод за всяка функция:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- write_single_register
Първо, нека напишем някои стойности.
1) Пишете бобини (func: 5)
Запишете 1 стойност в 200 регистър от slave 1:
modbus.write_single_coil (1, 200, 0xFF00)
Първият аргумент е за slave ID, в нашия случай 1.
На второ място е регистърният номер, а третият е стойност. За 1 трябва да поставите 0xFF00 тук. Запишете 0 до 201 регистър от slave 1:
modbus.write_single_coil (1, 201, 0)
Този метод позволява писане само на булеви стойности: 0 или 1.
2) Пишете регистри (func: 6)
Сега напишете някои цели числа в няколко регистри.
Напишете подписана стойност 111, за да регистрирате 100 от slave 1:
modbus.write_single_register (1, 100, 111, True)
Първият аргумент е подчинен идентификатор, вторият регистър номер и третият е нова стойност. Последният аргумент определя дали стойността трябва да бъде зададена като подписан номер. Стойността по подразбиране за него е True. Не е необходимо да го настройвате.
Запишете подписана стойност -457 в 101 регистър от slave 1:
modbus.write_single_register (1, 101, -457)
Запишете неподписана стойност 50 към 100 регистър от slave 3:
modbus.write_single_register (3, 100, 50, False)
Този метод позволява записване на цели числа в един регистър.
Единичният регистър може да съдържа 16 битови стойности.
Методът връща True, ако входната стойност е валидна и False, ако не. Стойността се записва дори ако е невалидна (твърде голяма за регистър)
3) Четене на бобини/дискретни входове
Сега нека прочетем записани булеви стойности. За да прочетете регистър с функция 1 четене на намотка, изпълнете:
modbus.read_coils (slaveId, регистър, брой) [0: брой]
За да прочетете регистър с функция 2 четене на дискретен вход, изпълнете:
modbus.read_discrete_inputs (slaveId, register, count) [0: count]
където:
- slave -id - id на виртуален slave (Slave simulator приема всички валидни идентификатори)
- регистър - регистрационен номер за четене
- count - количество регистри за четене (поставете желаното количество и на двете места)
Тези методи връщат масив с логически стойности. Всяка стойност съответства на всеки регистър.
Фрагментът: [0: count] е необходим, тъй като този метод връща повече стойности, отколкото count. Той винаги връща количество стойности, които са делими на 8. Допълнителните стойности са False и не съответстват на никакъв регистър.
Прочетете нашите логически стойности с двата метода:
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
Резултатът ще бъде такъв: ПРИМЕР
True се отнася за 1 стойност, False за 0.
4) Прочетете регистрите
Сега прочетете стойности от регистри, написани с функция 6.
За да прочетете регистри с функция 3, прочетете регистрите за задържане, изпълнете:
modbus.read_holding_registers (slaveId, регистър, брой, подписан = Вярно)
За да четете регистри с функция 4 четене на входни регистри, изпълнете:
modbus.read_input_registers (slaveId, регистър, брой, подписан = Вярно)
където:
- slave -id - идентификатор на виртуален роб
- регистър - регистрационен номер за четене
- count - количество регистри, които трябва да бъдат прочетени
- подписан - показва дали стойностите за четене трябва да се третират като подписани номера или не. Състояние по подразбиране: Истина
Връщаната стойност е кортеж с желаното количество регистри.
Прочетете регистрите, зададени в предишната точка:
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 Master на устройство, поддържащо ESP32.
Препоръчано:
Индустриален HMI и Arduinos в MODBUS RTU: 4 стъпки
Индустриален HMI и Arduinos в MODBUS RTU: В тази инструкция ще опиша пример за комуникация между индустриален HMI (COOLMAY MT6070H, 150EUROS), Arduino CLONE DIY (10EUROS) и Arduino UNO (10EUROS). Мрежата ще работи по специален и здрав и индустриален протокол
Modbus TCP комуникация между Arduino и индустриални устройства: 3 стъпки
Modbus TCP комуникация между Arduino и индустриални устройства: Индустриален начин за управление на Arduino платка с индустриален HMI и свързване към индустриална мрежа с Modbus TCP комуникация
Първи стъпки с ESP32 - Инсталиране на платки ESP32 в Arduino IDE - ESP32 Blink Code: 3 стъпки
Първи стъпки с ESP32 | Инсталиране на платки ESP32 в Arduino IDE | ESP32 Blink Code: В тази инструкция ще видим как да започнем работа с esp32 и как да инсталираме esp32 дъски в Arduino IDE и ще програмираме esp 32 да изпълнява мигащ код, използвайки arduino ide
TCP/IP връзка през GPRS: Как да изпращате данни към сървър с помощта на модул SIM900A: 4 стъпки
TCP/IP връзка през GPRS: Как да изпращате данни към сървър с помощта на модул SIM900A: В този урок ще ви разкажа как да изпращате данни към TCP сървър, използвайки модул sim900. Също така ще видим как можем да получаваме данни от сървър до клиент (GSM модул)
Измервател PZEM-004 + ESP8266 & Платформа IoT възел-ЧЕРВЕН и Modbus TCP/IP: 7 стъпки
Измервател PZEM-004 + ESP8266 & Платформа IoT Node-RED & Modbus TCP/IP: При тази възможност ще интегрираме нашия измервател на активна мощност или консумация на електроенергия, Pzem-004-Peacefair с платформата за интеграция на IoT NED-RED, използвана в предишни уроци, ще използваме модул ESP8266, конфигуриран като Modbus TCP / IP подчинен, по -късно