Tengo una pregunta un tanto ignorante (¿quizás?). Estoy trabajando con la escritura en un dispositivo en serie por primera vez. Tengo un marco [12, 0, 0, 0, 0, 0, 0, 0, 7, 0, X, Y] que necesito enviar. X e Y son valores de suma de comprobación. Mi comprensión al usar el módulo pyserial es que necesito convertir este marco en una representación de cadena. Ok eso está bien, pero estoy confundido sobre qué cosas formato se supone que deben estar. Intenté hacerDe decimal a hexadecimal en python
a = [12, 0, 0, 0, 0, 0, 0, 0, 7, 0, X, Y]
send = "".join(chr(t) for t in a)
Pero mi confusión proviene del hecho de que X e Y, al utilizar CHR, se transforman en cadenas extrañas (asumiendo su representación ascii). Por ejemplo, si X es 36, chr (x) es '$' en lugar de '\ x24'. ¿Hay alguna manera de que pueda obtener una cadena que represente el valor '\ xnn' en lugar del código ascii? Lo que me confunde es que 12 y 7 se convierten correctamente en '\ x0b' y '\ x07'. ¿Me estoy perdiendo de algo?
Actualización:
lo tanto, podría ser que no estoy bastante entender cómo se están haciendo las escrituras de serie o lo que mi dispositivo está a la espera de mí. Esta es una parte de mi código C que está trabajando:
fd=open("/dev/ttyS2",O_RDWR|O_NDELAY);
char buff_out[20]
//Next line is psuedo
for i in buff_out print("%x ",buff_out[i]); // prints b 0 0 0 0 0 0 0 9 b3 36
write(fd,buff_out,11);
sleep()
read(fd,buff_in,size);
for i in buff_in print("%x ",buff_in[i]); // prints the correct frame that I'm expecting
Python:
frame = [11, 0, 0, 0, 0, 0, 0, 0, 9] + [crc1, crc1]
senddata = "".join(chr(x) for x in frame)
IEC = serial.Serial(port='/dev/ttyS2', baudrate=1200, timeout=0)
IEC.send(senddata)
IEC.read(18) # number of bytes to read doesn't matter, it's always 0
¿Voy esto de la manera correcta? Obviamente no se puede decir exactamente porque es un dispositivo específico y realmente no puedo dar demasiados detalles. ¿Pero es ese el formato correcto en el que serial.send() espera datos?
A partir de la documentación de Python, chr() devuelve el número que entrar en él como un personaje ascii. 12 y 7 en ascii son los "caracteres" de la campana y la forma, que Python puede no ser capaz de imprimir (no estoy seguro). Por lo tanto, podría ser una representación hexadecimal por defecto, ya que son indisponibles. – Joel
12 debe ser \ x0c, no \ x0b ... – EOL
Lo siento, quise decir \ x0c. Tengo otro marco que comienza con 11 – Falmarri