Σειριακές Επικοινωνίες με Επεξεργασία

Σειριακές Επικοινωνίες με Επεξεργασία

Σειριακές Επικοινωνίες με Επεξεργασία

Η τάξη σειρών

Οι λειτουργίες για τη χρήση σειριακών επικοινωνιών σε Επεξεργασία ορίζονται στην τάξη Serial.Η πρώτη λειτουργία που πρέπει να κάνετε για να τα χρησιμοποιήσετε σε ένα πρόγραμμα (σκίτσο) θα είναι να το ενσωματώσετε στον κώδικα με import processing.serial.*;.

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

    Τάξη Serial Έχει πέντε διαφορετικούς κατασκευαστές ανάλογα με τις παραμέτρους που υποδεικνύονται. Η μόνη απαιτούμενη παράμετρος είναι το γονικό αντικείμενο (μητρική εταιρεία) που συνήθως αντιστοιχεί στο κύριο πρόγραμμα (ας πούμε, το παράθυρο του προγράμματος) της τάξης PApplet. Όπως συνήθως ο γονέας θα είναι το πρόγραμμα που γράφεται (το σκίτσο τρέχον), η τιμή αυτής της πρώτης υποχρεωτικής παραμέτρου θα είναι this.

    Οι άλλες πέντε παράμετροι που μπορούν να περάσουν στον κατασκευαστή είναι ① η ταχύτητα, ② το όνομα της σειριακής θύρας ③ η ισοτιμία που χρησιμοποιούνται στο πρωτόκολλο, ④ τα bit δεδομένων και ⑤ τα bit διακοπής. Οι παράμετροι που μεταβιβάζονται πιο συχνά, εκτός από το απαιτούμενο γονικό αντικείμενο, είναι το όνομα της θύρας και η ταχύτητα.

    La ταχύτητα σειριακής επικοινωνίας είναι ακέραιος αριθμός (int), που προεπιλογή στην τιμή 9600 εάν αυτή η παράμετρος δεν μεταβιβαστεί στον κατασκευαστή.

    Διαθέσιμες σειριακές θύρες. Η μέθοδος της λίστας

    El όνομα λιμένα έχει τη μορφή που καθορίζεται από το σύστημα, με αυτόν τον τρόπο, για παράδειγμα στο Διανομές Linux θα είναι κάτι σαν /dev/ttyS4 / dev / ttyACM3 o /dev/ttyUSB1 (ανάλογα με τον τύπο θύρας), ενώ στα Windows θα είναι κάτι σαν COM12. Εκτός εάν μια θύρα συσχετίζεται φυσικά με μια συσκευή, το πρόγραμμα κανονικά δεν θα γνωρίζει ποια θύρα να χρησιμοποιήσει. Ένας συνηθισμένος τρόπος για να επιλέξετε τη θύρα είναι να αποκτήσετε μια λίστα με τις διαθέσιμες, να την εμφανίσετε στον χρήστη και να του επιτρέψετε να επιλέξει αυτή που θέλει να χρησιμοποιήσει. Η μέθοδος Serial.list() επιστρέφει ένα διάνυσμα από συμβολοσειρές κειμένου (String) με τα ονόματα των θυρών που είναι διαθέσιμες στο σύστημα.

    Η θύρα που χρησιμοποιείται από προεπιλογή από τη βιβλιοθήκη Serial είναι το πρώτο από αυτά που επιστράφηκαν με τη μέθοδο list (ασφαλώς COM1 σε Windows ή /dev/ttyS0 en GNU / Linux). Εκτός από πολύ περιορισμένα περιβάλλοντα στα οποία το υλικό με το οποίο εργάζεστε είναι αυστηρά γνωστό (όπως ένα σύστημα σε λειτουργία kiosk), συνήθως δεν παραλείπεται και η θύρα προορισμού υποδεικνύεται ρητά.

    Επεξεργασία σειριακής θύρας λίστας Linux ttyACM ttyS ttyUSB

    Το παραπάνω στιγμιότυπο οθόνης δείχνει την έξοδο ενός συστήματος GNU / Linux που διαθέτει τέσσερις σειριακές θύρες RS-232 (ttyS0 a ttyS3) και πέντε προσαρμογείς δύο τύπων (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Δικαιώματα σειριακών συσκευών Linux ttyACM ttyS ttyUSB

    Για να έχει πρόσβαση στις σειριακές θύρες, ο χρήστης πρέπει να ανήκει στην ομάδα στην οποία τις εκχωρεί το σύστημα, κανονικά TTY o διάλεξη. Στο στιγμιότυπο οθόνης της παραπάνω εικόνας μπορείτε να δείτε ότι οι σειριακές θύρες που αναφέρονται με ls /dev/tty[ASU]* -la ανήκουν στην ομάδα διάλεξη που έχει δικαιώματα πρόσβασης ανάγνωσης και εγγραφής σε αυτά.

    Παράμετροι σειριακού πρωτοκόλλου

    La ισοτιμία των σειριακών επικοινωνιών εκφράζεται σε Επεξεργασία ως χαρακτήρας (char) που μπορεί να πάρει τις τιμές: ① N (κανένας) για να μην ανιχνεύσετε το ισοτιμία, ② E (ακόμη και) για να υποδείξετε ότι το bit ισοτιμίας είναι άρτιος, ③ O (περιττός) για να υποδείξετε ότι το bit ισοτιμίας είναι περίεργο, ④ M (σημάδι) να κάνει πάντα το bit ισοτιμίας και ⑤ S (χώρος) να κάνει πάντα ένα το bit ισοτιμίας. Η προεπιλεγμένη τιμή, εάν δεν μεταβιβαστεί στον κατασκευαστή ως παράμετρος, είναι N (αμαρτία ισοτιμία).

    Ο αριθμός των bits δεδομένων, που είναι οκτώ από προεπιλογή, υποδεικνύει τον αριθμό των bit που συνθέτουν το καθαρό ωφέλιμο φορτίο δεδομένων (που ονομάζεται χαρακτήρας ή μερικές φορές λέξη) που μεταδίδεται σε κάθε βασική μονάδα του πλαισίου. Η παράμετρος που υποδεικνύει τον αριθμό των bit δεδομένων εκφράζεται ως ακέραιος αριθμός (int).

    Τέλος, η πέμπτη δυνατή παράμετρος υποδεικνύει τη διάρκεια του τελικού σημείου, εκφραζόμενη ως στοπ μπιτ (μπιτ στοπ), το οποίο υποδεικνύεται ως αριθμός που αναπαρίσταται στο κινητής υποδιαστολής (float) που μπορεί να πάρει τις τιμές 1.0 (η προεπιλεγμένη τιμή εάν η παράμετρος δεν μεταβιβαστεί στον κατασκευαστή), 1.5ή 2.0.

    Κατασκευαστές της τάξης Serial

    Η ακόλουθη λίστα δείχνει τους διαφορετικούς συνδυασμούς παραμέτρων που μπορούν να περάσουν στον κατασκευαστή κλάσης Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Τερματισμός σειριακών επικοινωνιών. Η μέθοδος διακοπής.

    Για να αποδεσμεύσετε τη σειριακή θύρα, που έχει εκχωρηθεί κατά την προετοιμασία Serial, και ότι άλλες εφαρμογές συστήματος μπορούν να το χρησιμοποιήσουν, οι επικοινωνίες τερματίζονται με τη μέθοδο stop, το οποίο δεν λαμβάνει παραμέτρους.

    Αποστολή δεδομένων μέσω της σειριακής θύρας. Η μέθοδος εγγραφής

    Για αποστολή δεδομένων, η τάξη Serial de Επεξεργασία ενσωματώνει τη μέθοδο write με τις οποίες μπορείτε να μεταδώσετε ① συμβολοσειρές κειμένου (String), ② byte ή ③ διανύσματα byte (byte[]). Είναι ενδιαφέρον να το θυμόμαστε αυτό byte en Επεξεργασία (Στο Java) αντιπροσωπεύει έναν ακέραιο μεταξύ -128 και 127 και, από προεπιλογή, οι συμβολοσειρές χρησιμοποιούν την κωδικοποίηση UTF-16.

    Ανάγνωση δεδομένων από σειριακή θύρα

    Για να μπορεί το πρόγραμμα να εκτελεί άλλες εργασίες κατά τη λήψη δεδομένων μέσω της σειριακής θύρας, είναι συνηθισμένο να αποθηκεύεται σε α ρυθμιστικό τα δεδομένα που φτάνουν και διαβάστε τα όταν χρειάζεται. Αν και συνήθως δεν είναι πολύ αποτελεσματικό, μπορείτε να σταματήσετε την εφαρμογή για να φορτώσει όλα τα διαθέσιμα δεδομένα. Ωστόσο, το πιο συνηθισμένο πράγμα θα είναι να διαβάζετε τις πληροφορίες καθώς φτάνουν, είτε σε κάθε επανάληψη του draw, όταν μια συγκεκριμένη ποσότητα είναι διαθέσιμη ή έχει ληφθεί ειδικός κωδικός.

    Ποσότητα δεδομένων που είναι διαθέσιμα στο buffer. Η διαθέσιμη μέθοδος

    Για να μάθετε αν έχουν φτάσει τα δεδομένα ρυθμιστικό σειρά, η μέθοδος available επιστρέφει τον αριθμό των byte που έχουν ήδη αποθηκευτεί σε αυτό ρυθμιστικό. Και στις δύο περιπτώσεις, οι λειτουργίες ανάγνωσης μπορούν να επιστρέψουν μια ειδική τιμή (π.χ -1 o null) όταν προσπαθείτε να φορτώσετε δεδομένα από ρυθμιστικό σειρά όταν είναι άδεια.

    Φορτώστε ένα byte τη φορά. Η μέθοδος ανάγνωσης

    Οι κύριες μέθοδοι της τάξης Serial που χρησιμεύουν για την ανάγνωση των πληροφοριών που λαμβάνονται από μια σειριακή θύρα είναι αυτές του τύπου read» που διαφέρουν μεταξύ τους, κυρίως, από το είδος των δεδομένων στα οποία παραδίδουν τις πληροφορίες που ελήφθησαν.

    read χρησιμοποιείται για την παράδοση των byte που λαμβάνονται από τη σειριακή θύρα ως τιμή μεταξύ 0 και 255. Ως τύπος δεδομένων byte de Επεξεργασία αντιπροσωπεύει το εύρος μεταξύ -128 και 127 και όχι μεταξύ 0 και 255, είναι απαραίτητο να χρησιμοποιήσετε ένα int προκειμένου να αντιπροσωπεύει το εύρος που επιστρέφεται από read. Αν προσπαθήσετε να διαβάσετε με read και ρυθμιστικό Η συμβολοσειρά είναι κενή, επιστρέφει τιμή -1

    Διαβάστε χαρακτήρες από τη σειριακή θύρα. Η μέθοδος readChar

    Η μέθοδος readChar είναι παρόμοια με read αλλά επιστρέφει μια τιμή σε μορφή char αντί για int. Όπως εσωτερικά, το char en Επεξεργασία (Στο Java) αποθηκεύονται με δύο byte, την τιμή που επιλέγεται να επιστρέφεται κατά την ανάγνωση readChar ένα ρυθμιστικό κενή σειρά είναι 0xFFFF o -1.

    Φορτώστε μια συμβολοσειρά κειμένου. Οι μέθοδοι readString και readStringUntil.

    Η μέθοδος readString επιστρέφει ένα αντικείμενο String που σχηματίζεται από όλα τα δεδομένα που είναι διαθέσιμα στο ρυθμιστικό σειρά κατά τη στιγμή της διαβούλευσης.

    Η μέθοδος readString δημιουργεί τη συμβολοσειρά κειμένου υποθέτοντας ότι τα byte που λαμβάνονται από τη σειριακή θύρα είναι στη μορφή ASCII Επομένως, αυτή η μέθοδος ανάγνωσης δεν μπορεί να χρησιμοποιηθεί για άλλες κωδικοποιήσεις.

    Αν πρόκειται για την ανάγνωση του ρυθμιστικό σειρά με readString όταν είναι κενό, η τιμή επιστροφής είναι null.

    Η μέθοδος readStringUntil προσθήκη σε readString τη δυνατότητα επιστροφής πληροφοριών που έχουν φορτωθεί στο ρυθμιστικό σειρά που τη χωρίζει με έναν ειδικό χαρακτήρα (κωδικό) που μεταβιβάζεται ως παράμετρος. Αυτός ο τρόπος ανάγνωσης των πληροφοριών που λαμβάνουμε μας επιτρέπει να διακρίνουμε τόσο διαχωριστές όσο και τερματιστές που βοηθούν στην ερμηνεία των πληροφοριών που λαμβάνονται.

    Η μέθοδος readStringUntil φέρε πίσω null όταν στο ρυθμιστικό Η σειρά δεν βρίσκει τον κώδικα που καθορίζεται στο όρισμα που της διαβιβάστηκε (ένα byte).

    Στον παρακάτω κώδικα για Arduino στέλνει τρία μηνύματα μέσω της σειριακής θύρας. Τα δύο πρώτα τελειώνουν σε μια καρτέλα, επομένως θα εμφανιστούν στην κονσόλα. Επεξεργασία, ενώ το τρίτο, αν και θα σταλεί μέσω της σειριακής θύρας, δεν θα διαβάζεται με readStringUntil(9) αφού δεν τελειώνει σε καρτέλα (με κωδικό ASCII 9).

    Επεξεργασία Serial.readStringΜέχρι την ανάγνωση σειριακής συμβολοσειράς

    Ανάγνωση μπλοκ δεδομένων. Οι μέθοδοι readBytes και readBytesUntil.

    Οι μέθοδοι που φαίνονται παραπάνω χρησιμοποιούνται για την ανάγνωση δεδομένων με συγκεκριμένες μορφές, για την ανάγνωση μπλοκ ακατέργαστων δεδομένων ή με μορφή που δεν προβλέπεται στο Επεξεργασία χρησιμοποιούνται μέθοδοι readBytes y readBytesUntil

    Η μέθοδος readBytes προσπαθήστε να διαβάσετε τα δεδομένα που είναι διαθέσιμα στο ρυθμιστικό σειρά. Εάν δεν μεταβιβαστεί καμία παράμετρος στη μέθοδο readBytes όλα τα διαθέσιμα δεδομένα διαβάζονται και επιστρέφονται σε ένα διάνυσμα (byte[]). Εάν ένας ακέραιος μεταβιβαστεί ως παράμετρος, διαβάζεται το μέγιστο από τον αριθμό των byte που υποδεικνύεται από αυτόν τον αριθμό και επιστρέφονται επίσης ως διάνυσμα.

    Υπάρχει ένας τρίτος τρόπος χρήσης readBytes, πιο αποτελεσματικό, το οποίο παίρνει ως όρισμα ένα διάνυσμα byte στο οποίο τα περιεχόμενα του ρυθμιστικό σειρά. Αυτός ο τρόπος χρήσης readBytes επιστρέφει έναν ακέραιο αριθμό (int) που αντιπροσωπεύει τον αριθμό των byte που έχουν διαβαστεί.

    Η μέθοδος readBytesUntil λειτουργεί με παρόμοιο τρόπο αλλά περιλαμβάνει μια πρώτη παράμετρο που αντιπροσωπεύει την τιμή του byte που, αν βρεθεί στο ρυθμιστικό, θα υποδηλώνει το τέλος της ανάγνωσης. Σε αυτή τη μέθοδο, η παράμετρος που καθορίζει τον μέγιστο αριθμό bytes που θα διαβαστούν δεν έχει νόημα αφού η ποσότητα θα καθοριστεί από τον ειδικό κωδικό.

    Για να ελέγξετε τη λειτουργία της μεθόδου readBytes Ας υποθέσουμε τον παρακάτω κώδικα για Arduino που στέλνει ένα κείμενο μέσω της σειριακής θύρας.

    Το παρακάτω παράδειγμα προγράμματος για Επεξεργασία διαβάζει κείμενο από τη σειριακή θύρα σε μπλοκ 32 byte (TOTAL_BYTES). Για να επαληθεύσει ότι λειτουργεί, το εμφανίζει μέσω της κονσόλας ως χαρακτήρες, αναγκάζοντας τον τύπο των byte που λαμβάνονται σε char.

    Στο παρακάτω στιγμιότυπο οθόνης μπορείτε να δείτε πώς εμφανίζονται στην κονσόλα Επεξεργασία τα δεδομένα που έχουν φορτωθεί σε μπλοκ των (μέγιστο) 32 byte (TOTAL_BYTES) κάθε φορά. Υπάρχει όμως ένα πρόβλημα για το οποίο έχει ήδη συζητηθεί: Arduino έχει στείλει τους στίχους του Φεντερίκο Γκαρθία Λόρκα του παραδείγματος κωδικοποιημένο ως κείμενο σε μορφή UTF-8, το οποίο δεν είναι αυτό που χρησιμοποιείται Επεξεργασία (Java), τι προτιμάτε UTF-16 άρα όσοι δεν αντιστοιχούν στον βαθμό του ASCII εκτυπώσιμες ερμηνεύονται εσφαλμένα.

    Επεξεργασία Serial.readBytes UTF-16

    Για να λυθεί αυτό το πρόβλημα, τα σύνολα χαρακτήρων μπορούν να φορτωθούν (charset) και ορίστε ένα νέο αντικείμενο String αναγκάζοντάς το να αναπαρασταθεί με κωδικοποίηση UTF-8 όπως φαίνεται στο παρακάτω παράδειγμα κώδικα.

    Επεξεργασία Serial.readBytes UTF-8

    Διαβάστε τα πιο πρόσφατα δεδομένα που ελήφθησαν. Η τελευταία και η τελευταία μέθοδος Char.

    Ενώ οι υπόλοιπες μέθοδοι ανάγνωσης (ο «τύπος read») φορτώνουν τις πληροφορίες του ρυθμιστικό σειρά με την ίδια σειρά που έφτασε (FIFO), με αυτές τις δύο μεθόδους το τελευταίο byte που έφτασε στο ρυθμιστικό σειρά. Η μέθοδος last επιστρέφει την τιμή του τελευταίου byte ως a int y lastChar επιστρέφει την τιμή ως α char.

    Σειριακή διαχείριση buffer

    Αν και οι μέθοδοι που έχουν δει μέχρι τώρα είναι απόλυτα λειτουργικές, δεν αντιπροσωπεύουν πάντα τον καλύτερο τρόπο εκμετάλλευσης της πρόσβασης στη σειριακή θύρα. Για να φορτώσουν τα δεδομένα, πρέπει να ελέγχουν περιοδικά την κατάσταση του ρυθμιστικό σειρά και διαβάστε τα διαθέσιμα δεδομένα σε ένα επαναλαμβανόμενο μέρος του κώδικα. Ένας γενικά πιο αποτελεσματικός τρόπος είναι να διαβάζετε τα δεδομένα μόνο όταν γνωρίζετε ότι είναι διαθέσιμα.

    Διαβάστε τη σειριακή θύρα κατά τη λήψη δεδομένων. Το σειριακό γεγονός.

    Για πρόσβαση στο ρυθμιστικό κατά τη λήψη των δεδομένων, το σειριακό συμβάν μπορεί να αξιοποιηθεί διαχειρίζοντάς το μέσω του ορισμού της μεθόδου serialEvent. Αυτή η μέθοδος χρησιμοποιεί τη σειριακή θύρα που την εκκινεί ως όρισμα.

    Μέγεθος του σειριακού buffer. Η μέθοδος buffer.

    Εάν γνωρίζετε τον αριθμό των byte που συνθέτουν ένα μπλοκ χρήσιμων δεδομένων, μπορείτε να βελτιστοποιήσετε περαιτέρω αυτό το στυλ ανάγνωσης των δεδομένων. ρυθμιστικό σειρά μέσω serialEvent. Η μέθοδος buffer σας επιτρέπει να ορίσετε τον αριθμό των byte που θα αποθηκευτούν στο ρυθμιστικό πριν από την έναρξη μιας Σειριακής εκδήλωσης. Η μέθοδος αναμένει ως παράμετρο έναν ακέραιο που αντιπροσωπεύει τον αριθμό των byte.

    Γεμίστε το buffer μέχρι να ληφθεί μια τιμή. Η μέθοδος bufferUntil.

    Αντί να ορίσετε την κλήση μεθόδου serialEvent για μια ποσότητα δεδομένων στο ρυθμιστικό, με τη μέθοδο bufferUntil μπορείτε να ρυθμίσετε τις παραμέτρους για αποθήκευση δεδομένων μέχρι να φτάσει μια ειδική τιμή και στη συνέχεια να αυξήσετε το Σειριακό συμβάν. Η παράμετρος που μεταβιβάστηκε σε αυτή τη μέθοδο είναι α int που αντιπροσωπεύει την τιμή που παράγεται από την κλήση προς serialEvent.

    Διαγράψτε τα δεδομένα που είναι αποθηκευμένα στο buffer. Η ξεκάθαρη μέθοδος.

    με τη μέθοδο clear Μπορείτε να διαγράψετε τα δεδομένα που βρίσκονται αυτήν τη στιγμή στο ρυθμιστικό. Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί, για παράδειγμα, για να ξεκινήσει μια νέα συνεδρία λήψης δεδομένων αγνοώντας τα δεδομένα που απομένουν από την προηγούμενη.

    Τυπική εφαρμογή επεξεργασίας για ανάγνωση δεδομένων μέσω της σειριακής θύρας

    Τέλος, είναι βολικό να ανακεφαλαιωθούν οι λειτουργίες του αντικειμένου Serial de Επεξεργασία που χρησιμοποιούνται πιο συχνά, περνώντας από ένα τυπικό παράδειγμα λήψης δεδομένων μέσω της σειριακής θύρας για να σχεδιάσετε ένα γράφημα με αυτά, σε αυτήν την περίπτωση στοιβαγμένων περιοχών.

    Εισαγάγετε τη σειριακή βιβλιοθήκη

    Προσδιορισμός πρωτοκόλλου δεδομένων (διαχωριστές)

    Προσδιορίστε το αντικείμενο της κλάσης Serial

    Δημιουργήστε το αντικείμενο κλάσης Serial ορίζοντας τη σειριακή θύρα που χρησιμοποιείται

    Διαμόρφωση του buffer σειριακής θύρας

    Εφαρμόστε έναν χειριστή για το Σειριακό συμβάν

    Ανάγνωση σειριακής προσωρινής μνήμης

    Προετοιμάστε τα δεδομένα που λαμβάνονται

    Τερματισμός σειριακών επικοινωνιών

    Το παράδειγμα κώδικα παρακάτω απεικονίζει αυτήν τη σύνοψη με μια λειτουργική (αν και πολύ απλή) εφαρμογή που δημιουργεί ένα γράφημα περιοχής με τις τιμές που λαμβάνονται μέσω της σειριακής θύρας, κάτι παρόμοιο με αυτό που δείχνει το παρακάτω κινούμενο σχέδιο.

    γραφικό με Επεξεργασία με δεδομένα που λαμβάνονται μέσω της σειριακής θύρας

    Για να μην χαθείτε στο υπόλοιπο πρόγραμμα και εστιάστε την προσοχή σας σε σειριακές επικοινωνίες με Επεξεργασία, επισημαίνονται οι γραμμές κώδικα που αντιστοιχούν στις προηγούμενες λειτουργίες.

    Δημοσίευση σχολίου

    Μπορεί να έχετε χάσει