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

Translate

J'ai besoin d'envoyer et de recevoir des données via des connexions série (RS-232 et RS-422).

Comment configurer et communiquer avec une telle connexion? Comment déterminer quels doivent être les paramètres de configuration (par exemple, la vitesse de transmission) et comment les définir?

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

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Construire une machine à remonter le temps et remonter à 1987? Ho ho.

Ok, plus de commentaires sournois.

Comment déterminer quels devraient être les paramètres de configuration (par exemple, la vitesse de transmission) ...

Lire la fiche technique? OK OK. Sérieusement, dernier. Si vous ne connaissez pas la vitesse de transmission de l'appareil avec lequel vous essayez de communiquer, vous avez deux choix. Commencez à deviner, ou peut-être éclater un o-scope. Si vous avez besoin d'un bon point de départ, laissez-moi vous suggérer 9600-8-N-1. Je soupçonne que vous pouvez y arriver avec la force brute relativement rapidement. Il existe une troisième option pour avoir un ninja de la vieille école qui puisse dire simplement par le REGARD des caractères déformés à une vitesse de transmission standard quel est le taux de transmission réel. Un truc de fête impressionnant pour être sûr.

J'espère que vous avez accès à ces informations. Sous unix / linux, vous pouvez accéder à minicom pour jouer directement avec le port série. Cela devrait rendre la configuration assez rapide.

l'un des principaux shells Unix

Sous Unix, le (s) port (s) série est / sont mappé (s) dans le fichier / dev / subdir. ttyS0, par exemple. Si vous configurez le débit en bauds correct et tout le reste en utilisant minicom, vous pouvez même envoyer des éléments dans ce fichier pour envoyer des éléments là-bas.

Sur l'essentiel de la question, vous pouvez y accéder par programme via les en-têtes POSIX. termios.h est le plus gros.

See: http://www.easysw.com/~mike/serial/serial.html#3_1 (PLUS DISPONIBLE)

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

Hyperterminal et minicom sont fondamentalement le même programme. Quant à savoir comment Windows vous permet d'accéder au port série, je laisserai cette question à quelqu'un d'autre. Je n'ai pas fait cela sous Windows depuis l'époque de Win95.

La source
Translate

Si vous voulez coder en Java, je recommande vraiment SerialIOsPort série. Il est très facile à utiliser et vous fait gagner des jours de travail. Je n'ai jamais trouvé une bibliothèque open source aussi bonne que SerialIO, VRAIMENT!

Mon conseil: n'utilisez pas le framework d'E / S série de Sun! C'est de 1998 et plein de bugs. Vous pouvez utiliserrxtxmais serialio c'est mieux!

La source
smh
Translate

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

  1. Utilisez la classe SerialPort fournie par .NET.
  2. Utilisez l'API Win32. Il y a unarticle MSDN détaillédatant de 1995, et de nombreuses bibliothèques et exemples gratuits sur le Web pour vous aider à démarrer.

L'option .NET sera beaucoup plus simple.

La source
Translate

S'il doit être cross platfrom, je suggérerais de regarder BoostAsio.

La source
Translate

Au travail, nous utilisons teraterm et realterm pour vérifier que les données série sont correctement formatées. Nous avons également un séparateur matériel avec un commutateur afin que nous puissions surveiller le trafic vers notre application via un câble vers 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.

La source
Translate

Il y a quelque temps, j'ai écrit une application de taille décente pour acheminer les connexions d'une ferme de modems vers une adresse réseau TCP / IP.

Au départ, j'ai recherché une bibliothèque d'E / S série libre (gratuite). J'ai essayé Sun, IBM et RxTx. Ils étaient bien pour le développement de l'application et lors des tests initiaux, mais en production, ils se sont tous avérés instables.

Enfin, j'ai payé le SerialPort de SerialIO. La conversion était littéralement un exercice de modification des importations, et la bibliothèque a étéabsolumentsolide comme le roc - je ne saurais trop le recommander. Mon application fonctionne sur le terrain 24h / 24 et 7j / 7 depuis quelques années maintenant, sans aucun problème rencontré par plusieurs clients.

Si vous commencez le développement en utilisant SerialPort, ils ont une meilleure API et je l'utiliserais.

Si vous avez besoin d'un support multiplateforme, Java avec SerialPort était le meilleur choix que j'ai pu trouver.

Enfin, leur licence est sacrément raisonnable tant que vous ne préinstallez pas de logiciel sur l'équipement pour vos clients.

La source
Translate

De l'autre côté, si vous voulez le faire en utilisant C #, qui fonctionnera à la fois sous Windows et Linux - avec quelqueslimites(EDIT: qui peut être obsolète. Je n'ai aucun moyen de le tester.). Créez simplement unPort sérieobjet, définissez son débit en bauds, son port et tout autre paramètre étrange, appelez open dessus et écrivez vos octets [] s. Après toute la configuration, l'objet SerialPort agit de manière très similaire à n'importe quel flux en réseau, il devrait donc être assez facile à comprendre.

Et comme le déclare ibrandy, vous devez connaître tous ces paramètres, comme la vitesse de transmission, avant même de commencer à essayer de communiquer avec un périphérique série.

La source
Translate

Selon l'appareil avec lequel vous essayez de communiquer, il peut y avoir plus de paramètres que la vitesse de transmission, le nombre de bits de données, le type de contrôle de parité et le nombre de bits d'arrêt à prendre en compte. Si je me souviens bien, les modems utilisent neuf lignes de l'interface RS-232C. Certains appareils comme, par exemple, les caisses enregistreuses, peuvent utiliser la connexion matérielle sur les 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 le débit en bauds ne correspond pas, mais un mauvais réglage d'autres paramètres peut fonctionner. Par exemple, vous pouvez facilement envoyer des données à l'appareil en attendant 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é correctement défini comme l'un des bits d'arrêt, etc.

La source
Translate

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 prises en charge, du moins celles qui ont des ports série.

La source
Translate

J'utilise purejavacomm:C'est une implémentation de javax.comm écrite en pur java + JNA

Contrairement à rxtx, vous n'avez pas besoin d'installer une DLL. Il est écrit en pur Java + JNA, ce qui a résolu le problème de la portabilité entre Windows et Linux pour moi. Il devrait être facile de porter sur d'autres systèmes d'exploitation pris en charge par JNA, tels que Solaris et FreeBSD, mais je ne l'ai pas essayé.

Vous pouvez vous attendre à ce qu'une bibliothèque Java pure soit à la traîne par rapport à une implémentation native telle que rxtx en termes de performances, mais avec les processeurs modernes, le goulot d'étranglement est très probablement le débit de votre port série, pas les cycles de processeur. En outre, il est beaucoup plus facile à déboguer qu'une bibliothèque mixte Java / Native ou du code natif compilé pur.

La source