2017-07-11 2 views
0

J'utilise python 3.6. Le code suivant fonctionne très bien sur Windows 10 Pro:code pyserial fonctionnant sous Windows (COM1) mais pas sous Linux (/ dev/ttyS0)

import serial 
import binascii 

ser = serial.Serial("COM1") # "COM1" will be "/dev/ttyS0" on Linux 
if ser.is_open == True: 
    print("COM open") 

ser.baudrate = 2400 

print('Port configuration:') 
print('baudrate:',ser.baudrate) 
print('parity:',ser.parity) 
print('stopbits:',ser.stopbits) 
print('bytesize:',ser.bytesize) 
print('xonxoff:',ser.xonxoff) 
print('timeout:',ser.timeout) 
print() 
print('sending...') 
frame = bytearray() 
frame.append(0x7e) 
frame.append(0x03) 
frame.append(0x02) 
frame.append(0x21) 
frame.append(0x00) 
frame.append(0xa4) 
ser.write(frame) 
print(binascii.hexlify(frame)) 
print() 
print('receiving...') 
recv = ser.readline() 
recv_len = len(recv) 
print(binascii.hexlify(recv)) 
print() 
ser.close() 
if ser.is_open == False: 
    print("COM closed") 

Mais il est bloqué à « ser.readline() » quand je lance sous CentOS 6.8, car il n'y avait pas de câble attaché au port. Cela ressemble à un problème trivial, mais je n'arrive pas à comprendre ce qui ne va pas ou ce qui me manque.

Si vous ne pouvez pas non plus, j'espère que l'exemple de code peut être utile à quelqu'un au moins.

+0

la commande 'setserial -g/dev/ttyS *' sur mes CentOS renvoie '/ dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4','/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3', '/ dev/ttyS2, UART: inconnu, Port: 0x03e8, IRQ: 4','/dev/ttyS4, UART: inconnu, Port: 0x02f8, IRQ: 3' – ambrojohn

+0

Il se lit comme problème de ligne, voir par exemple cette réponse: https://stackoverflow.com/a/16961872/6401403 –

Répondre

0

Faux problème. Le code fonctionnait en utilisant ttyS1 au lieu de ttyS0 (je savais que c'était quelque chose de trivial). Quoi qu'il en soit, très utile pour vérifier

cat /proc/tty/driver/serial 

qui montre tx/rx statistiques et paramètres DTS, RTS, RI, etc. à côté de chaque port. Par exemple, à côté de la ttyS1, j'ai remarqué un 'RI' qui était le même paramètre que le terminal Hercules sur Windows m'a montré (graphiquement) quand j'ai essayé d'ouvrir COM1. Très intuitif pour identifier un port série de cette façon!