/ / pySerial peut écrire, mais pas lire - Python, port série, pyserial

pySerial peut écrire, mais pas lire - python, port série, pyserial

J'essaie d'utiliser pySerial sur Windows 10machine (Python 3.6.4, 32 bits) pour lire les données série d’un équipement de laboratoire qui enregistrerait normalement ses données sur une imprimante série ASCII. Connexion à l'aide d'un adaptateur USB / série.

Si je connecte l'ordinateur à l'imprimante, je peuxprint en utilisant serial.write (), donc je sais que mon adaptateur fonctionne. Cependant, lorsque je connecte l'ordinateur au matériel de laboratoire et que je tente de lire les données à l'aide du code suivant, je ne reçois rien du tout:

import serial
ser = serial.Serial("COM5")
while True:
if ser.in_waiting != 0:
datastring = ser.read(size=ser.in_waiting)
print(str(datastring))

Je sais que le matériel de laboratoire transmet quand jelancez le code. Vous avez également essayé de connecter deux adaptateurs USB / série à l'ordinateur avec un câble série entre les adaptateurs et d'envoyer des données d'un port série à l'autre. Encore une fois, je peux écrire sans problème, mais l’autre port ne reçoit rien.

EDIT: Je me suis avéré avoir un problème matériel. J'avais connecté l'équipement de laboratoire à mon adaptateur USB / série (et, aux fins de test, aux deux adaptateurs USB / série l'un à l'autre) à l'aide d'un câble série standard. La connexion à l'aide d'un modem nul a résolu le problème.

Réponses:

0 pour la réponse № 1

Ce type de problème a de nombreuses causes. La première chose qui me vient à l’esprit est que vous avez un faible timeout pour votre série, et vous fermez la connexion avant que rien ne puisse être reçu:

ser = serial.Serial("COM5", timeout=None)

les autres valeurs que vous pouvez vérifier sont les suivantes:

ser = serial.Serial("COM5", baudrate=9600, bytesize=8, parity="N", stopbits=1, timeout=None, xonxoff=False, rtscts=False)

0 pour la réponse № 2

si vous avez un problème de débit, vous devez déclarer quelque chose qui ressemble à:

import serial
ser = serial.Serial("COM5", 9600, timeout=None) #<- 9600 is the baud rate

while True:
data = ser.readline()
print(data)

MODIFIER

While True:
bytesToRead = ser.inWaiting()
data=ser.read(bytesToRead)
print(data)