Daftar Isi:
- Langkah 1: Unduh dan Mulai Modbus TCP Slave Simulator
- Langkah 2: Siapkan Komputer Anda untuk Terhubung ke Perangkat
- Langkah 3: Siapkan Perangkat dan Hubungkan ke Ini
- Langkah 4: Unggah Perpustakaan Master Modbus
- Langkah 5: Hubungkan ke Jaringan
- Langkah 6: Inisialisasi Komunikasi Dengan Modbus Slave
- Langkah 7: Baca dan Tulis Register
Video: ESP32 Modbus Master TCP: 7 Langkah
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
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 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
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
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.
- Hubungkan perangkat ke PC
- 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
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
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
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
Modbus mendukung beberapa fungsi untuk membaca dan menulis register.
Pustaka uModBus memiliki metode untuk setiap fungsi:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- tulis_single_coil
- 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.