Los problemas con el envío de comandos a través de PySerial
-
29-09-2019 - |
Pregunta
Estoy intentando hablar con un hogar tarjeta hecha a través de un puerto serie, y para ello es el uso de PySerial. En Hiperterminal, todo funciona bien. Puedo escribir:
$ audio on
y el audio está activado, pero si uso
ser = serial.Serial("COM1", 38400)
ser.write("audio on\r\n")
no pasa nada. Soy capaz de leer los datos de entrada, sin embargo, así que no es algo malo en la comunicación. Yo no ayuda si cambio \ r \ n que acaba de \ no \ r tampoco.
EDIT: En algún momento que en realidad obtener la retroalimentación: No existe el comando al enviar el mismo comando exactamente como obras de HyperTerminal. La configuración es también exactamente el mismo que en HyperTerminal.
Resuelto: Para hacerlo funcionar, tuve que enviar a uno y otro carácter, y terminando con la transmisión \ r.
Solución
Obtener un osciloscopio (tienes uno, ¿verdad?) Y ver la línea serie. Enviar un carácter por segundo a través de él y ver lo que viene en el ámbito de aplicación (ajustado para que active el bit de inicio). los bits del puerto serie están en el orden:. inicio, LSB MSB .., paridad, parada
A ver si hay caracteres que no pudo contactar, o si hay un patrón. Otra posibilidad es que todo lo que es en realidad hacer fuera del puerto, y su junta directiva está cayendo caracteres.
Otros consejos
- cheque Triple que la velocidad de transmisión del dispositivo es de hecho 38400
- Comprobación de paridad triple, bits de parada, etc.
- Sea consciente de degradación de la señal para las transmisiones en serie a través de largas distancias (probablemente no es su problema)
Si todo el pago y envío por encima de intentar poner la cadena en una matriz de bytes y el envío de que a través del comando de escritura. Sólo una suposición.
Envío de caracteres con HyperTerminal entregan caracteres a la velocidad que se escriben. El envío de caracteres a través PySerial que se entregan como un flujo continuo. El receptor (especialmente a altas velocidades de transmisión) podría caer ellos, dependiendo de la naturaleza del receptor.
Además, al enviar comandos a un intérprete, sólo se necesita el terminador \ r (sin el \ n), (esto es todo lo que se envía por Hyperterm, normalmente). Sin embargo, si sólo están exhibiendo los valores, es posible que tenga el \ n para generar la nueva línea.