[pyar] Controlador de surtidores por TCP/IP

Marcelo Fernandez marcelo.fidel.fernandez en gmail.com
Mar Oct 4 11:34:23 ART 2011


El día 4 de octubre de 2011 09:47, Python - CD Soft
<python en cdsoft.com.uy> escribió:
> El 04/10/2011 10:38, Marcelo Fernandez escribió:
>>
>> El día 4 de octubre de 2011 09:18, Python - CD Soft
>> <python en cdsoft.com.uy>  escribió:
>>>
>>> Estimados, como están?
>>>
>>> Los molesto para consultarles los siguiente.
>>>
>>> Tengo que conectar mediante TCP/IP a un controlador de surtidor, y
>>> enviarle
>>> unos parámetros en hexadecimal para que este me devuelva una respuesta.
>>>
>>> Pienso usar el modulo socket, me podrían decir si esta bien al usar este
>>> modulo, si hay algún otro, y cual es?
>>>
>>> Estuve probando un poco pero me da error, creo que es porque no le envió
>>> los
>>> datos en hexadecimal.
>>>
>>> Cualquier ayuda es bienvenida.
>>>
>>> Saludos.
>>>
>>> Gracias.
>>>
>>> Carlos.
>>>
>> Hola Daniel,
>>
>> Socket es un módulo de bastante bajo nivel que sólo te permite
>> interactuar a nivel TCP, ¿tenés idea si maneja algún protocolo de
>> internet o estándar para el control del dispositivo sobre TCP/IP? Se
>> me ocurren telnet, ssh, http, etc.... python tiene módulos para todos
>> esos y te ahorrás mucho trabajo implementándolos vos desde socket.
>>
>> Por otra parte, para manejarte con los datos "en hexadecimal", mirá el
>> módulo struct.
>>
>> http://docs.python.org/library/struct.html
>>
>> Saludos
>
> Gracias Marcelo por responder.
>
> Me pasaron un documento con el protocolo y dice "Se especifica a
> continuación mensajería de PAM-PC para POS basado en protocolo Pos Service
> para CEM44."
>
> Tambien me pasaron el software "Docklight Scripting" donde ingreso la ip y
> el puerto y le envió la secuencia en hexadecimal y la PAM me responde.
>
> Voy a leer un poco de lo que me pasate.
>
> Gracias.
>

Hola Carlos (le pifié con el nombre antes, je),

Uhm... viendo el software que tenés [1], lo más probable es que no
haya protocolo más que enviar y recibir bytes "a pelo" estilo
hyperterminal/minicom (pero en hexa, no en ascii) por el puerto TCP.
Yo empezaría por establecer el socket TCP y enviar (socket.write()) y
leer (socket.read()) la secuencia que tenés en hexa. La misma
documentación de python tiene ejemplos [2], fijate el de "Echo client
program" que es bien básico.

Como dice Diego, sin meterte con struct podés usar strings estilo
'\x00\xff' para hacer pruebas; la lectura asumo que la vas a hacer en
bytes también, con lo cual por ahí tenés que usar el módulo binascii
[3] para convertir desde/hacia hexa/ascii. Struct va un poco más allá
y es más estructurado o rígido por así decirlo, pero en los casos que
lo usé dependió de lo que había del otro lado.

Por otra parte, usar twisted IMHO es un poco demasiado, al menos hasta
no tener un prototipo funcionando, ya que Twisted tiene una curva de
aprendizaje alta a cambio de rendimiento, y lo que vos necesitás es
tener algo andando (de nuevo, IMHO).

[1] http://www.docklight.de/udp_tcp_info.htm
[2] http://docs.python.org/library/socket.html#example
[3] http://docs.python.org/library/binascii.html

Saludos
-- 
Marcelo F. Fernández
Buenos Aires, Argentina
Licenciado en Sistemas - CCNA

E-Mail: marcelo.fidel.fernandez en gmail.com
Blog: http://blog.marcelofernandez.info
Twitter: http://twitter.com/fidelfernandez



More information about the pyar mailing list