|
<><FONT color=#1a1ae6 size=6> 图形绘制</FONT></P><P><FONT color=#1a1ae6 size=3> 今天应该是讲到这个教程的最后部分了,有人看了肯定会觉得才写了这么点就没了。对这个教程,我在一开始写的时候就就是以简单为主,告诉大家如何入手labview。我学这个也没多久,像内存优化之类的高级功能还不熟悉,多进程也只是用了点皮毛而已。而且,这个车上位机软件编写还需要根据你的车上的程序和实际需要来修改,我这里只是讲述如何编写通用的上位机软件,也就是说你想编这个上位机软件时肯定会用到的技术,至于那些比较花哨的东西(比如改背景)可以不要,所以全部省掉。</FONT></P><P><FONT color=#1a1ae6 size=3> 罗嗦了这么多,下面进入正题吧。在上篇中,我们拥有了一个简陋的通讯协议,在单片机上我们发送字符串“image”然后发送一个固定长度的图片,从左到右从上到下一次发送每个点的灰度值,而且这个灰度值的长度是固定的10*100。对于labview,每次收到的是4096个字节的字符串,从中搜索到“image”,然后把后面的10*100个字符串取出来,上位机就得到图像数据了。最后把这些数据用字“符串显示控件”显示出来,而且要把“符串显示控件”拖到合适大小才行。</FONT></P><P><FONT color=#1a1ae6 size=3> 现在呢,我们要把这个些图像数据显示成图像该怎么办呢?原因不说了,见步骤:</FONT></P><P><FONT color=#1a1ae6 size=3>(1)把这些字符串转化成“无符号字节数组”。</FONT></P><P><FONT color=#1a1ae6 size=3>编程面板:编程->字符串->字符串/数组/路径转换-> “字符串至字节数组转换” </FONT><IMG src="http://download.intelligentcar.cn/bbsupfile//upfile/截图01.jpg"></P><P><FONT color=#1a1ae6 size=3>(2)上面得到的是一位数组,下面把它转化成10*100的二维数组。</FONT></P><P><FONT color=#1a1ae6 size=3>编程面板:编程->数组->“转换数组维数”</FONT></P><P><FONT color=#1a1ae6 size=3><IMG src="http://download.intelligentcar.cn/bbsupfile//upfile/截图04.jpg"></FONT></P><P><FONT color=#1a1ae6 size=3>(3)平化像素图</FONT></P><P><FONT color=#1a1ae6 size=3>编程面板:编程->图形与声音->图形格式->“平化像素图”</FONT></P><P><FONT color=#1a1ae6 size=3><IMG src="http://download.intelligentcar.cn/bbsupfile//upfile/截图05.jpg"></FONT></P><P><FONT color=#1a1ae6 size=3></FONT> </P><P><FONT color=#1a1ae6 size=3>(4)绘制平滑像素图</FONT></P><P><FONT color=#1a1ae6 size=3>编程面板:编程->图形与声音->图片函数->“绘制平化像素图”</FONT></P><P><FONT color=#1a1ae6 size=3>编程面板:编程->簇/类/与变体->“按名称捆绑”</FONT></P><P><FONT color=#1a1ae6 size=3><IMG src="http://download.intelligentcar.cn/bbsupfile//upfile/截图06.jpg"></FONT></P><P><FONT color=#1a1ae6 size=3>(5)右边接入图片控件,就可以显示了。</FONT></P><P><FONT color=#1a1ae6 size=3>前面板:新式->图形->控件->“图片”</FONT><BR><BR><BR><IMG src="http://download.intelligentcar.cn/bbsupfile//upfile/截图07.jpg"></P><P><FONT color=#1a1ae6></FONT> </P><P><IMG src="http://www.intelligentcar.cn/images/affix.gif"><A target=_blank href="http://download.intelligentcar.cn/bbsupfile//upfile/串口接收示例4.rar" target=_blank>串口接收示例4.rar</A></P><P><FONT color=#e61abd size=5> 只要你的单片机程序没问题,现在应该可以显示图片了。但是这个程序实在是太简陋了,面临的问题还有很多:</FONT></P><P><FONT color=#2292dd size=4>(1)这个程序有漏数据的情况,我明明发了3副,他却只能收到1副。</FONT></P><P><FONT color=#ff0033 size=4>答:有多种可能,在编这个程序时首先要考虑一下串口速度和所发送数据的数据量。还有就是目前这个labview上位机程序是有问题的,那就是每次从串口缓冲区读取4096个字节的数据,却只从中搜索了副图像,其他的扔掉了。我们可以使用“移位寄存器”把搜索后剩余的字符串与下一次收到的进行连接,然后再进行搜索,这样就不会漏掉了。</FONT></P><P><FONT color=#2292dd size=4>(2)我现在是在调试程序,那个图片的尺寸随时会不停地修改,这样做的话,每次修改真麻烦,单片机修改后还需要修改上位机软件,有没有可以使上位机自动适应这个参数的呢?</FONT></P><P><FONT color=#ff0033 size=4>答:可以修改通信协议,单片机每次发送图像修改为以下格式</FONT></P><P><FONT color=#ff0033 size=4>printp("size");printp("%3d%3d",high,width);print("image");printp("图像数据");</FONT></P><P><FONT color=#ff0033 size=4>然后在上位机上先截取前面的参数,然后再处理后面的图像数据。</FONT></P><P><FONT color=#e61abd size=5>程序运行速度怎么这么慢?我如何使用上位机软件来控制小车?如何向上位机软件发送更多的信息,包括车速等?等等等等。。。。。。。。问题实在是太多了。一下子真的说不清楚如果有需要我会单独发帖各个击破!</FONT></P><P><FONT color=#ff3300 size=5 face=幼圆><STRONG> 偶近期看了一下这个帖子的回复,应者寥寥,这让我怀疑这几个帖子的实际价值,也许我在做无用功吧。最初是因为觉得上位机软件对做摄像头的很重要,但从来没看到有讲过这方面的帖子,有的话也都是写的很粗糙,虽然没空余时间,但还是写了。如果你们觉得对你有用,就回个帖子吧,大家讨论讨论!!谢谢!!!再这样的话我也不敢保证我能继续给大家发有价值的帖子了!!</STRONG></FONT></P> |
|