ΑΣΚΗΣΗ 5 η Η σειριακή επικοινωνία ΙΙ 1.1 ΣΚΟΠΟΣ Σκοπός της άσκησης αυτής είναι η κατανόηση σε βάθος των λειτουργιών που παρέχονται από το περιβάλλον LabView για τον χειρισµό της σειριακής επικοινωνίας του υπολογιστή µε µία οποιαδήποτε εξωτερική συσκευή. Επίσης η άσκηση σκοπεύει στην ανάπτυξη της δυνατότητας σας να γράφετε µία απλή εφαρµογή επικοινωνίας και να επικοινωνείτε έτσι µέσω του LabView µε το καταγραφικό. 1.2 ΠΕΡΙΓΡΑΦΗ Για την επίτευξη του σκοπού της άσκησης κρίνεται σκόπιµο να γίνει µία αναλυτική περιγραφή όλων των συναρτήσεων του LabView Student Edition που σχετίζονται στο χειρισµό της σειριακής πόρτας του υπολογιστή. 1.3 ΧΕΙΡΙΣΜΟΣ ΣΕΙΡΙΑΚΗΣ ΘΥΡΑΣ To Labview µας δίνει τη δυνατότητα να χειριστούµε τις σειριακές θύρες του υπολογιστή µας. Αυτό είναι δυνατό µε την χρήση των έτοιµων λειτουργιών που βρίσκονται, όπως δείχνει και το Σχήµα 1, στο παράθυρο Serial Compatibility. Σχήµα 1 Η παλέτα της επιλογής Serial περιέχει τις λειτουργίες: Bytes At Serial Port, Serial Port Write, Serial Port Read, και Serial Port Init Εαρινό Εξάµηνο 2006 1
Παρακάτω γίνεται επεξήγηση της κάθε λειτουργίας κάνοντας χρήση και του παραθύρου βοήθεια του προγράµµατος για περισσότερη εξοικείωση στη χρήση του Help. Σχήµα 2 Η λειτουργία Serial Port Init (Σχήµα 2) χρησιµοποιείται πάντα όταν θέλουµε να διαβάσουµε ή να γράψουµε δεδοµένα από και προς την σειριακή θύρα του υπολογιστή. buffer size Είσοδος τύπου NUM. Μπορεί να προέρχεται από digital control,από digital constant, ή από οποιαδήποτε άλλη πηγή NUM δεδοµένων. Υποδηλώνει το µέγεθος µνήµης RAM που θα αφιερωθεί για την προσωρινή αποθήκευση των δεδοµένων από και προς την σειριακή θύρα. Ενδεικτικές τιµές: από 1024 έως 10240, αλλά και µεγαλύτερες. Είσοδος τύπου NUM. Υποδηλώνει τον αύξοντα αριθµό της σειριακής πόρτας που θα χρησιµοποιήσουµε. Οι τιµές που δίνουµε µπορεί να είναι κάποια από τις παρακάτω: 0: COM1, 1: COM2, 2:COM3,...,8:COM9. baud rate Είσοδος τύπου NUM. Υποδηλώνει το ρυθµό µετάδοσης των δεδοµένων, την ταχύτητα δηλαδή µε την οποία τα δεδοµένα θα στέλνονται και θα λαµβάνονται από την σειριακή θύρα. Ενδεικτικές τιµές: 2400, 4800, 9600,..,κλπ., και αναφέρονται σε bits ανά δευτερόλεπτο (bits per second) data bits Είσοδος τύπου NUM. Υποδηλώνει τον αριθµό των bits των λέξεων στις οποίες θα τεµαχίζεται η µετακινούµενη πληροφορία. έχεται τιµές από 5 έως 8. stop bits Είσοδος τύπου NUM. έχεται την τιµή 0 για ένα stop bit και την τιµή 1 για δύο stop bits. Parity Είσοδος τύπου NUM. έχεται την τιµή 0 για µη ισοτιµία ( no parity), την τιµή 1 για περιτή ισοτιµία (odd parity), και την τιµή 2 για άρτια ισοτιµία (even parity). Εξοδος τύπου NUM. ίνει την τιµή -1 όταν οι παραπάνω παράµετροι είναι εκτός περιοχής κανονικών τιµών, ή όταν η σειριακή πόρτα για λόγους του συστήµατος δεν µπορεί να αρχικοποιηθεί. Στην έξοδο αυτή µπορούµε να συνδέσουµε τη λειτουργία Simple Error Handler για να Εαρινό Εξάµηνο 2006 2
Σχήµα 3 Η λειτουργία Serial Port Read χρησιµοποιείται για να διαβάσουµε δεδοµένα από την σειριακή θύρα του υπολογιστή. Τα δεδοµένα τα υποδεχόµαστε στον buffer, του οποίου το µέγεθος το έχουµε προηγουµένως ορίσει, και είναι σε µορφή χαρακτήρων (strings). To τελευταίο σηµαίνει πως ακόµη και όταν διαβάζουµε αριθµούς αυτοί είναι σύµβολα και όχι νούµερα. requested byte count Είσοδος τύπου NUM. Υποδηλώνει το πλήθος των χαρακτήρων που θα διαβαστούν από την σειριακή. Στην περίπτωση όπου δεν γνωρίζουµε πόσοι χαρακτήρες έχουν έρθει τη δεδοµένη στιγµή στην σειριακή θύρα τότε χρησιµοποιούµε την λειτουργία Bytes at Serial Port (βλ. παρακάτω) για να πάρουµε το τρέχον πλήθος των χαρακτήρων που έχουν προσέλθει στον buffer, δηλ. στο χώρο υποδοχής και συγκράτησης των δεδοµένων της θύρας. string read Εξοδος τύπου STRING. Παρέχει τους χαρακτήρες που διαβάσαµε από την σειριακή θύρα µε την σειρά µε την οποία προσήλθαν στην θύρα. συµβεί λάθος. Οι κωδικοί λάθους αναφέρονται σε σχετικό πίνακα παρακάτω. Στην έξοδο Σχήµα 4 Η λειτουργία Bytes at Serial Port µας παρέχει την πληροφορία για το πλήθος των χαρακτήρων που έχουν συσσωρευθεί στη δεδοµένη σειριακή θύρα. Εαρινό Εξάµηνο 2006 3
byte count Εξοδος τύπου NUM. Υποδηλώνει το πλήθος των χαρακτήρων που βρίσκονται προς ανάγνωση στον buffer της δεδοµένης σειριακής θύρας. συµβεί λάθος. Οι κωδικοί λάθους αναφέρονται σε σχετικό πίνακα παρακάτω, Στην έξοδο Σχήµα 5 Η λειτουργία Serial Port Write χρησιµοποιείται όταν θέλουµε να "γράψουµε" δεδοµένα στην σειριακή θύρα, δηλαδή όταν θέλουµε να µεταδώσουµε χαρακτήρες προς το σύστηµα µε το οποίο έχουµε συνδεθεί µέσω σειριακής θύρας. string to write Είσοδος τύπου STRING. έχεται τους χαρακτήρες που θέλουµε να µεταδώσουµε µέσω της σειριακής θύρας. Προσοχή: εδώ χρειαζόµαστε ένα String Constant είτε ένα String Control. Οι αριθµοί που τυχόν να εισάγουµε µην ξεχνάµε πως µετατρέπονται και µεταδίδονται ως χαρακτήρες κι όχι ως νούµερα. συµβεί λάθος. Οι κωδικοί λάθους αναφέρονται σε σχετικό πίνακα παρακάτω. Στην έξοδο Code Name Description 61 EPAR Serial port parity error 62 EORN Serial port overrun error 63 EOFL Serial port receive buffer overflow 64 EFRM Serial port framing error 65 SPTMO Serial port timeout, bytes not received at serial port Πίνακας 1: Κωδικών Λάθους Σειριακής Επικοινωνίας Εαρινό Εξάµηνο 2006 4
1.3 Ο ΗΓΙΕΣ - Προσπαθήστε να φτιάξετε ένα πρόγραµµα το οποίο στο Front Panel να µοιάζει µε το Σχήµα 6 και το οποίο να επιτρέπει να στείλουµε χαρακτήρες του πληκτρολογίου µέσω της σειριακής θύρας στο καταγραφικό. Το καταγραφικό πρέπει να λειτουργήσει ως ελεγκτής σειριακής θύρας (ότι διαβάζει από την σειριακή θύρα θα το απεικονίζει στο display της συσκευής). - Οδηγίες για τον τρόπο λειτουργίας του καταγραφικού ως ελεγκτής σειριακής θύρας θα βρείτε σε προηγούµενη άσκηση - Για να βάλετε έναν αριθµό ρουτινών σε µια χρονική σειρά (δηλαδή πρώτα να εκτελείται η µία µετά η άλλη κ.ο.κ) θα πρέπει πάντα να χρησιµοποιείται την δοµή Sequence ηµιουργήστε όσα καρέ χρειάζεστε. Εάν επιθυµείτε να µεσολαβεί κάποιο χρονικό διάστηµα µεταξύ δύο διαδοχικών καρέ, τότε δηµιουργήστε ένα ενδιάµεσο καρέ και απλά τοποθετήστε µέσα σε αυτό µία καθυστέρηση Wait. Σχήµα 6 Εαρινό Εξάµηνο 2006 5