[Python-es] script_IBOB

Chema Cortes pych3m4 en gmail.com
Mie Mayo 20 20:57:45 CEST 2015


El 19 de mayo de 2015, 17:19, Rolando Paz <flxpaz en gmail.com> escribió:

> Hola buenos dias.
>
> Lo que he logrado entender, considerando que lo que quiero es graficar los
> datos que salen de la IBOB, es lo siguiente:
>
>
> a. Los datos que procesa la IBOB se graban en una memoria compartida de mi
> diseño, y son datos de 32 bit signed.
>
> b. Estos datos son los que viajan por medio de UDP.
> El archivo adjunto main.c es el que yo utilizo para automatizar la
> transmisión de los paquetes UDP que salen de la IBOB.
> Y el comando dump_data es el que yo debo usar para obtener los datos.
>
> static void dump_data_cmd(int argc, char **argv)
> {
> 	for(x=0; x<2048; x++){
> 		value = sif_bram_read(XPAR_POCO_TEST_V7_XENGINE_AA_REAL_BASEADDR, x);
> 		xil_printf("%08d %08d\n\r", x, value);
> 	}
> }
>
> c. Luego que yo inicializo la transmisión de los paquetes UDP, entiendo que yo debo abrir un socket UDP de esta forma para obtener los datos del puerto ethernet de la IBOB.
>
> import numpy as np
> import math, struct, socket
> import matplotlib.pyplot as plt
>
> HOST = '169.254.128.32'
> PORT = 6969
>
> #estableciendo el socket UDP
> cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
> cs.connect((HOST, PORT))
>
> d. Luego de tener abierto el socket, yo debo obtener los datos y desempaquetarlos de esta forma:
>
> #desempaquetando datos binarios enviados por el enlace UDP
> resp = cs.recv(4096)
> pkglen = struct.calcsize('<l')
>     dataUDP = (struct.unpack('<l', s[i:i+pkglen]) for i in range(0,len(resp),pkglen))
>
> e. Entiendo que acá yo tendría los datos binarios y que debo convertir en enteros o reales para poder ser graficados con matplotlib.
>
> data = np.array(dataUDP,dtype=float) .
> plt.plot(data)
> plt.show()
>
> Este análisis de la solución está bien orientada?
>
>
Es correcto. Lo único date cuenta que 'dataUDP' era una lista de enteros y
que 'data' lo creas como array de 'floats'. Parece innecesaria esta
conversión.

Aunque lo mejor es ahorrarte algunos pasos y usar directamente
np.fromstring:

resp = cs.recv(4096)
data = np.fromstring(resp, dtype=np.uint32)


>
> Saludos
>
> Rolando Paz
>
>
> El 18 de mayo de 2015, 18:02, Chema Cortes <pych3m4 en gmail.com> escribió:
>
>>
>>
>> El 18 de mayo de 2015, 16:29, Rolando Paz <flxpaz en gmail.com> escribió:
>>
>>> Hola Chema
>>>
>>> Los datos que yo recibo de la IBOB son datos signed de 32 bit, creo que
>>> lo correcto seria "<l"?
>>>
>>> De acuerdo a tus observaciones, entonces el código debería ser así:
>>>
>>> #!/usr/bin/python
>>> """
>>> Primera prueba que busca graficar los datos binarios enviados por UDP
>>> desde la IBOB.
>>> Rolando Paz
>>> """
>>> import numpy as np
>>> import math, struct, socket
>>> import matplotlib.pyplot as plt
>>>
>>> HOST = '169.254.128.32'
>>> PORT = 6969
>>>
>>> #estableciendo el socket UDP
>>> cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>> cs.connect((HOST, PORT))
>>>
>>> #desempaquetando datos binarios enviados por el enlace UDP
>>> pkglen = struct.calcsize('<l')
>>>     dataUDP = (struct.unpack('<f', s[i:i+pkglen]) for i in
>>> range(0,len(resp),pkglen))
>>>
>>
>> Si recibes "unsigned 32bits", no lo desempaquetes entonces  como floats.
>>
>>
>>>
>>> data = np.array(dataUDP,dtype=float)
>>>
>>
>> Lo mismo, si son enteros, ¿necesitas que sean floats para algo?
>>
>>
>>> plt.plot(data)
>>> plt.show()
>>>
>>> Es correcto el código?
>>>
>>
>> Lo más divertido del python es probar a ver si funciona.
>>
>>
>>>
>>> Saludos
>>>
>>> Rolando Paz
>>>
>>>
>>> El 18 de mayo de 2015, 3:33, Chema Cortes <pych3m4 en gmail.com> escribió:
>>>
>>>>
>>>>
>>>> El 17 de mayo de 2015, 1:02, Rolando Paz <flxpaz en gmail.com> escribió:
>>>>
>>>>> Hola nuevamente !
>>>>>
>>>>> Este script lo que debe hacer es obtener los datos desde una tarjeta
>>>>> llamada IBOB (que en algún momento comenté por acá), enviados por UDP, y
>>>>> luego graficarlos.
>>>>>
>>>>> Los datos son FFTs (Fast Fourier Transform) que procesa la IBOB.
>>>>>
>>>>> Pueden darme su opinión?
>>>>>
>>>>
>>>> Parece un código bastante directo. Si funciona, no hay más que decir.
>>>>
>>>> Tal como está, a la dirección de HOST le faltan las comillas y la
>>>> variable cs de pronto se expande como controlsocket. Por lo demás, ¿es
>>>> necesario desempaquetar los datos recibidos como "unsigned long" (>L)? Si
>>>> los datos se envían como floats, igual sería mejor desempaquetarlos
>>>> directamente como float (>f). Ten en cuenta que np.array no te hace una
>>>> conversión binaria de un "long" en "float".
>>>>
>>>> Por otro lado, del socket puedes recibir cualquier cantidad de datos,
>>>> pero en cambio sólo estás desempaquetando un único dato, algo ilógico
>>>> porque debes esperar más si quieres hacer una gráfica con ello, y además da
>>>> error. Supongo que lo que buscas es desempaquetar una secuencia de datos:
>>>>
>>>>     pkglen = struct.calcsize(fmt)
>>>>     dataUDP = (struct.unpack('>f', s[i:i+pkglen]) for i in
>>>> range(0,len(resp),pkglen))
>>>>
>>>>
>>>>
>>>>>
>>>>> #!/usr/bin/python
>>>>> """
>>>>> Primera prueba que busca graficar los datos binarios enviados por UDP,
>>>>> Rolando Paz
>>>>> """
>>>>> import numpy as np
>>>>> import math, struct, socket, pyfits
>>>>> import matplotlib.pyplot as plt
>>>>>
>>>>> HOST = 169.254.128.32
>>>>> PORT = 6969
>>>>> print '\nConectando la iBOB...',
>>>>>
>>>>> #estableciendo el socket UDP
>>>>> cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>>>> cs.connect((HOST, PORT))
>>>>>
>>>>> resp = controlsocket.recv(4096)
>>>>> print resp
>>>>>
>>>>> #desempaquetando datos binarios enviados por el enlace UDP
>>>>> dataUDP = struct.unpack('>L',resp)
>>>>> data = np.array(dataUDP,dtype=float)
>>>>> plt.plot(data)
>>>>> plt.show()
>>>>>
>>>>> _______________________________________________
>>>>> Python-es mailing list
>>>>> Python-es en python.org
>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>>>> http://ch3m4.org/blog
>>>> Buscador Python Hispano: http://ch3m4.org/python-es
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es en python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>>
>> --
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>> http://ch3m4.org/blog
>> Buscador Python Hispano: http://ch3m4.org/python-es
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20150520/d920c180/attachment.html>


Más información sobre la lista de distribución Python-es