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 № 1Ce 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)