Πίνακας περιεχομένων:

ESP32 Modbus Master TCP: 7 βήματα
ESP32 Modbus Master TCP: 7 βήματα

Βίντεο: ESP32 Modbus Master TCP: 7 βήματα

Βίντεο: ESP32 Modbus Master TCP: 7 βήματα
Βίντεο: Modbus TCP-RS485| ESP32. Визуализация на Virtuino. 2024, Ιούνιος
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Σε αυτήν την τάξη, θα προγραμματίσετε τον επεξεργαστή 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 TCP Slave Simulator
Λήψη και εκκίνηση του 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. Ελέγξτε την έκδοση της συσκευής σας (ποιος τύπος θύρας χρησιμοποιεί) και βρείτε την κατάλληλη θύρα ή μετατροπέα.

  1. Συνδέστε τη συσκευή στον υπολογιστή
  2. Στη συνέχεια, συνδέστε το τροφοδοτικό σε αυτό

Συνδέστε τη συσκευή στον υπολογιστή και, στη συνέχεια, συνδέστε την τροφοδοσία σε αυτήν. Μπορείτε επίσης να συνδέσετε καλώδιο ethernet στο Moduino ESP32 (εάν διαθέτει αυτήν τη θύρα).

Η σύνδεση θα πρέπει να είναι όπως στις παραπάνω φωτογραφίες

Βρείτε τη διαδρομή για τη θύρα, η οποία χρησιμοποιείται για τη σύνδεση συσκευής. Μπορεί να είναι για παράδειγμα: /dev /ttyS1, /dev /ttyUSB0.

Για μετατροπείς usb, η διαδρομή θα περιέχει λέξη USB.

Μπορείτε να συνδεθείτε στη συσκευή με πρόγραμμα picocom:

picocom /dev /ttyUSB0 -b 115200

Η γραμμή εντολών της συσκευής μοιάζει με μία από αυτές τις παρακάτω εικόνες.

Moduino ESP32: Δείτε εδώ

Moduino Pycom: Δείτε εδώ

Βήμα 4: Ανεβάστε την κύρια βιβλιοθήκη Modbus

Ανεβάστε την κύρια βιβλιοθήκη Modbus
Ανεβάστε την κύρια βιβλιοθήκη 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 Slave
Αρχικοποιήστε την επικοινωνία με τον 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 έχει μέθοδο για κάθε συνάρτηση:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. 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.

Συνιστάται: