Съдържание:

ESP32 Modbus Master TCP: 7 стъпки
ESP32 Modbus Master TCP: 7 стъпки

Видео: ESP32 Modbus Master TCP: 7 стъпки

Видео: ESP32 Modbus Master TCP: 7 стъпки
Видео: TUTORIAL: How to make MODBUS work with ESP32 - Arduino - RS485 - Part 1 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 Slave Simulator

Изтеглете и стартирайте Modbus TCP Slave Simulator
Изтеглете и стартирайте 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 порт или конвертор. Проверете версията на вашето устройство (кой тип порт използва) и намерете подходящ порт или конвертор.

  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

ПРИМЕР

След това излезте от конзолата с команда за изход и рестартирайте устройството с бутона 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 Slave
Инициализирайте комуникацията с 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 има метод за всяка функция:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. 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.

Препоръчано: