Isi kandungan:

ESP32 Modbus Master TCP: 7 Langkah
ESP32 Modbus Master TCP: 7 Langkah

Video: ESP32 Modbus Master TCP: 7 Langkah

Video: ESP32 Modbus Master TCP: 7 Langkah
Video: ESP32 Modbus TCP/IP master reading into array 2024, Jun
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Di kelas ini, anda akan memprogram pemproses ESP32 menjadi Modbus TCP Master.

Kami akan menggunakan dua peranti, yang mengandungi pemproses ini: Moduino ESP32 dan Pycom. Kedua-dua peranti ini berjalan di persekitaran MicroPytthon. Modbus Slave kami akan menjadi komputer PC dengan perisian simulator Modbus berjalan di atasnya.

Anda perlu:

  • Moduino ESP32 atau peranti Moduino Pycom (semak laman web ini untuk mengetahui lebih lanjut mengenai peranti Moduino ESP32 dan ini untuk memeriksa peranti Pycom)
  • PC dengan sistem operasi Linux
  • Port RS-232 / RS-485 di komputer anda atau penukar USB ke RS-232 / RS-485

Langkah 1: Muat turun dan Mulakan Modbus TCP Slave Simulator

Muat turun dan Mulakan Modbus TCP Slave Simulator
Muat turun dan Mulakan Modbus TCP Slave Simulator

Muat turun simulator Modbus Slave dari https://www.modbusdriver.com/diagslave.html. Kemudian buka arkib yang dimuat turun dan bongkar versi untuk sistem operasi Linux.

Jalankan program dari konsol dengan argumen -p:

./diagslave -p

adalah port di mana pelayan Modbus Slave akan berfungsi. Untuk protokol Modbus secara lalai 502, tetapi anda boleh menggunakan yang lain.

Di port Linux di bawah 1024 tidak dapat digunakan oleh program yang dijalankan dari pengguna biasa (bukan hak root).

Ingat port yang anda gunakan. Nilai ini akan diperlukan kemudian.

Langkah 2: Sediakan Komputer Anda untuk Menyambung ke Peranti

Sediakan Komputer Anda untuk Menyambung ke Peranti
Sediakan Komputer Anda untuk Menyambung ke Peranti

Anda memerlukan beberapa program untuk membuat sambungan ke peranti dan menghantar fail ke dalamnya.

Pasang persekitaran dan pip Python (jika anda tidak memilikinya):

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

Pasang picocom:

apt-get pasang picocom

Program ini diperlukan untuk menyambung ke peranti dan melaksanakan perintah padanya. Pasang mpfshell:

memasang pip mpfshell

Program ini membolehkan anda menghantar fail ke peranti.

Anda juga boleh memasangnya dari sumber sumber. Rujuk halaman ini:

Langkah 3: Sediakan Peranti dan Sambungkannya

Sediakan Peranti dan Sambungkan ke dalamnya
Sediakan Peranti dan Sambungkan ke dalamnya
Sediakan Peranti dan Sambungkan ke dalamnya
Sediakan Peranti dan Sambungkan ke dalamnya
Sediakan Peranti dan Sambungkan ke dalamnya
Sediakan Peranti dan Sambungkan ke dalamnya

Untuk menyambungkan peranti Moduino atau Pycom ke PC, anda memerlukan port atau penukar RS-232 / RS-485. Periksa versi peranti anda (jenis port yang digunakannya) dan cari port atau penukar yang sesuai.

  1. Sambungkan peranti ke PC
  2. Kemudian sambungkan bekalan kuasa kepadanya

Sambungkan peranti ke PC dan kemudian sambungkan bekalan kuasa ke dalamnya. Anda juga boleh menyambungkan kabel ethernet ke Moduino ESP32 (jika ia mempunyai port tersebut).

Sambungan harus seperti pada gambar di atas

Cari jalan untuk port, yang digunakan untuk sambungan peranti. Contohnya: / dev / ttyS1, / dev / ttyUSB0.

Untuk penukar usb, jalan akan mengandungi perkataan USB.

Anda boleh menyambung ke peranti dengan program picocom:

picocom / dev / ttyUSB0 -b 115200

Perintah arahan peranti kelihatan serupa dengan salah satu gambar berikut.

Moduino ESP32: Lihat di sini

Moduino Pycom: Lihat di sini

Langkah 4: Muat naik Modbus Master Library

Muat naik Perpustakaan Induk Modbus
Muat naik Perpustakaan Induk Modbus

github.com/pycom/pycom-modbus/Untuk berkomunikasi dengan Modbus Slave, anda memerlukan perpustakaan yang sesuai. Perpustakaan untuk Pycom tidak serasi dengan Moduino. Periksa arahan yang sesuai dengan peranti anda.

Tutup picocom sebelum menghantar fail: tekan Ctrl + A dan kemudian kekunci Ctrl + X.

Perpustakaan uModBus untuk Moduino ESP32 mendasarkan perpustakaan pycom-modbus untuk Moduino Pycom. Ia diubahsuai untuk berfungsi pada peranti ESP32 biasa. Ia juga mempunyai kaedah tutup () tambahan untuk kelas penyambung.

1) Moduino ESP32

Muat turun perpustakaan dari https://github.com/techbase123/micropython-modbus. Buka bungkusan arkib dan hantarkan semua 4 fail ke peranti Moduino.

Gunakan mpfshell untuk memuat naiknya. Jalankan program ini dalam direktori dengan fail tersebut.

Sambungkan ke peranti dengan melaksanakan: INI

ttyUSB0 adalah nama port bersiri tempat peranti disambungkan.

Tukar direktori ke / flash / lib dengan arahan:

cd / flash / lib

Letakkan semua fail dengan arahan:

letakkan uModBusConst.py

meletakkan uModBusFunctions.py meletakkan uModBusTCP.py meletakkan uModBusSerial.py

CONTOH

Kemudian keluar konsol dengan perintah keluar dan mulakan semula peranti dengan butang Reset.

2) Moduino Pycom

Muat turun perpustakaan dari https://github.com/pycom/pycom-modbus/. Buka bungkusan arkib dan hantar kandungan direktori uModbus ke peranti. Gunakan mpfshell untuk memuat naiknya. Jalankan program ini dalam direktori dengan fail tersebut.

Sambungkan ke peranti dengan melaksanakan:

buka ttyUSB0

ttyUSB0 adalah nama port bersiri tempat peranti disambungkan.

Tukar direktori ke / flash / lib, buat direktori uModbus dan masukkan dengan arahan:

cd / flash / libmd uModbus cd uModbus

Letakkan semua fail dengan arahan:

letakkan const.py

meletakkan functions.py meletakkan tcp.py meletakkan serial.py

Kemudian keluar konsol dengan perintah keluar dan mulakan semula peranti dengan butang Reset.

CONTOH

Langkah 5: Sambungkan ke Rangkaian

Sambungkan ke Rangkaian
Sambungkan ke Rangkaian

Perintah untuk mewujudkan hubungan berbeza antara Moduino dan Pycom.

Sambungkan ke peranti dengan picocom untuk melaksanakan perintah yang sesuai. Anda boleh menyambungkan peranti Moduino ke rangkaian melalui wayar atau tanpa wayar. Contoh berikut menganggap bahawa rangkaian anda mempunyai pelayan DHCP yang berfungsi.

Dalam kes lain, peranti tidak akan mendapat alamat IP. Sokongan WiFi tersedia di setiap Moduino. Port Ethernet adalah pilihan dan tidak semua peranti memilikinya.

1) Moduino ESP32

Menyambung ke WiFi

Jalankan arahan berikut pada peranti:

dari netWiFi import netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

Gantikan ESSID dengan nama rangkaian WiFi anda, dan LULUS dengan kata laluannya.

Setelah beberapa lama selepas menjalankan permulaan () anda harus mendapatkan alamat IP yang diberikan ke peranti anda.

Menyambung ke rangkaian Ethernet

Sambungkan peranti ke rangkaian berwayar dengan kabel ethernet.

Kemudian jalankan arahan berikut:

dari netETH import netETHeth = netETH () eth.start ()

Setelah beberapa lama selepas menjalankan permulaan () anda harus mendapatkan alamat IP yang diberikan ke peranti anda.

2) Moduino Pycom

Sambungkan ke WiFi

Jalankan arahan berikut pada peranti:

dari rangkaian import WLANwlan = WLAN (mode = WLAN. STA) jaring = wlan.scan () untuk jaring dalam jaring: if net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) sementara tidak wlan.isconnected (): machine.idle () print ('Sambungan WLAN berjaya!') rehat

Gantikan ESSID dengan nama rangkaian WiFi anda, dan LULUS dengan kata laluannya.

Langkah 6: Permulaan Komunikasi Dengan Modbus Slave

Memulakan Komunikasi Dengan Modbus Slave
Memulakan Komunikasi Dengan Modbus Slave

Perpustakaan Modbus Master serupa untuk kedua-dua peranti

Mereka berbeza-beza dalam permulaan.

1) Permulaan uModBus pada Moduino ESP32

Laksanakan:

dari uModBusTCP import uModBusTCP sebagai TCP

2) Permulaan uModBus di Pycom

Laksanakan:

dari uModbus.tcp import TCP

Buka sambungan

Kemudian buka sambungan dengan:

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

di mana:

  • Alamat IP - ip PC anda dengan simulator Modbus Slave
  • PELABUHAN - pelabuhan Modbus Slave
  • 60 adalah tamat masa

Sekiranya kesalahan berikut berlaku semasa melaksanakan arahan membaca / menulis: CONTOH

laksanakan:

untuk Moduino ESP32:

modbus.close ()

untuk Moduino Pycom:

modbus._sock.close ()

dan buat semula sambungan:

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

Ini penting untuk menutup soket sebelum membuat sambungan. Peranti mempunyai jumlah sambungan soket yang tersedia.

Langkah 7: Baca dan Tulis Daftar

Baca dan Tulis Daftar
Baca dan Tulis Daftar

Modbus menyokong beberapa fungsi untuk membaca dan menulis daftar.

Perpustakaan uModBus mempunyai kaedah untuk setiap fungsi:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. baca_input_register
  5. tulis_single_coil
  6. tulis_single_register

Pertama, mari tuliskan beberapa nilai.

1) Tulis gegelung (func: 5)

Tulis 1 nilai hingga 200 daftar dari hamba 1:

modbus.write_single_coil (1, 200, 0xFF00)

Hujah pertama adalah untuk id hamba, dalam kes kita 1.

Yang kedua ialah nombor pendaftaran dan nilai adalah nilai. Untuk 1 anda mesti meletakkan 0xFF00 di sini. Tulis 0 hingga 201 daftar dari hamba 1:

modbus.write_single_coil (1, 201, 0)

Kaedah ini membenarkan menulis nilai boolean sahaja: 0 atau 1.

2) Tulis daftar (fungsi: 6)

Sekarang tuliskan beberapa nilai integer ke beberapa daftar.

Tuliskan nilai 111 yang ditandatangani untuk mendaftarkan 100 dari hamba 1:

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

Argumen pertama adalah id hamba, nombor pendaftaran kedua dan ketiga adalah nilai baru. Argumen terakhir menentukan apakah nilai harus ditetapkan sebagai nombor yang ditandatangani. Nilai lalai untuknya adalah Benar. Anda tidak perlu menetapkannya.

Tuliskan nilai -457 yang ditandatangani ke 101 daftar dari hamba 1:

modbus.write_single_register (1, 101, -457)

Tulis nilai 50 yang tidak ditandatangani hingga 100 daftar dari hamba 3:

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

Kaedah ini membolehkan menulis nilai integer ke daftar tunggal.

Daftar tunggal boleh mengandungi nilai 16 bit.

Kaedah mengembalikan Benar adalah nilai input adalah sah dan Salah jika tidak. Nilai ditulis walaupun tidak sah (terlalu besar untuk mendaftar)

3) Baca gegelung / input diskrit

Sekarang mari baca nilai boolean yang ditulis. Untuk membaca daftar dengan gegelung fungsi 1, jalankan:

modbus.read_coils (slaveId, register, count) [0: hitung]

Untuk membaca daftar dengan fungsi 2 membaca input diskrit, jalankan:

modbus.read_discrete_inputs (slaveId, register, count) [0: hitung]

di mana:

  • slave-id - id hamba maya (simulator Slave menerima semua id yang sah)
  • daftar - nombor pendaftaran untuk membaca
  • kiraan - jumlah daftar yang akan dibaca (masukkan jumlah yang dikehendaki di kedua tempat)

Kaedah ini mengembalikan array dengan nilai boolean. Setiap nilai sesuai dengan setiap daftar.

Fragmen: [0: count] diperlukan, kerana kaedah ini mengembalikan lebih banyak nilai, daripada hitungan. Ia mengembalikan jumlah nilai yang selalu dibahagikan dengan 8. Nilai tambahan adalah Salah dan tidak sesuai dengan daftar apa pun.

Baca nilai boolean kami dengan kedua kaedah:

modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]

Hasilnya akan seperti ini: CONTOH

Benar merujuk kepada 1 nilai, Salah hingga 0.

4) Baca daftar

Sekarang baca nilai dari daftar yang ditulis dengan 6 fungsi.

Untuk membaca register dengan fungsi baca baca 3, jalankan:

modbus.read_holding_registers (slaveId, register, count, ditandatangani = Benar)

Untuk membaca register dengan fungsi input register 4, jalankan:

modbus.read_input_registers (slaveId, register, count, ditandatangani = Benar)

di mana:

  • slave-id - id hamba maya
  • daftar - nombor pendaftaran untuk membaca
  • kiraan - jumlah daftar yang akan dibaca
  • ditandatangani - menunjukkan sama ada nilai yang dibaca harus dianggap sebagai nombor yang ditandatangani atau tidak. Keadaan lalai: Benar

Nilai kembali adalah tuple dengan jumlah daftar yang diinginkan.

Baca daftar yang ditetapkan pada titik sebelumnya:

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)

Hasilnya seperti dalam tangkapan skrin ini: CONTOH

Pada pelajaran seterusnya anda akan belajar bagaimana membuat Modbus RTU Master pada peranti berkemampuan ESP32.

Disyorkan: