Quiero enviar a través del puerto serie un dato de un byte hexadecimal
(por ejemplo 0x10 0x11 0xf3 lo que sea)
si hago n = 0x11
y después envío por el puerto serie así:
self.pserie.write(n)
en el receptor me llegan dos caracteres en dos bytes separados, en el
ejemplo dado recibo 1 1.
Como puedo hacer para enviar un dato de un byte y recibirlo exactamente igual.
Los datos que tengo que enviar los tengo en una tupla =
(0x10,0x11,0x45,0xf4) etc.
Estoy usando pyserial2.5, python2.6.6 en windows xp sp2.
Gracias.
_______________________________________________
pyar mailing list py...@python.org.ar
http://listas.python.org.ar/listinfo/pyar
PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
Hola lista, tengo el siguiente inconveniente:
Quiero enviar a través del puerto serie un dato de un byte hexadecimal
(por ejemplo 0x10 0x11 0xf3 lo que sea)
si hago n = 0x11
y después envío por el puerto serie así:
self.pserie.write(n)
Usa chr():
>>> c = chr(0x11)
>>> pserie.write(c)
O mejor aun, struct:
>>> import struct
>>> tupla = (0x10, 0x11, 0x45, 0xf4)
>>> s = struct.pack(4 * 'B', *tupla)
>>> s
'\x10\x11\x45\xf4'
>>> pserie.write(s)
--
Ramiro Morales
No me funciona con chr, si por ejemplo n=0x11escribo el puerto con
self.pserial.write(chr(n)) no envía nada, en cambio para 0x10 si,
depende el valor que le ponga transmite o no, si podés probalo. te
paso un código de pruebas, cambiá lo que escribe de 0x11 a 0x10 y vas
a ver cuantos bytes escribe cada vez (con 0x11 no escribe, devuelve 0)
#############################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
import serial
import time
import os
import string
#puerto serie a usar
PUERTO = 1
#timeout para lecturas
PSTOUT = 5
class main():
def __init__(self):
self.pserie = serial.Serial(serial.device(PUERTO), 19200,
xonxoff=True,writeTimeout=5)
print self.pserie.portstr
def comienzo(self):
self.pserie.flushInput()
enviados = self.pserie.write(chr(0x11))
print enviados
time.sleep(1)
if __name__ == '__main__':
principal = main()
principal.comienzo()
###########################################################################
gracias.
El problema ahora está al enviar '\x11' y otros valores que no se por
que no los envía.
Me corrijo, solo no envía 0x11 y 0x13. Alguien sabe por que?
for i in range(256):
enviados = self.pserie.write(chr(i))
if enviados == 0: print hex(i)
salida: 0x11
0x13
Esos son XON y XOFF[1], los caracteres que se usan para hacer flujo de
control por software. Fijate si podes configurar el puerto serie para
que haga flujo de control por hardware, sino no los vas a poder mandar
Saludos,
D.
[1] http://en.wikipedia.org/wiki/XON/XOFF
Si, evidentemente tiene que ver con eso y el software que estaba
usando para emular los puertos. Sacando los datos directamente al
puerto físico com1 anda bien. Gracias y perdón si molesté con una
tontería! debería haber aclarado que estaba usando puertos virtuales
me parece.