Comment puis-je configurer et communiquer avec un port série?

voix
41

Je dois envoyer et recevoir des données via des connexions série (RS-232 et RS-422).

Comment puis-je configurer et communiquer avec une telle connexion? Comment puis-je savoir ce que les paramètres de configuration (par exemple, la vitesse de transmission) doit être et comment puis-je les mets?

En particulier, je cherche à faire en Java, C / C ++, ou l'un des principaux shells Unix mais j'ai aussi un certain intérêt pour la programmation en série avec Windows / Hyperterminal.

Créé 06/08/2008 à 04:19
source utilisateur
Dans d'autres langues...                            


11 réponses

voix
28

Construire une machine à temps et revenir à 1987? Ho ho.

Ok, pas plus de commentaires désobligeants.

Comment puis-je savoir ce que les paramètres de configuration (par exemple, la vitesse de transmission) doivent être ...

Lire la fiche technique? OK OK. Sérieusement, dernier. Si vous ne connaissez pas la vitesse de transmission de l'appareil que vous essayez de communiquer avec, vous avez deux choix. Commencez à deviner, ou peut-être le buste d'un o-champ. Si vous avez besoin d'un bon point de départ, permettez-moi de suggérer 9600-8-N-1. Je soupçonne que vous pouvez y arriver avec la force brute relativement rapidement. Il y a une troisième option d'avoir un ninja old-school qui peut dire que par l'apparence des caractères tronqués à un taux de transmission classique ce que la vitesse de transmission réelle est. Un truc du parti impressionnant pour être sûr.

Espérons que si vous avez accès à ces informations. Dans unix / linux, vous pouvez obtenir Ahold de Minicom pour jouer avec le port série directement. Cela devrait le rendre assez rapide pour obtenir la configuration compris.

l'un des principaux shells Unix

Dans Unix le port série (s) est / sont fichiers cartographié dans le répertoire / dev / subdir. ttyS0, par exemple. Si vous configurez la vitesse de transmission correcte et ainsi de suite en utilisant Minicom, vous pouvez même des trucs de chat à ce fichier pour envoyer des choses là-bas.

À la viande de la question, vous pouvez y accéder par programme les en-têtes POSIX. termios.h est le grand.

Voir: http://www.easysw.com/~mike/serial/serial.html#3_1 (ne sont plus disponible)

mais j'ai aussi un certain intérêt pour la programmation en série avec Windows / Hyperterminal.

Hyperterminal et Minicom sont essentiellement le même programme. En ce qui concerne la façon dont Windows Rentrons accès au port série, je vais laisser cette question pour quelqu'un d'autre. Je ne l'ai pas fait cela dans Windows depuis les jours Win95.

Créé 06/08/2008 à 04:27
source utilisateur

voix
10

Si vous voulez coder en Java Je recommande vraiment SerialIOs SerialPort . Il est très facile à utiliser et vous permet d' économiser jours de travail. Je ne l' ai jamais trouvé une bibliothèque open source aussi bien que serialio, vraiment!

Mon conseil: ne pas utiliser le cadre IO série de Sun! Il est de 1998 et plein de bugs. Vous pouvez utiliser rxtx mais serialio est mieux!

Créé 23/08/2008 à 09:15
source utilisateur

voix
8

C / C ++ sous Windows, vous avez (au moins) deux choix:

  1. Utilisez la classe SerialPort fourni par .NET.
  2. Utilisez l'API Win32. Il y a un long article MSDN datant de 1995, et de nombreuses bibliothèques libres et des exemples sur le web pour vous aider à démarrer.

L'option .NET sera beaucoup plus facile.

Créé 13/08/2008 à 13:44
source utilisateur

voix
4

Si elle doit être platfrom croix, je suggère regarder Boost Asio .

Créé 03/09/2008 à 13:12
source utilisateur

voix
3

Il y a quelque temps que j'ai écrit une application de taille décente aux connexions de route d'une ferme de modems par une adresse réseau TCP / IP.

Au départ, je cherchais une bibliothèque série IO non grevés (gratuit). J'ai essayé de Sun, IBM et RxTx. Ils étaient très bien pour le développement de l'application, et les tests initiaux, mais dans la production, ils se sont avérés chaque instable.

Enfin , je payé pour le SerialPort de serialio. La conversion était littéralement sur un exercice de l' évolution des importations, et la bibliothèque a été tout à fait solide comme le roc - Je ne peux pas recommander assez. Ma demande a été en cours d' exécution dans le domaine 24/7 pendant quelques années, pas un seul problème rencontré par plusieurs clients.

Si vous commencez le développement à l'aide SerialPort, ils ont une meilleure API et je l'utiliser.

Si vous avez besoin du support multi-plateforme, Java avec SerialPort était le meilleur choix que je pouvais trouver.

Enfin, leur licence est sacrément raisonnable aussi longtemps que vous n'êtes pas un logiciel préinstallez sur l'équipement pour votre client (s).

Créé 15/09/2008 à 20:16
source utilisateur

voix
3

Au travail, nous utilisons TeraTerm et realterm pour le contrôle des données série est correctement formaté. De plus, nous avons un séparateur de matériel avec un interrupteur afin que nous puissions surveiller le trafic à notre application via un câble de retour à un autre port.

Windows vous permet d'accéder au port série via CreateFile. Cela vous donne une poignée et à partir de là vous pouvez configurer l'accès.

Créé 06/08/2008 à 06:04
source utilisateur

voix
3

De l'autre côté, si vous voulez le faire en utilisant C #, qui fonctionnera sur Windows et Linux - avec quelques limitations (EDIT:. Qui peut être à jour , je n'ai aucun moyen de le tester.). Il suffit de créer un SerialPort objet, définissez son baudrate, le port et les autres paramètres impairs, appel ouvert, et écrire vos octets [] s. Après tout la configuration, l'objet SerialPort agit très similaire à un cours d' eau en réseau, il devrait donc être assez facile à comprendre.

Et comme les États ibrandy, vous avez besoin de connaître tous ces paramètres, comme la vitesse de transmission, avant même de commencer à tenter de communiquer à tout périphérique série.

Créé 06/08/2008 à 04:35
source utilisateur

voix
2

De Java le rxtx ( ne sont plus disponible de la bibliothèque) est tout à fait bonne. Il reprend là où le cadre IO série Sun a laissé.

Créé 08/08/2008 à 21:24
source utilisateur

voix
1

Si vous n'êtes pas obligé d'utiliser un compilateur particulier, je suggère d'utiliser Qt et dans la nouvelle version 5.3, vous trouverez une classe dédiée aux ports série:

http://qt-project.org/doc/qt-5/qserialport.html

Le code que vous écrirez fonctionnera sur toutes les plates-formes Qt supprited, au moins ceux qui ont des ports série.

Créé 06/09/2014 à 14:01
source utilisateur

voix
1

Selon l'appareil que vous essayez de communiquer avec, il peut y avoir plus de paramètres que la vitesse de transmission, nombre de bits de données, le type de contrôle de parité et le nombre de bits d'arrêt à considérer. Si je me souviens bien, les modems utilisent neuf lignes de l'interface RS-232C. Certains appareils comme, par exemple des caisses enregistreuses, peuvent utiliser du matériel sur handshake lignes RTS / CTS ou sur les lignes DTR / STR.

En général, il est bon de savoir comment fonctionne l'interface. Vous ne pouvez pas communiquer si la vitesse de transmission ne correspond pas, mais un mauvais réglage d'autres paramètres pourraient fonctionner en quelque sorte. Par exemple, vous pouvez facilement envoyer des données à l'appareil attend 1 bit d'arrêt avec 2 bits d'arrêt définis. Les problèmes commencent lorsque vous essayez de recevoir des données dans ce cas. Vous pouvez également utiliser le bit de parité appropriée définie comme l'un des bits d'arrêt, etc.

Créé 23/09/2008 à 02:21
source utilisateur

voix
0

J'utilise purejavacomm: Il est une implémentation de javax.comm écrit en Java + JNA

Contrairement à rxtx, vous n'avez pas besoin d'installer une dll. Il est écrit en Java + JNA, qui a résolu le problème de la portabilité entre Windows et Linux pour moi. Il devrait être facile au port à d'autres OS-es que la JNA soutient, comme Solaris et FreeBSD, mais je l'ai pas essayé.

Vous pourriez vous attendre une bibliothèque pure java en retard sur une implémentation native, comme rxtx dans la performance, mais avec CPU moderne, le goulot d'étranglement est très probablement le débit de votre port série, pas de cycles CPU. En outre, il est beaucoup plus facile à déboguer qu'une bibliothèque Java / natif mixte ou code natif pur compilé.

Créé 18/03/2013 à 11:59
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more