Python de la lecture et de l'écriture à l'ats
Arrière-plan: Si vous le souhaitez, passez à la section de problème
Je suis en train de travailler sur un front-end pour l'équipement de test. Le but de l'extrémité avant est de rendre plus facile d'écrire de longs scripts de test. À peu près juste de les rendre plus lisibles par l'homme et à l'écriture.
Le matériel sera testé à l'aide d'un Prologix GPIB-USB Controller (voir prologix.biz). Nous avons trouvé un tutoriel sur http://heliosoph.mit-links.info/gpib-on-debian-linux-the-easy-way/ et a fait toutes les étapes, et cela a fonctionné!
Que nous n'avons pas l'équipement de test encore, nous avons voulu écrire un émulateur en Python à l'aide de openpty. Nous avons le GPIB-USB Controller, tout simplement pas ce qui est connecté à. J'ai eu l'émulateur de travail comme un remplacement parfait pour le GPIB-USB. Cela signifie que je suis le "GPIB sur Debian ..." tutoriel (ci-dessus) et d'obtenir une sortie que j'ai programmé l'émulateur de retour. L'entrée et la sortie ont été fait de la même manière que le tutoriel juste de la lecture et de l'écriture à partir d'un pty périphérique (par exemple /dev/pts/2) au lieu de l'ats (par exemple /dev/ttyUSB0).
Maintenant que l'émulateur fonctionne, nous voulons écrire une extrémité avant qui peut être utilisé pour écrire des scripts facilement. Le but est de faire une sorte de système de macro qui écrit un tas de commandes lorsque nous appelons une fonction.
PROBLÈME: existe en utilisant à la fois l'émulateur et l'appareil
Je suis l'aide de la suite de fonctions Python à lire, à écrire, et d'ouvrir les ats/pty appareils, mais je n'obtiens pas le même résultat que j'obtiens si je viens d'utiliser echo et chat en bash.
tty = os.open(tty_path, os.O_RDWR)
os.read(tty, 100)
os.write(tty, "++ver")
par exemple, j'attendrais la suite pour avoir l'équivalent
$ cat < /dev/pty/2 & # According to the tutorial, this must be run in parallel
$ echo "++ver" > /dev/pty/2
Prologix GPIB Version 1.2.3.4 ...
et
tty = os.open("/dev/pyt/2", os.o_RDWR)
os.read(tty, 100) # In separate Thread to be run in parallel
os.write(tty, "++ver") # in main thread
La sortie est très différente, veuillez expliquer pourquoi et comment je peux le résoudre.
CODE COMPLET est ici: http://pastebin.com/PWVsMjD7
OriginalL'auteur aidan.plenert.macdonald | 2014-01-03
Vous devez vous connecter pour publier un commentaire.
Bien, j'ai demandé trop tôt. J'espère que quelqu'un profite de cette réponse.
Si cela fonctionne à lire et à écrire à partir à la fois l'émulateur et le réel de l'appareil. Je ne suis pas sûr de savoir exactement pourquoi, et vous serais reconnaissant une explication, mais ceci fonctionne dans tous mes tests
serial.Serial
que vous utilisez (manque une importation?)Je l'ai montée. MÉFIEZ-VOUS!! C'était il y a 3 ans donc j'ai peut-être tort, mais j'ai juste deviné étant donné que
python -c "import serial; print serial.Serial"
œuvresMerci, je suis juste à la recherche d'une solution qui me permet de parler à un ats, qui est une connexion bluetooth à un appareil. - Je ne pense pas que
serial
est un standard de python lib? est-ce la pySerial peut-être? Il ya un couple de choses qui n'ont pas de sens, mais je vais continuer à bosser 😉Avec pySerial, et la suppression de
self.setAddress(0)
ligne, cela fonctionne à merveille pour mon (admitadly hacky) script pour parler de bluetooth, sur un Mavericks Mac en 2017. Merci pour votre réponse rapide! `OriginalL'auteur aidan.plenert.macdonald
Vous n'avez pas fait d'utiliser un module spécial pour lire à partir d'ATS.
Option O_NOCTTY résolu mes problèmes avec CDCACM exemple MCU app.
Je suis sûr qu'il fera le travail pour vous (que vous travaillez sur Linux aussi).
OriginalL'auteur eugene-bright