<div dir="ltr">Hola buenos dias.<div><br></div><div>Lo que he logrado entender, considerando que lo que quiero es graficar los datos que salen de la IBOB, es lo siguiente:</div><div><br></div><div><br></div><div>a. Los datos que procesa la IBOB se graban en una memoria compartida de mi diseño, y son datos de 32 bit signed.</div><div><br></div><div>b. Estos datos son los que viajan por medio de UDP. </div><div>El archivo adjunto main.c es el que yo utilizo para automatizar la transmisión de los paquetes UDP que salen de la IBOB. </div><div>Y el comando dump_data es el que yo debo usar para obtener los datos.</div><div><pre style="white-space:pre-wrap"><font color="#0000ff">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);
        }
}</font></pre><pre><font color="#000000" face="arial, sans-serif"><span style="white-space:pre-wrap">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.</span></font><span style="white-space:pre-wrap"><br></span></pre><pre><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px;white-space:normal"><div><font color="#9900ff" face="arial, helvetica, sans-serif">import numpy as np<br></font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">import math, struct, socket   </font></div></span><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px;white-space:normal"><font color="#9900ff" face="arial, helvetica, sans-serif">import matplotlib.pyplot as plt</font></span></pre><pre><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px;white-space:normal"><div><font color="#9900ff" face="arial, helvetica, sans-serif">HOST = '169.254.128.32' </font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">PORT = 6969</font></div><div><br></div></span><div style="font-size:13px;white-space:normal;font-family:arial,sans-serif;color:rgb(80,0,80)"><font face="arial, helvetica, sans-serif"><span style="color:rgb(153,0,255)">#estableciendo el socket UDP</span><br></font></div><div style="font-size:13px;white-space:normal;font-family:arial,sans-serif;color:rgb(80,0,80)"><font color="#9900ff" face="arial, helvetica, sans-serif">cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)</font></div><div style="font-size:13px;white-space:normal;font-family:arial,sans-serif;color:rgb(80,0,80)"><font color="#9900ff" face="arial, helvetica, sans-serif">cs.connect((HOST, PORT))</font></div><div style="font-size:13px;white-space:normal;font-family:arial,sans-serif;color:rgb(80,0,80)"><font color="#9900ff" face="arial, helvetica, sans-serif"><br></font></div><div style="font-size:13px;white-space:normal;font-family:arial,sans-serif"><font face="arial, helvetica, sans-serif" color="#000000">d. Luego de tener abierto el socket, yo debo obtener los datos y desempaquetarlos de esta forma:</font></div><div style="font-size:13px;white-space:normal;font-family:arial,sans-serif"><font face="arial, helvetica, sans-serif" color="#000000"><br></font></div><div style="font-size:13px;white-space:normal;font-family:arial,sans-serif"><span style="color:rgb(80,0,80)"><font face="arial, helvetica, sans-serif"><span style="color:rgb(153,0,255)">#desempaquetando datos binarios enviados por el enlace UDP</span><br></font></span><div><font color="#9900ff">resp = cs.recv(4096)</font><font color="#9900ff" face="arial, helvetica, sans-serif" style="color:rgb(80,0,80)"><br></font></div><div style="color:rgb(80,0,80)"><font color="#9900ff" face="arial, helvetica, sans-serif">pkglen = struct.calcsize('<l')<br></font></div><span style="color:rgb(80,0,80)"><font color="#9900ff" face="arial, helvetica, sans-serif">    dataUDP = (struct.unpack('<l', s[i:i+pkglen]) for i in range(0,len(resp),pkglen))</font></span></div><div style="font-size:13px;white-space:normal;font-family:arial,sans-serif"><span style="color:rgb(80,0,80)"><font color="#9900ff" face="arial, helvetica, sans-serif"><br></font></span></div><div><font color="#000000" face="arial, helvetica, sans-serif"><span style="white-space:normal">e. Entiendo que acá yo tendría los datos binarios y que debo convertir en enteros o reales para poder ser graficados con matplotlib.</span></font></div><div><font color="#000000" face="arial, helvetica, sans-serif"><span style="white-space:normal"><br></span></font></div><div><span style="color:rgb(153,0,255);font-family:arial,helvetica,sans-serif;font-size:13px;white-space:normal">data = np.array(dataUDP,dtype=float) .</span><font color="#000000" face="arial, helvetica, sans-serif"><span style="white-space:normal"><br></span></font></div><div><div style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px;white-space:normal"><font color="#9900ff" face="arial, helvetica, sans-serif">plt.plot(data)</font></div><div style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px;white-space:normal"><font color="#9900ff" face="arial, helvetica, sans-serif">plt.show()</font></div></div><div style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px;white-space:normal"><br></div><div style="font-family:arial,sans-serif;font-size:13px;white-space:normal"><font color="#000000">Este análisis de la solución está bien orientada?</font></div><div style="font-family:arial,sans-serif;font-size:13px;white-space:normal"><font color="#000000"><br></font></div><div style="font-family:arial,sans-serif;font-size:13px;white-space:normal"><font color="#000000">Saludos</font></div><div style="font-family:arial,sans-serif;font-size:13px;white-space:normal"><font color="#000000"><br></font></div><div style="font-family:arial,sans-serif;font-size:13px;white-space:normal"><font color="#000000">Rolando Paz </font></div></pre></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 18 de mayo de 2015, 18:02, Chema Cortes <span dir="ltr"><<a href="mailto:pych3m4@gmail.com" target="_blank">pych3m4@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">El 18 de mayo de 2015, 16:29, Rolando Paz <span dir="ltr"><<a href="mailto:flxpaz@gmail.com" target="_blank">flxpaz@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hola Chema<div><br></div><div>Los datos que yo recibo de la IBOB son datos signed de 32 bit, creo que lo correcto seria "<l"?</div><div><br></div><div>De acuerdo a tus observaciones, entonces el código debería ser así:</div><div><div><br></div><div><div dir="ltr" style="font-size:13px"><div><font color="#9900ff" face="arial, helvetica, sans-serif">#!/usr/bin/python</font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">"""</font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">Primera prueba que busca graficar los datos binarios enviados por UDP desde la IBOB.</font></div><span><div><font color="#9900ff" face="arial, helvetica, sans-serif">Rolando Paz <br></font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">"""</font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">import numpy as np<br></font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">import math, struct, socket   </font></div></span><span><div><font color="#9900ff" face="arial, helvetica, sans-serif">import matplotlib.pyplot as plt</font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif"><br></font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">HOST = '169.254.128.32' </font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">PORT = 6969</font></div><div><br></div></span><span><div><font face="arial, helvetica, sans-serif"><span style="color:rgb(153,0,255)">#estableciendo el socket UDP</span><br></font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)</font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">cs.connect((HOST, PORT))</font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif"><br></font></div></span><span><div><font face="arial, helvetica, sans-serif"><span style="color:rgb(153,0,255)">#desempaquetando datos binarios enviados por el enlace UDP</span><br></font></div></span><div><font color="#9900ff" face="arial, helvetica, sans-serif">pkglen = struct.calcsize('<l')<br></font></div><span><div><div><div><font color="#9900ff" face="arial, helvetica, sans-serif">    dataUDP = (struct.unpack('<f', s[i:i+pkglen]) for i in range(0,len(resp),pkglen))</font></div></div></div></span></div></div></div></div></blockquote><div><br></div></span><div>Si recibes "unsigned 32bits", no lo desempaquetes entonces  como floats.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div dir="ltr" style="font-size:13px"><span><div><font face="arial, helvetica, sans-serif"><br></font></div></span><span><div><font face="arial, helvetica, sans-serif"><span style="color:rgb(153,0,255)">data = np.array(dataUDP,dtype=float)       </span><br></font></div></span></div></div></div></div></blockquote><div><br></div><div>Lo mismo, si son enteros, ¿necesitas que sean  floats para algo? <br></div><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div dir="ltr" style="font-size:13px"><span><div><font face="arial, helvetica, sans-serif"></font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">plt.plot(data)</font></div><div><font color="#9900ff" face="arial, helvetica, sans-serif">plt.show()</font></div><div style="color:rgb(80,0,80)"><font color="#0000ff"><br></font></div></span><div><font color="#000000">Es correcto el código?</font></div></div></div></div></div></blockquote><div><br></div></span><div>Lo más divertido del python es probar a ver si funciona.<br></div><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div dir="ltr" style="font-size:13px"><div><font color="#000000"><br></font></div><div><font color="#000000">Saludos</font></div><span><font color="#888888"><div><font color="#000000"><br></font></div><div><font color="#000000">Rolando Paz </font></div><div style="color:rgb(80,0,80)"><font color="#0000ff"><br></font></div></font></span></div></div></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">El 18 de mayo de 2015, 3:33, Chema Cortes <span dir="ltr"><<a href="mailto:pych3m4@gmail.com" target="_blank">pych3m4@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span>El 17 de mayo de 2015, 1:02, Rolando Paz <span dir="ltr"><<a href="mailto:flxpaz@gmail.com" target="_blank">flxpaz@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><font color="#000000">Hola nuevamente !</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">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.</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">Los datos son FFTs (Fast Fourier Transform) que procesa la IBOB.</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">Pueden darme su opinión?</font></div></div></blockquote><div><br></div></span><div>Parece un código bastante directo. Si funciona, no hay más que decir.<br></div><div><br></div><div>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".<br><br></div><div>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:<br><br></div><div><span style="font-family:monospace,monospace">    pkglen = struct.calcsize(fmt)</span></div><div><span style="font-family:monospace,monospace">    dataUDP = (struct.unpack('>f', s[i:i+pkglen]) for i in range(0,len(resp),pkglen))<br></span></div><div> <br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span><div dir="ltr"><div><font color="#0000ff"><br></font></div><div><font color="#0000ff"><br></font></div><div><font color="#0000ff">#!/usr/bin/python</font></div><div><font color="#0000ff">"""</font></div><div><font color="#0000ff">Primera prueba que busca graficar los datos binarios enviados por UDP,</font></div><div><font color="#0000ff">Rolando Paz <br></font></div><div><font color="#0000ff">"""</font></div><div><font color="#0000ff">import numpy as np<br></font></div><div><font color="#0000ff">import math, struct, socket, pyfits   </font></div><div><font color="#0000ff">import matplotlib.pyplot as plt</font></div><div><font color="#0000ff"><br></font></div><div><font color="#0000ff">HOST = 169.254.128.32</font></div><div><font color="#0000ff">PORT = 6969</font></div><div><font color="#0000ff">print '\nConectando la iBOB...',</font></div><div><font color="#0000ff"><br></font></div><div><font color="#0000ff">#estableciendo el socket UDP<br></font></div><div><font color="#0000ff">cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)</font></div><div><font color="#0000ff">cs.connect((HOST, PORT))</font></div><div><font color="#0000ff"><br></font></div><div><font color="#0000ff">resp = controlsocket.recv(4096)<br></font></div><div><font color="#0000ff">print resp</font></div><div><font color="#0000ff"><br></font></div><div><font color="#0000ff">#desempaquetando datos binarios enviados por el enlace UDP<br></font></div><div><font color="#0000ff">dataUDP = struct.unpack('>L',resp)         </font></div><div><font color="#0000ff">data = np.array(dataUDP,dtype=float)       <br></font></div><div><font color="#0000ff">plt.plot(data)</font></div><div><font color="#0000ff">plt.show()</font></div></div>
<br></span>_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
<br></blockquote></div><span><font color="#888888"><br><br clear="all"><br>-- <br><div>Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales": <a href="http://ch3m4.org/blog" target="_blank">http://ch3m4.org/blog</a><br>Buscador Python Hispano: <a href="http://ch3m4.org/python-es" target="_blank">http://ch3m4.org/python-es</a></div>
</font></span></div></div>
<br>_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
<br></blockquote></div></div></div><div><div class="h5"><br><br clear="all"><br>-- <br><div>Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales": <a href="http://ch3m4.org/blog" target="_blank">http://ch3m4.org/blog</a><br>Buscador Python Hispano: <a href="http://ch3m4.org/python-es" target="_blank">http://ch3m4.org/python-es</a></div>
</div></div></div></div>
<br>_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
<br></blockquote></div><br></div>