Daftar Isi:

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, Juni
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Di kelas ini, Anda akan memprogram prosesor ESP32 menjadi Modbus TCP Master.

Kami akan menggunakan dua perangkat, yang berisi prosesor ini: Moduino ESP32 dan Pycom. Kedua perangkat berjalan di lingkungan MicroPytthon. Modbus Slave kami akan menjadi komputer PC dengan perangkat lunak simulator Modbus yang berjalan di atasnya.

Anda akan perlu:

  • Perangkat Moduino ESP32 atau Moduino Pycom (periksa situs web ini untuk mengetahui lebih lanjut tentang perangkat Moduino ESP32 dan ini untuk memeriksa perangkat Pycom)
  • PC dengan sistem operasi Linux
  • Port RS-232/RS-485 di komputer Anda atau konverter USB ke RS-232/RS-485

Langkah 1: Unduh dan Mulai Modbus TCP Slave Simulator

Unduh dan Mulai Modbus TCP Slave Simulator
Unduh dan Mulai Modbus TCP Slave Simulator

Unduh simulator Modbus Slave dari https://www.modbusdriver.com/diagslave.html. Kemudian buka arsip yang diunduh dan buka versi untuk sistem operasi Linux.

Jalankan program dari konsol dengan argumen -p:

./diagslave -p

adalah port tempat server Modbus Slave akan bekerja. Untuk protokol Modbus secara default 502, tetapi Anda dapat menggunakan yang lain.

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

Ingat port apa yang Anda gunakan. Nilai ini akan diperlukan nanti.

Langkah 2: Siapkan Komputer Anda untuk Terhubung ke Perangkat

Siapkan Komputer Anda untuk Terhubung ke Perangkat
Siapkan Komputer Anda untuk Terhubung ke Perangkat

Anda akan memerlukan beberapa program untuk membuat koneksi ke perangkat dan mengirim file ke sana.

Instal lingkungan Python dan pip (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

Instal picocom:

apt-get install picocom

Program ini diperlukan untuk terhubung ke perangkat dan menjalankan perintah di atasnya. Instal mpfshell:

pip instal mpfshell

Program ini memungkinkan Anda untuk mengirim file ke perangkat.

Anda juga dapat menginstalnya dari sumber formulir. Rujuk halaman ini:

Langkah 3: Siapkan Perangkat dan Hubungkan ke Ini

Siapkan Perangkat dan Hubungkan ke Ini
Siapkan Perangkat dan Hubungkan ke Ini
Siapkan Perangkat dan Hubungkan ke Ini
Siapkan Perangkat dan Hubungkan ke Ini
Siapkan Perangkat dan Hubungkan ke Ini
Siapkan Perangkat dan Hubungkan ke Ini

Untuk menghubungkan perangkat Moduino atau Pycom ke PC, Anda memerlukan port atau konverter RS-232/RS-485. Periksa versi perangkat Anda (jenis port yang digunakannya) dan temukan port atau konverter yang sesuai.

  1. Hubungkan perangkat ke PC
  2. Kemudian hubungkan catu daya ke sana

Hubungkan perangkat ke PC dan kemudian hubungkan catu daya ke sana. Anda juga dapat menghubungkan kabel ethernet ke Moduino ESP32 (jika memiliki port tersebut).

Koneksi harus seperti pada foto di atas

Temukan jalur untuk port, yang digunakan untuk koneksi perangkat. Misalnya: /dev/ttyS1, /dev/ttyUSB0.

Untuk konverter usb, jalur akan berisi kata USB.

Anda dapat terhubung ke perangkat dengan program picocom:

picocom /dev/ttyUSB0 -b 115200

Command prompt perangkat terlihat mirip dengan salah satu gambar di bawah ini.

Moduino ESP32: Lihat di sini

Moduino Pycom: Lihat di sini

Langkah 4: Unggah Perpustakaan Master Modbus

Unggah Perpustakaan Master Modbus
Unggah Perpustakaan Master Modbus

github.com/pycom/pycom-modbus/Untuk berkomunikasi dengan Modbus Slave Anda memerlukan perpustakaan yang sesuai. Pustaka untuk Pycom tidak kompatibel dengan Moduino. Periksa instruksi yang sesuai dengan perangkat Anda.

Tutup picocom sebelum mengirim file: tekan Ctrl+A lalu Ctrl+X.

Pustaka uModBus untuk Moduino ESP32 berdasarkan pustaka pycom-modbus untuk Moduino Pycom. Ini dimodifikasi untuk bekerja pada perangkat ESP32 biasa. Ia juga memiliki metode close() tambahan untuk kelas konektor.

1) Moduino ESP32

Unduh perpustakaan dari https://github.com/techbase123/micropython-modbus. Buka paket arsip dan kirim semua 4 file ke perangkat Moduino.

Gunakan mpfshell untuk mengunggahnya. Jalankan program ini di direktori dengan file-file itu.

Hubungkan ke perangkat dengan menjalankan: INI

ttyUSB0 adalah nama port serial tempat perangkat terhubung.

Ubah direktori ke /flash/lib dengan perintah:

cd /flash/lib

Letakkan semua file dengan perintah:

masukkan uModBusConst.py

masukkan uModBusFunctions.py masukkan uModBusTCP.py masukkan uModBusSerial.py

CONTOH

Kemudian keluar dari konsol dengan perintah keluar dan restart perangkat dengan tombol Reset.

2) Moduino Pycom

Unduh perpustakaan dari https://github.com/pycom/pycom-modbus/. Buka paket arsip dan kirim konten direktori uModbus ke perangkat. Gunakan mpfshell untuk mengunggahnya. Jalankan program ini di direktori dengan file-file itu.

Hubungkan ke perangkat dengan menjalankan:

buka ttyUSB0

ttyUSB0 adalah nama port serial tempat perangkat terhubung.

Ubah direktori ke /flash/lib, buat direktori uModbus dan masukkan dengan perintah:

cd /flash/libmd uModbus cd uModbus

Letakkan semua file dengan perintah:

masukkan const.py

letakkan function.py masukkan tcp.py masukkan serial.py

Kemudian keluar dari konsol dengan perintah keluar dan restart perangkat dengan tombol Reset.

CONTOH

Langkah 5: Hubungkan ke Jaringan

Hubungkan ke Jaringan
Hubungkan ke Jaringan

Perintah untuk membuat koneksi berbeda antara Moduino dan Pycom.

Hubungkan ke perangkat dengan picocom untuk menjalankan perintah yang sesuai. Anda dapat menghubungkan perangkat Moduino ke jaringan melalui kabel atau nirkabel. Contoh berikut mengasumsikan bahwa jaringan Anda memiliki server DHCP yang berfungsi.

Dalam kasus lain, perangkat tidak akan mendapatkan alamat IP. Dukungan WiFi tersedia di setiap Moduino. Port Ethernet adalah opsi dan tidak semua perangkat memilikinya.

1) Moduino ESP32

Menghubungkan ke WiFi

Jalankan perintah berikut pada perangkat:

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

Ganti ESSID dengan nama jaringan WiFi Anda, dan PASS dengan kata sandinya.

Setelah beberapa saat setelah menjalankan start() Anda akan mendapatkan alamat IP yang ditetapkan ke perangkat Anda.

Menghubungkan ke jaringan Ethernet

Hubungkan perangkat ke jaringan kabel dengan kabel ethernet.

Kemudian jalankan perintah berikut:

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

Setelah beberapa waktu setelah menjalankan start() Anda akan mendapatkan alamat IP yang ditetapkan ke perangkat Anda.

2) Moduino Pycom

Sambungkan ke WiFi

Jalankan perintah berikut pada perangkat:

dari jaringan impor WLANwlan = WLAN(mode=WLAN. STA) nets = wlan.scan() untuk net di nets:if net.ssid == 'ESSID': print('Network found!') wlan.connect(net.ssid, auth=(net.sec, 'PASS'), timeout=5000) saat tidak wlan.isconnected(): machine.idle() print('Koneksi WLAN berhasil!') break

Ganti ESSID dengan nama jaringan WiFi Anda, dan PASS dengan kata sandinya.

Langkah 6: Inisialisasi Komunikasi Dengan Modbus Slave

Inisialisasi Komunikasi Dengan Modbus Slave
Inisialisasi Komunikasi Dengan Modbus Slave

Pustaka Modbus Master serupa untuk kedua perangkat

Mereka berbeda dalam inisialisasi.

1) Inisialisasi uModBus di Moduino ESP32

Menjalankan:

dari uModBusTCP impor uModBusTCP sebagai TCP

2) Inisialisasi uModBus di Pycom

Menjalankan:

dari uModbus.tcp impor TCP

Buka koneksi

Kemudian buka koneksi dengan:

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

di mana:

  • IP - alamat ip PC Anda dengan simulator Modbus Slave
  • PORT - pelabuhan Modbus Slave
  • 60 adalah batas waktu

Jika kesalahan berikut terjadi selama menjalankan perintah membaca/menulis: CONTOH

menjalankan:

untuk Moduino ESP32:

modbus.close()

untuk Moduino Pycom:

modbus._sock.close()

dan kemudian buat ulang koneksi:

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

Ini penting untuk menutup soket sebelum membuat ulang koneksi. Perangkat memiliki jumlah terbatas dari koneksi soket yang tersedia.

Langkah 7: Baca dan Tulis Register

Baca dan Tulis Register
Baca dan Tulis Register

Modbus mendukung beberapa fungsi untuk membaca dan menulis register.

Pustaka uModBus memiliki metode untuk setiap fungsi:

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

Pertama, mari kita menulis beberapa nilai.

1) Tulis gulungan (fungsi: 5)

Tulis 1 nilai ke 200 register dari slave 1:

modbus.write_single_coil(1, 200, 0xFF00)

Argumen pertama adalah untuk id budak, dalam kasus kami 1.

Kedua adalah nomor register dan yang ketiga adalah nilai. Untuk 1 Anda harus meletakkan 0xFF00 di sini. Tulis 0 hingga 201 register dari slave 1:

modbus.write_single_coil(1, 201, 0)

Metode ini memungkinkan penulisan hanya nilai boolean: 0 atau 1.

2) Tulis register (fungsi: 6)

Sekarang tulis beberapa nilai integer ke beberapa register.

Tulis nilai 111 yang ditandatangani untuk mendaftarkan 100 dari budak 1:

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

Argumen pertama adalah id budak, nomor register kedua dan ketiga adalah nilai baru. Argumen terakhir mendefinisikan apakah nilai harus ditetapkan sebagai nomor yang ditandatangani. Nilai default untuk itu adalah True. Anda tidak perlu mengaturnya.

Tulis nilai -457 yang ditandatangani ke 101 register dari slave 1:

modbus.write_single_register(1, 101, -457)

Tulis tidak ditandatangani nilai 50 ke 100 register dari budak 3:

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

Metode ini memungkinkan penulisan nilai integer ke register tunggal.

Register tunggal dapat berisi nilai 16 bit.

Metode pengembalian True adalah nilai input valid dan False jika tidak. Nilai ditulis meskipun tidak valid (terlalu besar untuk mendaftar)

3) Baca koil/input diskrit

Sekarang mari kita baca nilai boolean tertulis. Untuk membaca register dengan fungsi 1 read coil, jalankan:

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

Untuk membaca register dengan fungsi 2 baca input diskrit, jalankan:

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

di mana:

  • slave-id - id dari budak virtual (Slave simulator menerima semua id yang valid)
  • register - nomor register untuk membaca
  • count - jumlah register yang akan dibaca (letakkan jumlah yang diinginkan di kedua tempat)

Metode ini mengembalikan array dengan nilai boolean. Setiap nilai sesuai dengan setiap register.

Fragmen: [0:count] diperlukan, karena metode ini mengembalikan lebih banyak nilai, daripada hitungan. Ia selalu mengembalikan jumlah nilai yang habis dibagi 8. Nilai tambahan salah dan tidak sesuai dengan register mana pun.

Baca nilai boolean kami dengan kedua metode:

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

Hasilnya akan seperti ini: CONTOH

Benar mengacu pada 1 nilai, Salah ke 0.

4) Baca register

Sekarang baca nilai dari register yang ditulis dengan 6 fungsi.

Untuk membaca register dengan fungsi 3 read holding registers, jalankan:

modbus.read_holding_registers(slaveId, register, count, signed=True)

Untuk membaca register dengan fungsi 4 membaca register input, jalankan:

modbus.read_input_registers(slaveId, register, count, signed=True)

di mana:

  • slave-id - id budak virtual
  • register - nomor register untuk membaca
  • count - jumlah register yang akan dibaca
  • ditandatangani - menunjukkan apakah nilai baca harus diperlakukan sebagai angka yang ditandatangani atau tidak. Status default: Benar

Nilai kembalian adalah tuple dengan jumlah register yang diinginkan.

Baca register yang diatur pada poin sebelumnya:

modbus.read_holding_registers(1, 100, 2, Benar)modbus.read_input_registers(1, 100, 2, Benar)modbus.read_holding_registers(3, 100, 1, Salah)modbus.read_input_registers(3, 100, 1, Salah)

Hasilnya akan terlihat seperti di tangkapan layar ini: CONTOH

Dalam pelajaran berikutnya Anda akan belajar cara membuat Modbus RTU Master di perangkat yang mendukung ESP32.

Direkomendasikan: