Мазмуну:

ESP32 Modbus Master TCP: 7 кадам
ESP32 Modbus Master TCP: 7 кадам

Video: ESP32 Modbus Master TCP: 7 кадам

Video: ESP32 Modbus Master TCP: 7 кадам
Video: Arduino 1.4 Master Scada - LapshinLAB - OPC - SCADA 2024, Ноябрь
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Бул класста сиз ESP32 процессорун Modbus TCP Master деп программалайсыз.

Биз бул процессорду камтыган эки түзмөктү колдонобуз: Moduino ESP32 жана Pycom. Эки түзмөк тең MicroPytthon чөйрөсүндө иштеп жатат. Биздин Modbus Slave анын үстүндө иштеп жаткан Modbus симулятор программасы бар PC компьютери болот.

Сага керек болот:

  • Moduino ESP32 же Moduino Pycom түзмөгү (Moduino ESP32 түзмөгү жөнүндө көбүрөөк билүү үчүн бул сайтты караңыз жана бул Pycom түзмөгүн текшерүү үчүн)
  • Linux операциялык системасы бар компьютер
  • Компьютериңиздеги RS-232/RS-485 порт же RS-232/RS-485 конвертери

1 -кадам: Modbus TCP Slave Simulator жүктөп алып баштаңыз

Modbus TCP Slave Simulator жүктөп алыңыз жана баштаңыз
Modbus TCP Slave Simulator жүктөп алыңыз жана баштаңыз

Http://www.modbusdriver.com/diagslave.html тартып Modbus Slave симуляторун жүктөп алыңыз. Андан кийин Linux иштетүү тутуму үчүн жүктөлгөн архивди ачыңыз жана ачыңыз.

Программаны -p аргументи менен консолдон иштетиңиз:

./diagslave -p

Modbus Slave сервери иштей турган порт. Modbus протоколу үчүн бул демейки 502, бирок башкасын колдонсоңуз болот.

Linux портторунда 1024 астындагы программаларды кадимки колдонуучудан иштетилген программалар колдоно албайт (тамыры артыкчылыктары эмес).

Кандай портту колдонуп жатканыңызды унутпаңыз. Бул баа кийинчерээк керек болот.

2 -кадам: Компьютериңизди түзмөккө туташууга даярдаңыз

Компьютериңизди түзмөккө туташууга даярдаңыз
Компьютериңизди түзмөккө туташууга даярдаңыз

Түзмөккө туташуу жана ага файлдарды жөнөтүү үчүн сизге кээ бир программалар керек болот.

Python чөйрөсүн жана пипти орнотуңуз (эгер сизде жок болсо):

apt-get install python3

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

Пикокомду орнотуу:

apt-get picocom орнотуу

Бул программа түзмөккө туташуу жана андагы буйруктарды аткаруу үчүн керек.

mpfshell орнотуу

Бул программа файлдарды түзмөккө жөнөтүүгө мүмкүндүк берет.

Сиз ошондой эле аны булактардан орното аласыз. Бул баракчага кайрылыңыз:

3 -кадам: Түзмөктү даярдоо жана ага туташуу

Түзмөктү даярдап, ага туташыңыз
Түзмөктү даярдап, ага туташыңыз
Түзмөктү даярдап, ага туташыңыз
Түзмөктү даярдап, ага туташыңыз
Түзмөктү даярдап, ага туташыңыз
Түзмөктү даярдап, ага туташыңыз

Moduino же Pycom түзмөгүн PCке туташтыруу үчүн сизге RS-232/RS-485 порт же конвертер керек. Түзмөгүңүздүн версиясын текшериңиз (кайсы порттун түрү колдонулат) жана ылайыктуу портту же алмаштыргычты табыңыз.

  1. ПКге түзмөктү туташтыруу
  2. Андан кийин ага электр энергиясын туташтырыңыз

Аспапты компьютерге туташтырып, анан ага электр энергиясын туташтырыңыз. Ошондой эле Ethernet кабелин Moduino ESP32ге туташтырсаңыз болот (эгерде ал порт болсо).

Байланыш жогорудагы сүрөттөрдөгүдөй болушу керек

Түзмөктү туташтыруу үчүн колдонулган порттун жолун табыңыз, мисалы: /dev /ttyS1, /dev /ttyUSB0.

USB конвертерлери үчүн жолдо USB сөзү камтылган.

Пикоком программасы менен түзмөккө туташа аласыз:

picocom /dev /ttyUSB0 -b 115200

Түзмөктүн буйругу төмөнкү сүрөттөрдүн бирине окшош.

Moduino ESP32: Бул жерден караңыз

Moduino Pycom: Бул жерден караңыз

4 -кадам: Modbus Master китепканасын жүктөө

Modbus Master китепканасын жүктөө
Modbus Master китепканасын жүктөө

github.com/pycom/pycom-modbus/ Modbus Slave менен баарлашуу үчүн сизге тиешелүү китепкана керек. Pycom үчүн китепканалар Moduino менен шайкеш келбейт. Түзмөгүңүзгө туура келген нускамаларды текшериңиз.

Файлдарды жөнөтүүдөн мурун picocomду жабыңыз: Ctrl+A, андан кийин Ctrl+X баскычтарын басыңыз.

Moduino ESP32 үчүн uModBus китепканасы Moduino Pycom үчүн pycom-modbus китепканасына негизделген. Бул кадимки ESP32 түзмөгүндө иштөө үчүн өзгөртүлгөн. Ошондой эле туташтыргыч класстар үчүн кошумча жабуу () ыкмалары бар.

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 (режим = WLAN. STA) сетка = wlan.scan () тордо тор үчүн: эгер net.ssid == 'ESSID': басып чыгаруу ('Тармак табылды!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) wlan.isconnected эмес (): machine.idle () print ('WLAN байланышы ийгиликтүү!') тыныгуу

ESSIDди WiFi тармагыңыздын атына алмаштырыңыз, жана сырсөзүңүздү PASS.

6 -кадам: Modbus Slave менен байланышты баштоо

Modbus Slave менен байланышты баштаңыз
Modbus Slave менен байланышты баштаңыз

Modbus Master китепканалары эки түзмөк үчүн окшош

Алар баштоодо айырмаланат.

1) Moduino ESP32де uModBusту баштоо

Аткаруу:

uModBusTCPден uModBusTCPти TCP катары импорттоо

2) Pycomдо uModBusту баштоо

Аткаруу:

uModbus.tcpден TCP импорттоо

Ачык туташуу

Андан кийин туташууну ачыңыз:

modbus = TCP ('IP', PORT, 60)

кайда:

  • IP - Modbus Slave симулятору менен компьютериңиздин IP дареги
  • ПОРТ - 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 регистрге 1 маанини жазыңыз:

modbus.write_single_coil (1, 200, 0xFF00)

Биринчи аргумент кул id үчүн, биздин учурда 1.

Экинчиси - регистрдик номер жана суусоо - бул баалуулук. 1 үчүн бул жерге 0xFF00 коюш керек. 0дон 201ге чейин каттоону 1 -кулдан жазыңыз:

modbus.write_single_coil (1, 201, 0)

Бул ыкма логикалык маанилерди жазууга мүмкүндүк берет: 0 же 1.

2) Жазуу реестрлери (func: 6)

Эми бир нече регистрлерге бүтүн сандарды жазыңыз.

Кол 1ден 100 каттоо үчүн кол коюлган 111 маанини жазыңыз:

modbus.write_single_register (1, 100, 111, True)

Биринчи аргумент - кул id, экинчи регистр номери, үчүнчүсү - жаңы маани. Акыркы аргумент маани кол коюлган номер катары коюлушу керектигин аныктайт. Ал үчүн демейки мааниси True. Аны орнотуунун кажети жок.

1 -кулдан 101 каттоого кол коюлган -457 маанисин жазыңыз:

modbus.write_single_register (1, 101, -457)

3 -кулдан 100 регистрге кол коюлган эмес 50 маанини жазыңыз:

modbus.write_single_register (3, 100, 50, False)

Бул ыкма бүтүндөй сандык баалуулуктарды бирдиктүү реестрге жазууга мүмкүндүк берет.

Бир регистр 16 биттик маанини камтышы мүмкүн.

Метод кайтарат True - бул кирүү мааниси жарактуу, эгер жок болсо - жалган. Мааниси жараксыз болсо да жазылат (каттоо үчүн өтө чоң)

3) Катушкаларды/дискреттик киргизүүлөрдү окуу

Эми жазылган логикалык баалуулуктарды окуп көрөлү. Окуу үчүн 1 функциясы бар регистрди окуу үчүн, аткарыңыз:

modbus.read_coils (slaveId, каттоо, эсептөө) [0: count]

2 функциясы бар регистрди окуу үчүн дискреттик киргизүүнү окуу үчүн, аткарыңыз:

modbus.read_discrete_inputs (slaveId, регистрация, саноо) [0: count]

кайда:

  • slave -id - виртуалдык кулдун идентификатору (Кул симулятору бардык жарактуу идентификаторлорду кабыл алат)
  • регистр - окуу үчүн каттоо номери
  • эсептөө - окула турган реестрлердин саны (эки жерге каалаган сумманы коюңуз)

Бул ыкмалар массивди логикалык маанилер менен кайтарат. Ар бир маани ар бир реестрге туура келет.

Фрагмент: [0: 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)

Жыйынтыктар бул скриншотто окшош болушу керек: EXAMPLE

Кийинки сабакта сиз ESP32 иштетилген түзмөктө Modbus RTU Master түзүүнү үйрөнөсүз.

Сунушталууда: