智能车制作

标题: 手把手教你从零开始用labview编写智能车上位机程序(4) [打印本页]

作者: superyongzhe    时间: 2008-5-31 22:54
标题: 手把手教你从零开始用labview编写智能车上位机程序(4)
<><FONT color=#3809f7 size=6 face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通讯协议</FONT></P><P><FONT color=#2b6fd5 size=5 face=楷体_GB2312>&nbsp;&nbsp; 说到通讯协议,这么“大”的一个词,这会不会很难啊?。其实不用怕,通俗的讲,通讯协议就是通讯双发的一种约定,可以简单,也可以复杂。复杂的有TCP/IP协议,简单的有串口通讯协议。我们现在要把图像从单片机发送给上位机,也需要通信协议。</FONT></P><P><FONT color=#2b6fd5 size=5 face=楷体_GB2312>&nbsp; 如果没有通讯协议,对于收信方,谁知道你发的是什么?就是一堆二进制码元(对于数字通信系统),他到底是干什么的?什么意思?根本无法知道。所以通信的双方要对发送的信息有所预定。</FONT></P><P><FONT color=#2b6fd5 size=5 face=楷体_GB2312>&nbsp; 对于我们的赛车和上位机软件之间的通信,赛车通过串口发送图像数据,假设是一个100*10(字节)的图像,上位机软件接收到这1K</FONT><FONT color=#2b6fd5 size=5 face=楷体_GB2312>的数据后把它绘制成相应的图像。可是从我的前几篇叫程中所说的来看,上位机软件接收的就是一些字符串,每次4096个字节,他怎么知道图像从哪里开始,从哪里结束呢?如果我们在单片机上就不停的发送图像,对于上位机来说,很显然根本无法知道从那里开始是我们所需要的一副图像。为此我们就需要做一定的约定,让上位机知道图像从什么地方开始。</FONT></P><FONT color=#2b6fd5 size=5 face=楷体_GB2312><P><FONT color=#2b6fd5 size=5 face=楷体_GB2312>&nbsp; 为此,我们可以在发送图像的时候发送一个标志字符串,比如“image”。当单片机发送图像时,先发送“image”,然后紧接着发送1K的图像,这样不断重复。那么上位机软件每次接收到到4096字节数据时从里面搜索字符串“image”,如果搜索到了,就把这后面的1k数据当作图像绘制在电脑上。这就是我们的通信协议,很简单吧!你会想这也叫通讯协议?它的确可以称之为通讯协议了,只不过很简陋,没有TCP/IP那样好听的名字。</FONT></P><P>&nbsp; 现在具体说一下我们的通讯协议,那就是:这是一个单向协议,只负责单片机向上位机发送数据;单片机在每次发送数据前,发送一个标志字符串,同时保证在要发送的数据中不会存在与标志字符串相同的数据,提前约定数据的长度(在我们前面的假设中,固定是1k,实际使用时可以更改);上位机接收时,通过搜索标志字符串,把标志字符串之后约定长度的数据取出来。</P><P>&nbsp;&nbsp;好了,下面开始正式行动吧!</P><P>&nbsp; 在单片机里编写</P><P><FONT color=#2bd5b3 size=3>main()</FONT></P><P><FONT color=#2bd5b3 size=3>{</FONT></P><P><FONT color=#2bd5b3 size=3>&nbsp; while(1)</FONT></P><P><FONT color=#2bd5b3 size=3>&nbsp; {</FONT></P><P><FONT color=#2bd5b3 size=3>&nbsp;&nbsp; printp(“image”);</FONT></P><P><FONT color=#2bd5b3 size=3>。。。发送1k的图像数据;</FONT></P><P><FONT color=#2bd5b3 size=3>&nbsp;&nbsp; }</FONT></P><P><FONT color=#2bd5b3 size=3>}</FONT></P><P>在labview里</P><P>上一篇中是这样的</P></FONT><P><IMG style="WIDTH: 707px; HEIGHT: 478px" src="http://download.intelligentcar.cn/bbsupfile//upfile/截图00.jpg" width=585 height=460></P><P><FONT color=#0909f7 size=5>(这是上篇文章的labview程序</FONT><IMG src="http://www.intelligentcar.cn/images/affix.gif"><A target=_blank href="http://download.intelligentcar.cn/bbsupfile//upfile/串口接收示例2.rar" target=_blank>串口接收示例2.rar</A>)</P>
作者: superyongzhe    时间: 2008-5-31 23:41
标题: Re:手把手教你从零开始用labview编写智能车上位机程序(4)
<><FONT color=#0909f7 size=5>现在把它改成这样(其中的两个字符串函数在字符串选板里):</FONT><BR></P><P><FONT color=#0909f7 size=5><IMG src="http://download.intelligentcar.cn/bbsupfile//superyongzhe/555.jpg"></FONT></P><P><FONT color=#0909f7 size=5>然后把前面板的接收数据的宽度调整为100个字符的宽度,于是,每当你的单片机发送1K的图像数据时,他就能正确的把它找到并显示在数据接收的方框内。</FONT></P><P><FONT color=#0909f7 size=5>程序如下</FONT><BR><A target=_blank href="http://download.intelligentcar.cn/bbsupfile//superyongzhe/" target=_blank>http://download.intelligentcar.cn/bbsupfile//superyongzhe/串口接收示例3.rar</A></P><P><FONT color=#0909f7 size=5>这一篇又结束了,通讯协议还有很多内容,无论实现多么复杂的功能,都是在这个基础上增加的。至于能弄成什么样,就是仁者见仁,智者见智了。但通讯协议的关键在于告诉数据的起始位置和数据的大小(我们这里只有单片机和上位机通讯,所以不牵扯数据要发送到哪,从何而来的问题)。下一篇就告诉大家如何来把图像数据显示成画面,弄得更好看一些吧。不过到此为止,你应该已经可以把单片机传来的数据正确的找到并且显示在电脑上了,下面的仅仅是些锦上添花的东西,关键的技术到此为止已经差不多了。</FONT></P>
作者: superyongzhe    时间: 2008-6-4 05:20
标题: Re:手把手教你从零开始用labview编写智能车上位机程序(4)
在程序框图中,右键点击“接收数据”-&gt;创建-&gt;属性节点-&gt;文本-&gt;文本,然后再右键点击这个属性节点,然后“转换为写入”,最后,连接一个常量“3”到上面就可以了。
作者: miaowing    时间: 2009-3-25 09:34
强烈顶!!!
作者: master.D    时间: 2009-7-4 12:33
ding
作者: bcfai123    时间: 2009-8-14 16:47
简单明了
作者: hntanghuai    时间: 2009-12-8 01:33
楼主啊! 好像你帖子里面的那个程序下不下来,不知道是什么原因。可以再想办法传下不。或者给我发个(呵呵,谢谢了!)120346856@qq.com
作者: chengyongji    时间: 2010-4-24 09:54
通俗易懂!
作者: zhangluhuixing    时间: 2010-5-4 12:22
很有用
作者: jiutian0396    时间: 2010-5-18 04:30
真的是不想向人要程序,可自己能力实在是有限啊
作者: qingpingpei    时间: 2011-3-24 21:28
回复 2# superyongzhe


    楼主,网址打不开 ·········




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2