Πίνακας περιεχομένων:
- Βήμα 1: Λήψη και εκκίνηση του Modbus TCP Slave Simulator
- Βήμα 2: Προετοιμάστε τον υπολογιστή σας για σύνδεση με τη συσκευή
- Βήμα 3: Προετοιμάστε τη συσκευή και συνδεθείτε σε αυτήν
- Βήμα 4: Ανεβάστε την κύρια βιβλιοθήκη Modbus
- Βήμα 5: Συνδεθείτε στο Δίκτυο
- Βήμα 6: Αρχικοποιήστε την επικοινωνία με το Modbus Slave
- Βήμα 7: Ανάγνωση και εγγραφή μητρώων
Βίντεο: ESP32 Modbus Master TCP: 7 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Σε αυτήν την τάξη, θα προγραμματίσετε τον επεξεργαστή ESP32 να είναι Modbus TCP Master.
Θα χρησιμοποιήσουμε δύο συσκευές, οι οποίες περιέχουν αυτόν τον επεξεργαστή: το Moduino ESP32 και το Pycom. Και οι δύο συσκευές λειτουργούν σε περιβάλλον MicroPytthon. Το Modbus Slave θα είναι υπολογιστής με λογισμικό προσομοιωτή Modbus που λειτουργεί σε αυτό.
Θα χρειαστείτε:
- Moduino ESP32 ή συσκευή Moduino Pycom (ελέγξτε αυτόν τον ιστότοπο για να μάθετε περισσότερα σχετικά με τη συσκευή Moduino ESP32 και αυτήν για να ελέγξετε τη συσκευή Pycom)
- Η / Υ με λειτουργικό σύστημα Linux
- Θύρα RS-232/RS-485 στον υπολογιστή σας ή μετατροπέα USB σε RS-232/RS-485
Βήμα 1: Λήψη και εκκίνηση του Modbus TCP Slave Simulator
Κατεβάστε τον προσομοιωτή Modbus Slave από τη διεύθυνση https://www.modbusdriver.com/diagslave.html. Στη συνέχεια, ανοίξτε τη λήψη αρχείου λήψης και αποσυσκευάστε το για λειτουργικό σύστημα Linux.
Εκτελέστε το πρόγραμμα από την κονσόλα με το όρισμα -p:
./diagslave -σ
είναι μια θύρα όπου θα λειτουργεί ο διακομιστής Modbus Slave. Για το πρωτόκολλο Modbus είναι από προεπιλογή 502, αλλά μπορείτε να χρησιμοποιήσετε ένα άλλο.
Σε θύρες Linux κάτω από 1024 δεν μπορούν να χρησιμοποιηθούν από προγράμματα που εκτελούνται από κανονικό χρήστη (όχι δικαιώματα root).
Θυμηθείτε ποια θύρα χρησιμοποιείτε. Αυτή η τιμή θα είναι απαραίτητη αργότερα.
Βήμα 2: Προετοιμάστε τον υπολογιστή σας για σύνδεση με τη συσκευή
Θα χρειαστείτε κάποια προγράμματα για σύνδεση με τη συσκευή και αποστολή αρχείων σε αυτήν.
Εγκαταστήστε το περιβάλλον Python και το pip (εάν δεν το έχετε):
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
Εγκατάσταση picocom:
apt-get install picocom
Αυτό το πρόγραμμα είναι απαραίτητο για τη σύνδεση στη συσκευή και την εκτέλεση εντολών σε αυτήν. Εγκαταστήστε το mpfshell:
pip εγκατάσταση mpfshell
Αυτό το πρόγραμμα σάς επιτρέπει να στέλνετε αρχεία στη συσκευή.
Μπορείτε επίσης να το εγκαταστήσετε από πηγές. Ανατρέξτε σε αυτήν τη σελίδα:
Βήμα 3: Προετοιμάστε τη συσκευή και συνδεθείτε σε αυτήν
Για να συνδέσετε τη συσκευή Moduino ή Pycom στον υπολογιστή, χρειάζεστε θύρα ή μετατροπέα RS-232/RS-485. Ελέγξτε την έκδοση της συσκευής σας (ποιος τύπος θύρας χρησιμοποιεί) και βρείτε την κατάλληλη θύρα ή μετατροπέα.
- Συνδέστε τη συσκευή στον υπολογιστή
- Στη συνέχεια, συνδέστε το τροφοδοτικό σε αυτό
Συνδέστε τη συσκευή στον υπολογιστή και, στη συνέχεια, συνδέστε την τροφοδοσία σε αυτήν. Μπορείτε επίσης να συνδέσετε καλώδιο ethernet στο Moduino ESP32 (εάν διαθέτει αυτήν τη θύρα).
Η σύνδεση θα πρέπει να είναι όπως στις παραπάνω φωτογραφίες
Βρείτε τη διαδρομή για τη θύρα, η οποία χρησιμοποιείται για τη σύνδεση συσκευής. Μπορεί να είναι για παράδειγμα: /dev /ttyS1, /dev /ttyUSB0.
Για μετατροπείς usb, η διαδρομή θα περιέχει λέξη USB.
Μπορείτε να συνδεθείτε στη συσκευή με πρόγραμμα picocom:
picocom /dev /ttyUSB0 -b 115200
Η γραμμή εντολών της συσκευής μοιάζει με μία από αυτές τις παρακάτω εικόνες.
Moduino ESP32: Δείτε εδώ
Moduino Pycom: Δείτε εδώ
Βήμα 4: Ανεβάστε την κύρια βιβλιοθήκη Modbus
github.com/pycom/pycom-modbus/Για να επικοινωνήσετε με το Modbus Slave χρειάζεστε κατάλληλη βιβλιοθήκη. Οι βιβλιοθήκες για την Pycom δεν είναι συμβατές με το Moduino. Ελέγξτε τις οδηγίες που συμμορφώνονται με τη συσκευή σας.
Κλείστε το picocom πριν από την αποστολή αρχείων: πατήστε τα πλήκτρα Ctrl+A και στη συνέχεια Ctrl+X.
Βιβλιοθήκη uModBus για Moduino ESP32 με βάση τη βιβλιοθήκη pycom-modbus για το Moduino Pycom. Έχει τροποποιηθεί για να λειτουργεί σε κανονική συσκευή 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
ΠΑΡΑΔΕΙΓΜΑ
Στη συνέχεια, βγείτε από την κονσόλα με την εντολή exit και κάντε επανεκκίνηση της συσκευής με το κουμπί 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
Στη συνέχεια, βγείτε από την κονσόλα με την εντολή exit και κάντε επανεκκίνηση της συσκευής με το κουμπί 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 με τον κωδικό πρόσβασής του.
Μετά από κάποιο χρονικό διάστημα μετά την εκτέλεση της εκκίνησης (), θα πρέπει να λάβετε μια διεύθυνση IP που εκχωρήθηκε στη συσκευή σας.
Σύνδεση σε δίκτυο Ethernet
Συνδέστε τη συσκευή σε ενσύρματο δίκτυο με καλώδιο ethernet.
Στη συνέχεια, εκτελέστε τις ακόλουθες εντολές:
από netETH εισαγωγή netETHeth = netETH () eth.start ()
Μετά από κάποιο χρονικό διάστημα μετά την εκτέλεση της εκκίνησης (), θα πρέπει να λάβετε τη διεύθυνση IP που εκχωρήθηκε στη συσκευή σας.
2) Moduino Pycom
Συνδεθείτε στο WiFi
Εκτελέστε τις ακόλουθες εντολές στη συσκευή:
από εισαγωγή δικτύου WLANwlan = WLAN (mode = WLAN. STA) δίκτυα = wlan.scan () για δίκτυα σε δίκτυα: εάν net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) ενώ δεν wlan.isconnected (): machine.idle () print ('' WLAN επιτυχημένη σύνδεση! ') break
Αντικαταστήστε το ESSID με το όνομα του δικτύου WiFi και το PASS με τον κωδικό πρόσβασής του.
Βήμα 6: Αρχικοποιήστε την επικοινωνία με το Modbus Slave
Οι βιβλιοθήκες Modbus Master είναι παρόμοιες και για τις δύο συσκευές
Διαφέρουν ως προς την αρχικοποίηση.
1) Αρχικοποιήστε το uModBus στο Moduino ESP32
Εκτέλεση:
από uModBusTCP εισαγωγή uModBusTCP ως TCP
2) Αρχικοποιήστε το uModBus στο Pycom
Εκτέλεση:
από το uModbus.tcp εισαγωγή TCP
Άνοιγμα σύνδεσης
Στη συνέχεια, ανοίξτε τη σύνδεση με:
modbus = TCP ("IP", PORT, 60)
όπου:
- IP - διεύθυνση IP του υπολογιστή σας με προσομοιωτή Modbus Slave
- PORT - λιμάνι του Modbus Slave
- Το 60 είναι τάιμ άουτ
Εάν προκύψει το ακόλουθο σφάλμα κατά την εκτέλεση εντολών ανάγνωσης/εγγραφής: ΠΑΡΑΔΕΙΓΜΑ
εκτέλεση:
για το Moduino ESP32:
modbus.close ()
για το Moduino Pycom:
modbus._sock.close ()
και στη συνέχεια να δημιουργήσετε ξανά τη σύνδεση:
modbus = TCP ("IP", PORT, 60)
Αυτό είναι σημαντικό να κλείσετε την πρίζα πριν την αναδημιουργία της σύνδεσης. Η συσκευή έχει περιορισμένο αριθμό διαθέσιμων συνδέσεων.
Βήμα 7: Ανάγνωση και εγγραφή μητρώων
Το Modbus υποστηρίζει διάφορες λειτουργίες για ανάγνωση και εγγραφή καταχωρητών.
Η βιβλιοθήκη uModBus έχει μέθοδο για κάθε συνάρτηση:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- write_single_register
Πρώτον, ας γράψουμε μερικές τιμές.
1) Γράψτε πηνία (func: 5)
Γράψτε 1 τιμή σε 200 καταχωρήστε από το slave 1:
modbus.write_single_coil (1, 200, 0xFF00)
Το πρώτο επιχείρημα είναι για το slave id, στην περίπτωσή μας 1.
Το δεύτερο είναι ο αριθμός μητρώου και το thirs είναι μια τιμή. Για 1 πρέπει να βάλετε 0xFF00 εδώ. Γράψτε 0 έως 201 μητρώο από το slave 1:
modbus.write_single_coil (1, 201, 0)
Αυτή η μέθοδος επιτρέπει την εγγραφή μόνο boolean τιμών: 0 ή 1.
2) Γράψτε καταχωρητές (func: 6)
Τώρα γράψτε μερικές ακέραιες τιμές σε πολλούς καταχωρητές.
Γράψτε υπογεγραμμένη τιμή 111 για να καταχωρήσετε 100 από το slave 1:
modbus.write_single_register (1, 100, 111, True)
Το πρώτο όρισμα είναι αναγνωριστικό σκλάβου, ο δεύτερος αριθμός καταχωρητή και το τρίτο είναι νέα τιμή. Το τελευταίο όρισμα ορίζει εάν η τιμή πρέπει να οριστεί ως υπογεγραμμένος αριθμός. Η προεπιλεγμένη τιμή είναι True. Δεν χρειάζεται να το ρυθμίσετε.
Γράψτε υπογεγραμμένη τιμή -457 σε 101 εγγραφή από τη σκλάβη 1:
modbus.write_single_register (1, 101, -457)
Γράψτε μη υπογεγραμμένη τιμή 50 σε 100 μητρώο από το slave 3:
modbus.write_single_register (3, 100, 50, False)
Αυτή η μέθοδος επιτρέπει την εγγραφή ακέραιων τιμών σε έναν καταχωρητή.
Ο μοναδικός καταχωρητής μπορεί να περιέχει τιμές 16 bit.
Η μέθοδος επιστρέφει True is η τιμή εισόδου είναι έγκυρη και False, αν όχι. Η τιμή γράφεται ακόμη και αν δεν είναι έγκυρη (πολύ μεγάλη για εγγραφή)
3) Διαβάστε πηνία/διακριτές εισόδους
Τώρα ας διαβάσουμε τις γραμμένες boolean τιμές. Για να διαβάσετε το μητρώο με τη λειτουργία 1 διαβάστε το πηνίο, εκτελέστε:
modbus.read_coils (slaveId, register, count) [0: count]
Για ανάγνωση καταχωρητή με συνάρτηση 2 ανάγνωση διακριτής εισόδου, εκτελέστε:
modbus.read_discrete_inputs (slaveId, register, count) [0: count]
όπου:
- slave -id - αναγνωριστικό εικονικού σκλάβου (Ο προσομοιωτής σκλάβων δέχεται όλα τα έγκυρα αναγνωριστικά)
- μητρώο - αριθμός μητρώου για ανάγνωση
- καταμέτρηση - ποσό μητρώων προς ανάγνωση (βάλτε το επιθυμητό ποσό και στα δύο μέρη)
Αυτές οι μέθοδοι επιστρέφουν πίνακα με τιμές boolean. Κάθε τιμή αντιστοιχεί σε κάθε καταχωρητή.
Το τεμάχιο: [0: count] είναι απαραίτητο, επειδή αυτή η μέθοδος επιστρέφει περισσότερες τιμές, παρά count. Επιστρέφει πάντα το ποσό των τιμών που διαιρείται με το 8. Οι πρόσθετες τιμές είναι False και δεν αντιστοιχούν σε κανένα μητρώο.
Διαβάστε τις boolean τιμές μας και με τις δύο μεθόδους:
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, register, count, signature = True)
Για να διαβάσετε καταχωρητές με λειτουργία 4 διαβάστε καταχωρητές εισόδου, εκτελέστε:
modbus.read_input_registers (slaveId, register, count, signature = True)
όπου:
- slave -id - id του εικονικού σκλάβου
- μητρώο - αριθμός μητρώου για ανάγνωση
- καταμέτρηση - ποσό μητρώων προς ανάγνωση
- υπογεγραμμένο - υποδεικνύει εάν οι τιμές ανάγνωσης πρέπει να αντιμετωπίζονται ως υπογεγραμμένοι αριθμοί ή όχι. Προεπιλεγμένη κατάσταση: True
Η τιμή επιστροφής είναι μια πλειάδα με τον επιθυμητό αριθμό καταχωρητών.
Διαβάστε καταχωρητές που ορίστηκαν στο προηγούμενο σημείο:
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)
Τα αποτελέσματα πρέπει να μοιάζουν με αυτό το στιγμιότυπο οθόνης: ΠΑΡΑΔΕΙΓΜΑ
Στο επόμενο μάθημα θα μάθετε πώς να δημιουργείτε το Modbus RTU Master σε συσκευή με δυνατότητα ESP32.
Συνιστάται:
Industrial HMI και Arduinos στο MODBUS RTU: 4 Βήματα
Industrial HMI and Arduinos in MODBUS RTU: Σε αυτό το διδακτικό θα περιγράψω ένα παράδειγμα επικοινωνίας μεταξύ ενός βιομηχανικού HMI (COOLMAY MT6070H, 150EUROS), ενός Arduino CLONE DIY (10EUROS) και ενός Arduino UNO (10EUROS). Το δίκτυο θα λειτουργεί υπό ένα ειδικό και στιβαρό και βιομηχανικό πρωτότυπο
Επικοινωνία Modbus TCP μεταξύ Arduino και βιομηχανικών συσκευών: 3 βήματα
Επικοινωνία Modbus TCP μεταξύ Arduino και βιομηχανικών συσκευών: Ένας βιομηχανικός τρόπος για τον έλεγχο μιας πλακέτας Arduino με βιομηχανικό HMI και τη σύνδεση της με ένα βιομηχανικό δίκτυο με μια επικοινωνία Modbus TCP
Ξεκινώντας με το ESP32 - Εγκατάσταση πλακών ESP32 στο Arduino IDE - ESP32 Blink Code: 3 βήματα
Ξεκινώντας με το ESP32 | Εγκατάσταση πλακών ESP32 στο Arduino IDE | ESP32 Blink Code: Σε αυτά τα εγχειρίδια θα δούμε πώς να ξεκινήσετε να εργάζεστε με το esp32 και πώς να εγκαταστήσετε τους πίνακες esp32 στο Arduino IDE και θα προγραμματίσουμε το esp 32 να εκτελεί κώδικα αναλαμπής χρησιμοποιώντας το arduino ide
Σύνδεση TCP/IP μέσω GPRS: Τρόπος αποστολής δεδομένων σε διακομιστή χρησιμοποιώντας μονάδα SIM900A: 4 βήματα
Σύνδεση TCP/IP μέσω GPRS: Τρόπος αποστολής δεδομένων σε διακομιστή χρησιμοποιώντας μονάδα SIM900A: Σε αυτό το σεμινάριο θα σας πω πώς να στείλετε δεδομένα στον διακομιστή TCP χρησιμοποιώντας την ενότητα sim900. Επίσης, θα δούμε πώς μπορούμε να λαμβάνουμε δεδομένα από διακομιστή σε πελάτη (ενότητα GSM)
Μετρητής PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: 7 βήματα
Meter PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: Σε αυτή την ευκαιρία θα ενσωματώσουμε τον ενεργό μετρητή ισχύος ή την ηλεκτρική κατανάλωση, Pzem-004-Peacefair με την πλατφόρμα ενσωμάτωσης IoT Node-RED που χρησιμοποιήθηκε σε προηγούμενα σεμινάρια, θα χρησιμοποιήσουμε μια μονάδα ESP8266 που έχει διαμορφωθεί ως υποτελής Modbus TCP / IP, αργότερα