2010-12-15 8 views
1

Ok, donc je suis un noob complet à pySerial. J'essaie de communiquer avec un équipement de laboratoire, mais j'ai de la difficulté à envoyer la commande STX (Start of Text). Jusqu'à présent, mon code de base ressemble à:PySerial - ne peut pas envoyer STX

ser = serial.Serial(0, 19200, timeout=1,parity=serial.PARITY_ODD, rtscts=0) 
ser.write(0x02) #ASCII STX is 0x2 in hex 

Mais quand je regarde les 232 données sur mon champ d'application, le STX je suis en train d'envoyer, ne ressemble en rien une commande STX envoyé en Hperterminal.

Des idées? Je suis sûr que c'est incroyablement simple et je suis juste en train de négliger quelque chose de trivial.

Merci!

Répondre

0

Etes-vous sûr que la même configuration est utilisée pour HyperTerminal et PySerial? Vous devez vous assurer que les éléments suivants sont les mêmes:

  • Baudrate (vous utilisez 19200)
  • parité (vous utilisez PARITY_ODD)
  • Nombre de bits de données (par défaut pyserial 8)
  • bits d'arrêt (pySerial par défaut 1)
+0

Je l'ai fait vérifier, et les paramètres sont les mêmes. – KMB

4

La fonction d'écriture en série accepte les octets ou les chaînes. Vous passez un nombre entier de sorte que le résultat est inconnu, peut-être est-il en train de le transformer en str donc vous envoyez le caractère '2'.

La bonne façon de le faire est la suivante:

ser = serial.Serial(0, 19200, timeout=1,parity=serial.PARITY_ODD, rtscts=0) 
ser.write(chr(0x02)) #ASCII STX is 0x2 in hex 
+0

Ah, oui, ça a fait l'affaire! Merci! J'avais essayé d'envoyer un octet, mais je ne le transmettais pas encore en chr. – KMB