Агуулгын хүснэгт:

ESP32 Modbus Master TCP: 7 алхам
ESP32 Modbus Master TCP: 7 алхам

Видео: ESP32 Modbus Master TCP: 7 алхам

Видео: ESP32 Modbus Master TCP: 7 алхам
Видео: Protocolos seriales de comunicaciones 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 төхөөрөмжийг шалгах боломжтой)
  • Линукс үйлдлийн системтэй компьютер
  • Таны компьютер дээрх RS-232/RS-485 порт эсвэл USB-ээс RS-232/RS-485 руу хөрвүүлэгч

Алхам 1: Modbus TCP Slave Simulator татаж аваад эхлүүлнэ үү

Modbus TCP Slave Simulator -ийг татаж аваад эхлүүлнэ үү
Modbus TCP Slave Simulator -ийг татаж аваад эхлүүлнэ үү

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

Програмыг консолоос -p аргументаар ажиллуулна уу.

./diagslave -p

нь Modbus Slave сервер ажиллах порт юм. Modbus протоколын хувьд энэ нь анхдагчаар 502 байдаг, гэхдээ та өөр нэгийг ашиглаж болно.

Линукс дээр 1024 -аас доош портууд нь ердийн хэрэглэгчээс ажилладаг програмуудад ашиглагддаггүй (root эрх биш).

Та ямар порт ашиглаж байгаагаа санаарай. Энэ утга хожим шаардлагатай болно.

Алхам 2: Компьютерээ төхөөрөмжид холбоход бэлтгэ

Төхөөрөмжид холбогдохын тулд компьютераа бэлтгэ
Төхөөрөмжид холбогдохын тулд компьютераа бэлтгэ

Төхөөрөмжийг холбох, түүнд файл илгээхэд танд зарим програм хэрэгтэй болно.

Python орчин ба пипийг суулгаарай (хэрэв танд байхгүй бол):

apt-get 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 суулгах

Энэ програм нь төхөөрөмжид холбогдох, командыг ажиллуулахад шаардлагатай.

pip суулгах 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 Master номын санг байршуулах

Modbus Master номын санг байршуулах
Modbus Master номын санг байршуулах

github.com/pycom/pycom-modbus/ Modbus Slave-тэй холбогдохын тулд танд зохих номын сан хэрэгтэй. Pycom -ийн номын сан нь Moduino -тэй нийцдэггүй. Таны төхөөрөмжид нийцсэн зааврыг шалгана уу.

Файл илгээхээсээ өмнө пикокомыг хаах: Ctrl+A, дараа нь Ctrl+X товчлууруудыг дарна уу.

Moduino ESP32-д зориулсан uModBus номын сан нь Moduino Pycom-ийн pycom-modbus номын санд суурилдаг. Үүнийг ердийн 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

ЖИШЭЭ

Дараа нь гарах командыг ашиглан консолоос гараад төхөөрөмжийг дахин тохируулах товчийг дарна уу.

2) Moduino Pycom

Номын санг https://github.com/pycom/pycom-modbus/ дээрээс татаж аваарай. Архивыг задалж, uModbus директорын контентыг төхөөрөмж рүү илгээнэ үү. Mpfshell -ийг ашиглан байршуулна уу. Энэ програмыг тэр файлуудын лавлахад ажиллуулна уу.

Дараах үйлдлийг гүйцэтгэх замаар төхөөрөмжтэй холбогдоно уу.

ttyUSB0 -ийг нээнэ үү

ttyUSB0 бол төхөөрөмж холбогдсон цуваа портын нэр юм.

Директорыг /flash /lib болгон өөрчилж, uModbus директорыг үүсгэн дараах тушаалуудыг оруулна уу:

cd /flash /libmd uModbus cd uModbus

Бүх файлуудыг тушаалаар оруулна уу:

const.py тавих

put functions.py тавих tcp.py тавих serial.py

Дараа нь гарах командыг ашиглан консолоос гараад төхөөрөмжийг дахин тохируулах товчийг дарна уу.

ЖИШЭЭ

Алхам 5: Сүлжээнд холбогдоно уу

Сүлжээнд холбогдох
Сүлжээнд холбогдох

Moduino болон Pycom хоёрын хооронд холбоо тогтоох тушаал өөр байна.

Тохирох тушаалуудыг гүйцэтгэхийн тулд пикокомтой төхөөрөмжтэй холбогдоно уу. Та 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 () хэвлэх ('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)

хаана:

  • Modbus Slave симулятор бүхий таны компьютерийн IP хаяг
  • ПОРТ - Модбус боолын боомт
  • 60 бол завсарлага юм

Унших/бичих командыг гүйцэтгэх явцад дараах алдаа гарвал: ЖИШЭЭ

гүйцэтгэх:

Moduino ESP32 -ийн хувьд:

modbus.close ()

Moduino Pycom -ийн хувьд:

modbus._sock.close ()

дараа нь холболтыг дахин үүсгэх:

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

Энэ нь холболтыг дахин үүсгэхээс өмнө залгуурыг хаах нь чухал юм.

Алхам 7: Бүртгэлийг унших, бичих

Бүртгэлийг унших, бичих
Бүртгэлийг унших, бичих

Modbus нь бүртгэлийг унших, бичих хэд хэдэн функцийг дэмждэг.

uModBus номын сан нь функц тус бүрт зориулсан аргатай байдаг:

  1. уншсан_ ороомог
  2. тусдаа_оруулгыг унших
  3. унших_холдинг_бүртгүүлэгчид
  4. унших_оруулах_бүртгэлүүд
  5. бичих_сингл_ ороомог
  6. бичих_сингл_бүртгүүлэх

Нэгдүгээрт, зарим утгыг бичье.

1) Ороомог бичих (функц: 5)

Боол 1 -ээс 200 бүртгэлд 1 утга бичнэ үү:

modbus.write_single_coil (1, 200, 0xFF00)

Эхний аргумент нь боолын id -д зориулагдсан болно, бидний тохиолдолд 1.

Хоёрдугаарт регистрийн дугаар, цангах нь утга юм. 1 -ийн хувьд та энд 0xFF00 -ийг оруулах ёстой. Боол 1 -ээс 0 -ээс 201 хүртэлх бүртгэлийг бичнэ үү:

modbus.write_single_coil (1, 201, 0)

Энэ арга нь зөвхөн логик утгыг бичих боломжийг олгодог: 0 эсвэл 1.

2) Бүртгэл бичих (функц: 6)

Одоо хэд хэдэн регистрт бүхэл тоон утгыг бичээрэй.

Боол 1 -ээс 100 бүртгүүлэхийн тулд гарын үсэг зурсан 111 утгыг бичнэ үү:

modbus.write_single_register (1, 100, 111, Үнэн)

Эхний аргумент нь slave id, хоёр дахь регистрийн дугаар, гурав дахь нь шинэ утга юм. Анхдагч утга нь үнэн юм. Та үүнийг тохируулах шаардлагагүй.

Боол 1 -ээс 101 бүртгэлд гарын үсэг зурсан -457 утгыг бичнэ үү:

modbus.write_single_register (1, 101, -457)

Боол 3 -аас 100 бүртгэлд гарын үсэг зураагүй 50 утгыг бичнэ үү:

modbus.write_single_register (3, 100, 50, Худал)

Энэ арга нь бүхэл тоон утгыг нэг бүртгэлд бичих боломжийг олгодог.

Нэг бүртгэл нь 16 битийн утгыг агуулж болно.

Арга нь True бол оролтын утга хүчинтэй, хэрэв үгүй бол False буцаана. Утга хүчингүй байсан ч бичигдсэн байдаг (бүртгүүлэхэд хэт том)

3) Ороомог/салангид оролтыг уншина уу

Одоо бичсэн логик утгыг уншъя. 1 функцтэй унших ороомогтой бүртгэлийг уншихын тулд дараах зүйлийг хийнэ үү.

modbus.read_coils (slaveId, бүртгүүлэх, тоолох) [0: тоолох]

2 функцтэй бүртгэлийг уншихын тулд дискрет оролтыг уншина уу.

modbus.read_discrete_inputs (slaveId, бүртгүүлэх, тоолох) [0: тоолох]

хаана:

  • slave -id - виртуал боолын ID (Slave симулятор нь хүчинтэй бүх id -ийг хүлээн авдаг)
  • бүртгүүлэх - унших бүртгэлийн дугаар
  • тоолох - унших бүртгэлийн тоо

Эдгээр аргууд нь логик утгатай массивыг буцаана. Утга бүр нь бүртгэл бүрт тохирч байна.

[0: 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, бүртгүүлэх, тоолох, гарын үсэг зурсан = Үнэн)

4 функцтэй регистрүүдийг уншихын тулд оролтын регистрүүдийг уншина уу.

modbus.read_input_registers (slaveId, бүртгүүлэх, тоолох, гарын үсэг зурсан = Үнэн)

хаана:

  • slave -id - виртуал боолын ID
  • бүртгүүлэх - унших бүртгэлийн дугаар
  • тоолох - унших бүртгэлийн тоо
  • гарын үсэг зурсан - уншсан утгыг гарын үсэг зурсан тоо гэж үзэх ёстой эсэхийг заана. Анхдагч төлөв: Үнэн

Буцах утга нь хүссэн тооны бүртгэл бүхий багц юм.

Өмнөх хэсэгт заасан бүртгэлүүдийг уншина уу:

modbus.read_holding_registers (1, 100, 2, Үнэн) modbus.read_input_registers (1, 100, 2, Үнэн) modbus.read_holding_registers (3, 100, 1, Худал)

Үр дүн нь энэ дэлгэцийн агшинд харагдах ёстой: EXAMPLE

Дараагийн хичээлээр та ESP32-ийг идэвхжүүлсэн төхөөрөмж дээр Modbus RTU Master-ийг хэрхэн бүтээх талаар сурах болно.

Зөвлөмж болгож буй: