
Πρέπει να στέλνουν και να λαμβάνουν δεδομένα μέσω σειριακής συνδέσεις (RS-232 και RS-422).


Πώς μπορώ να ρυθμίσω και να επικοινωνούν με μια τέτοια σχέση; Πώς μπορώ να καταλάβω τι πρέπει να είναι οι ρυθμίσεις (π.χ. baud rate) και πώς μπορώ να τα ρυθμίσετε;


Ειδικότερα Ψάχνω να το κάνετε αυτό σε Java, C / C ++, ή ένα από τα σημαντικότερα κοχύλια Unix, αλλά έχω επίσης κάποιο ενδιαφέρον για σειριακή προγραμματισμού χρησιμοποιώντας το Windows / Hyperterminal.

 
Πώς μπορώ να ρυθμίσω και να επικοινωνούν με μια σειριακή θύρα;
==============================================================



Δημιουργήστε μια μηχανή του χρόνου και να πάει πίσω στο 1987; Ho Ho.


Εντάξει, όχι περισσότερο snarky σχόλια.



> 
> Πώς μπορώ να καταλάβω τι πρέπει να είναι οι ρυθμίσεις (π.χ. baud rate) ...
> 
> 
> 


Διαβάστε το δελτίο; ΕΝΤΑΞΕΙ ΕΝΤΑΞΕΙ. Σοβαρά, το τελευταίο. Αν δεν γνωρίζετε το ρυθμό Baud της συσκευής που προσπαθείτε να επικοινωνήσει μαζί, έχετε δύο επιλογές. Ξεκινήστε μαντέψουν, ή ενδεχομένως ξεφύγει από ένα o-πεδίο. Αν χρειάζεστε ένα καλό σημείο εκκίνησης, επιτρέψτε μου να προτείνω 9.600 έως 8-Ν-1. υποψία μου είναι ότι μπορείτε να φτάσετε εκεί με ωμή βία σχετικά γρήγορα. Υπάρχει μια τρίτη επιλογή που έχει ένα παλιό σχολείο ninja που μπορεί να πει ακριβώς από την εμφάνιση των αλλοιωμένους χαρακτήρες σε κάποια τυπική ταχύτητα baud τι πραγματικός ρυθμός baud είναι. Ένα εντυπωσιακό μέρος τέχνασμα για να είστε σίγουροι.


Ας ελπίσουμε ότι αν έχετε πρόσβαση σε αυτές τις πληροφορίες. Στο Unix / Linux, μπορείτε να πάρετε Ahold από minicom να παίξει με τη σειριακή θύρα άμεσα. Αυτό θα πρέπει να είναι αρκετά γρήγορος για να πάρει η διαμόρφωση καταλάβει.



> 
> ένα από τα σημαντικότερα κοχύλια Unix
> 
> 
> 


Σε Unix η σειριακή θύρα (ες) είναι / είναι αρχείο-χαρτογραφήθηκαν στο / dev / subdir. ttyS0, για παράδειγμα. Εάν ρυθμίσετε το σωστό ρυθμό Baud και εταζέρα με τη χρήση minicom, μπορείτε ακόμη και η γάτα πράγματα σε αυτό το αρχείο για να στείλετε πράγματα εκεί έξω.


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


Δείτε: <http://www.easysw.com/~mike/serial/serial.html#3_1>
 **(δεν είναι διαθέσιμο πια)**



> 
> αλλά έχω και κάποιο ενδιαφέρον για σειριακή προγραμματισμού χρησιμοποιώντας το Windows / Hyperterminal.
> 
> 
> 


Hyperterminal και minicom είναι βασικά το ίδιο πρόγραμμα. Όσο για το πώς τα Windows ας έχετε πρόσβαση στη σειριακή θύρα, θα αφήσω αυτή την ερώτηση για κάποιον άλλο. Δεν έχω κάνει αυτό στα Windows από την εποχή Win95.

 

Από την άλλη πλευρά, αν θέλετε να το κάνετε χρησιμοποιώντας C #, η οποία θα τρέχει σε Windows και Linux - με κάποιες [περιορισμούς](http://www.mono-project.com/HowToSystemIOPorts) (EDIT:. Η οποία μπορεί να είναι ξεπερασμένο δεν έχω κανέναν τρόπο να το δοκιμάσετε.). Απλά δημιουργήστε ένα [serialport](http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx) αντικείμενο, που baudrate, το λιμάνι και άλλα περίεργα ρυθμίσεις, καλέστε ανοικτή σε αυτό, και να γράψουν byte [] s σας. Μετά από όλα τη ρύθμιση, το αντικείμενο serialport λειτουργεί πολύ παρόμοια με οποιοδήποτε δικτυωμένο ρεύμα, γι 'αυτό θα πρέπει να είναι αρκετά εύκολο να το καταλάβω.


Και όπως ibrandy κράτη, θα πρέπει να γνωρίζει όλες αυτές τις ρυθμίσεις, όπως το ρυθμό baud, πριν καν αρχίσουν προσπαθεί να επικοινωνήσει με οποιαδήποτε σειριακή συσκευή. 

 

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


Τα Windows σας επιτρέπει την πρόσβαση στη σειριακή θύρα μέσω CreateFile. Αυτό σας δίνει μια λαβή και από εκεί μπορείτε να διαμορφώσετε την πρόσβαση.

 

Από την Java η [rxtx](http://www.rxtx.org/) ( **ΜΗ ΔΙΑΘΕΣΙΜΟ πια** ) βιβλιοθήκη είναι αρκετά καλή. Είναι διαδέχεται τον αύξοντα πλαίσιο IO ήλιου σταμάτησε.

 

Για C / C ++ σε Windows θα πρέπει (τουλάχιστον) δύο επιλογές:


1. Χρησιμοποιήστε την κατηγορία serialport παρέχονται από .NET.
2. Χρησιμοποιήστε το Win32 API. Υπάρχει ένα [εκτενές άρθρο του MSDN](http://msdn.microsoft.com/en-us/library/ms810467.aspx) που χρονολογείται από το 1995., και πολλές ελεύθερες βιβλιοθήκες και τα παραδείγματα στο διαδίκτυο για να ξεκινήσετε.


Η επιλογή .NET θα είναι πολύ ευκολότερη.

 

Αν θέλετε να κώδικα σε Java Θα ήθελα να συστήσω πραγματικά SerialIOs [serialport](http://serialio.com/products/serialport/serialport.php) . Είναι πολύ εύκολο στη χρήση και σας εξοικονομεί ημέρες εργασίας. Ποτέ δεν έχω βρεθεί μια βιβλιοθήκη ανοικτού κώδικα τόσο καλή όσο SerialIO, πραγματικά!


Η συμβουλή μου: μην χρησιμοποιείτε σειριακή πλαίσιο IO Ήλιου! Είναι από το 1998 και γεμάτη σφάλματα. Μπορείτε να χρησιμοποιήσετε [rxtx](http://www.rxtx.org/) αλλά serialio είναι καλύτερα!

 

Αν χρειάζεται να είναι cross platfrom, θα ήθελα να προτείνω κοιτάζοντας Boost [Asio](http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html) .

 

Λίγο πίσω έγραψα μια αξιοπρεπή μεγέθους αίτηση συνδέσεις διαδρομή από το αγρόκτημα του μόντεμ μέσω μια διεύθυνση δικτύου TCP / IP.


Αρχικά Κοίταξα για μια απρόσκοπτη (δωρεάν) Serial βιβλιοθήκη IO. Προσπάθησα της Sun, IBM και RxTx. Ήταν μια χαρά για την ανάπτυξη της εφαρμογής, καθώς και στην αρχική δοκιμή, αλλά στην παραγωγή το καθένα αποδείχθηκε ασταθής.


Τέλος, καταβάλλεται για serialport SerialIO του. Μετατρέποντας πάνω ήταν κυριολεκτικά μια άσκηση στην αλλαγή των εισαγωγών, και η βιβλιοθήκη ήταν ***απολύτως*** στερεά - δεν μπορώ να το συστήσω αρκετά. Η εφαρμογή μου έχει τρέξει στον τομέα 24/7 για μερικά χρόνια τώρα, με ούτε ένα πρόβλημα που αντιμετωπίζεται από πολλούς πελάτες.


Αν αρχίσετε να χρησιμοποιείτε ανάπτυξη serialport, έχουν μια καλύτερη API και θα ήθελα να το χρησιμοποιήσετε.


Αν χρειάζεστε υποστήριξη για cross platform, Java με serialport ήταν η καλύτερη επιλογή που μπορούσα να βρω.


Τέλος, η αδειοδότηση τους είναι αρκετά καταριέται λογικό εφ 'όσον δεν είστε προεγκατάσταση λογισμικού στον εξοπλισμό για τον πελάτη σας (ες).

 

Ανάλογα με τη συσκευή που προσπαθείτε να επικοινωνούν με, μπορεί να υπάρχουν περισσότερες παραμέτρους από το ρυθμό baud, ο αριθμός των bit δεδομένων, το είδος της ισοτιμίας έλεγχο και τον αριθμό των bit διακοπής για να εξετάσει. Αν θυμάμαι καλά, modems χρησιμοποιούν εννέα γραμμές της διεπαφής RS-232C. Ορισμένες συσκευές, όπως, για παράδειγμα μητρώα μετρητά, μπορεί να χρησιμοποιήσει χειραψία υλικού για RTS / CTS γραμμές ή σε γραμμές / STR DTR. 


Σε γενικές γραμμές είναι καλό να γνωρίζουμε πώς λειτουργεί το περιβάλλον. Δεν μπορείτε να επικοινωνείτε εάν ο ρυθμός Baud δεν ταιριάζει, αλλά λανθασμένη ρύθμιση άλλων παραμέτρων μπορεί να το είδος της εργασίας. Για παράδειγμα, μπορείτε να στείλετε εύκολα τα δεδομένα στη συσκευή περιμένουμε λίγο 1 στάση με 2 bits στάση που. Προβλήματα ξεκινήσει όταν Προσπαθείτε να λάβετε τα στοιχεία σε μια τέτοια περίπτωση. Μπορείτε επίσης να χρησιμοποιήσετε σωστά οριστεί bit ισοτιμίας ως ένα από τα bit διακοπής, κ.λπ.

 

Έχω χρησιμοποιήσει purejavacomm:
 [Είναι μια υλοποίηση του javax.comm γραμμένο σε καθαρή Java + JNA](http://www.sparetimelabs.com/purejavacomm/index.html)


Σε αντίθεση με rxtx, δεν χρειάζεται να εγκαταστήσετε ένα dll. Είναι γραμμένο σε καθαρή Java + JNA, η οποία έλυσε το πρόβλημα της φορητότητας των Windows και Linux για μένα. Θα πρέπει να είναι εύκολο να λιμένα με τα διάφορα OS-es που υποστηρίζει JNA, όπως Solaris και FreeBSD, αλλά δεν το έχω δοκιμάσει.


Μπορείτε να φανταστείτε ένα καθαρό βιβλιοθήκη της Java για να υστερεί σε σχέση με μια εγγενή εφαρμογή, όπως rxtx στην απόδοση, αλλά με σύγχρονες CPU, το εμπόδιο είναι πολύ πιθανό να είναι το bitrate της σειριακής θύρας σας, δεν κύκλους της CPU. Επίσης, είναι πολύ πιο εύκολο να διορθώσετε ό, τι μια μικτή Java / Native βιβλιοθήκη ή καθαρό καταρτίζονται εγγενή κώδικα.

 