LabVIEW中使用串口详解
<B>在LabVIEW中应用串口</B><p></p></P>第一部分使用LabVIEW系统VI<p></p></P><p> </p></P>
一、串口VI介绍<p></p></P>
LabVIEW的串口通讯VI位于Instrument I/O Platte的Serial中,包括:<p></p></P>
VI名称<p></p></P> VI功能<p></p></P> VISA Configure Serial Port<p></p></P> 初始化VISA resource name指定的串口通讯参数<p></p></P> VISA Write<p></p></P> 将输出缓冲区中的数据发送到VISA resource name指定的串口<p></p></P> VISA Read<p></p></P> 将VISA resource name指定的串口接收缓冲区中的数据读取指定字节数的数据到计算机内存中<p></p></P> VISA Serial Break<p></p></P> 向VISA resource name指定的串口发送一个暂停信号<p></p></P> VISA Bytes at Serial Port<p></p></P> 查询VISA resource name指定的串口接收缓冲区中的数据字节数<p></p></P> VISA Close<p></p></P> 结束与VISA resource name指定的串口资源之间的会话<p></p></P> VISA Set I/O Buffer Size<p></p></P> 设置VISA resource name指定的串口的输入输出缓冲区大小<p></p></P> VISA Flush I/O Buffer<p></p></P> 清空VISA resource name指定的串口的输入输出缓冲区<p></p></P><p> </p></P>
<p> </p></P>
二、使用说明<p></p></P>
在LabVIEW环境中使用串口与在其它开发环境中开发过程类似,基本的流程框图如下。<p></p></P>
<p></p></P>
<p></p></P> 图1、串口操作数据流图<p></p></P> <p></p></P>
首先需要调用VISA Configure Serial Port完成串口参数的设置,包括串口资源分配、波特率、数据位、停止位、校验位和流控等等。<p></p></P>
<p></p></P>
<p></p></P> 图2、初始化串口<p></p></P> <p></p></P>
如果初始化没有问题,就可以使用这个串口进行数据收发。发送数据使用VISA Write,接收数据使用VISA Read。在接收数据之前需要使用VISA Bytes at Serial Port查询当前串口接收缓冲区中的数据字节数,如果VISA Read要读取的字节数大于缓冲区中的数据字节数,VISA Read操作将一直等待,直至Timeout或者缓冲区中的数据字节数达到要求的字节数。当然也可以分批读取接收缓冲区或者只从中读取一定字节的数据。<p></p></P>
<p></p></P>
<p></p></P><p></p></P> 图3、从串口发送数据 <p></p></P>图4、从串口接收数据<p></p></P> <p></p></P>
在某些特殊情况下,需要设置串口接收/发送缓冲区的大小,此时可以使用VISA Set I/O Buffer Size;而使用VISA Flush I/O Buffer则可以清空接收与发送缓冲区。在串口使用结束后,使用VISA Close结束与VISA resource name指定的串口之间的会话。<p></p></P>
<p></p></P>
<p></p></P><p></p></P><p></p></P> 图5、设置缓冲区大小<p></p></P>图6、 清空缓冲区<p></p></P> 图7、结束会话/线程<p></p></P> <p></p></P>
具体的例子可以参考:examples\instr\smplserl.llb。<p></p></P>
<p> </p></P>
第二部分使用MSCOMM控件<p></p></P>
<p></p></P>
在LabVIEW中使用MSCOMM控件,与在VC、VB中使用一样。同样可以使用中断方式进行接收。具体的例子可以发索取。<p></p></P>
<p></p></P>
<p></p></P> 图8、使用控件的串口收发程序<p></p></P>
<p></p></P><p></p></P>图9、程序数据流图<p></p></P> <p></p></P>
首先通过LabVIEW的工具菜单“Tools >> Advanced >> Import ActiveX Controls”将Microsoft的串口控件-“Microsoft Communications Control,version 6.0”添加到LabVIEW环境中,存放在缺省路径即可,这样在User Controls Palette里面可以找到这个控件。<p></p></P>
<p></p></P>
<p></p></P> 图10、添加ActiveX控件菜单<p></p></P>
<p></p></P><p></p></P> 图11、选择添加用户控件<p></p></P>
<p></p></P><p></p></P> 图12、用户控件<p></p></P>将串口控件 放置在Front Panel上,在框图程序中用控件属性对其进行编程,实现所需要的功能。<p></p></P>
注意:一个串口资源要有一个MSCOMM控件与之相对应。<p></p></P>
<p> </p></P>
第三部分 注意事项<p></p></P>
<p></p></P>
一、串口通讯的波特率设置要精确,比如要求9600的波特率,则晶振应选择11.0593MHz或其倍数。<p></p></P>
<p></p></P>
二、由于通常情况下LabVIEW串口VI接收或发送的都是字符串(Normal),所以如果需要发送或接收十六进制数值(Hex),请在发送或接收之前进行必要的转换。<p></p></P>
<p></p></P>
2.1、数值型数据的处理方法:<p></p></P>
<p> </p></P>
2.1.1、1、如果这些数据是静态的,也就说在程序设计阶段要传输的数据就已经确定了,在这种情况下,首先设置VISA Write的write buffer的显示属性为Hex Display,然后直接输入要发送的16进制字符串就可以了。串口设备的控制命令通常是由一个或多个16进制字符组成的,当我们需要对其进行控制时经常会采用这种方法发送控制命令。<p></p></P>
<p> </p></P>
2.1.2、数据是动态的;即要传输的数值型数据是动态产生和变化的,在发送之前首先要将其转换成对应的16进制字符串,才能赋给VISA Write发送。将这些数据构成一个数组,用Byte Array To String进行转换,转换的结果就是对应数组数值的字符串,可以提交VISA Write发送。或者使用Type Cast也可以实现同样的功能。<p></p></P>
<p></p></P>
<p></p></P><p></p></P> 图13、串口数据转换界面<p></p></P>图14、 串口数据转换数据流图<p></p></P> <p></p></P>
<p></p></P>
<p></p></P> 图15、操作界面<p></p></P>
<p></p></P><p></p></P> <p></p></P>
图16、单片机C程序<p></p></P> <p></p></P>
2.2、字符串型数据的处理方法:<p></p></P>
<p> </p></P>
我们在处理过程当中,传输的数据可能具有一定格式或协议,比如一个完整的数据帧包括起始段、数据段、校验段等等,而每一段往往又有几个部分组成,这几个部分的类型和长度可能又不尽相同,可能是数值型的,可能是字符型的,也可能是布尔型的,单字节或者是多字节。此时我们往往都采用统一的字符形式来处理这些数据,因此有时候我们说,字符是LabVIEW里最方便的数据类型。<p></p></P>
<p> </p></P>
经过打包的字符数据要经过串口发送需要进行必要的转换,否则传输将出错。比如我们打包过后需要发送的的字符串为:34 12 56 78 94(空格为了区分),如果直接将其赋给VISA Write发送,串口上的数据将是:33 34 31 32 35 36 37 38 39 34。正确的转换程序如下。<p></p></P>
<p></p></P>
<p></p></P> 图17、字符型数据处理<p></p></P> <p></p></P>
数据接收:<p></p></P>
从计算机串口接收到的数据是16进制的ASCII码,要转换成对应的数值型数据,可以使用String To Byte Array或者Type Cast。<p></p></P>
<p></p></P>
三、LabVIEW串口VI不能使用中断方式传输。<p></p></P>
<p> </p></P><p> </p></P> <P>好呀,兄弟,你发的贴子都是精品,非常好!太好了,谢谢!</P> LV中串口通讯是可以用中断的,用MSCOMM的ON COM事件就可以了
2.2、字符串型数据的处理方法:
<p>
<p>
<p>
我们在处理过程当中,传输的数据可能具有一定格式或协议,比如一个完整的数据帧包括起始段、数据段、校验段等等,而每一段往往又有几个部分组成,这几个部分的类型和长度可能又不尽相同,可能是数值型的,可能是字符型的,也可能是布尔型的,单字节或者是多字节。此时我们往往都采用统一的字符形式来处理这些数据,因此有时候我们说,字符是LabVIEW里最方便的数据类型。
<p>
<p>
<p>
<p>
<P>
经过打包的字符数据要经过串口发送需要进行必要的转换,否则传输将出错。比如我们打包过后需要发送的的字符串为:34 12 56 78 94(空格为了区分),如果直接将其赋给VISA Write发送,串口上的数据将是:33 34 31 32 35 36 37 38 39 34。</P>
<P>正确的转换程序我没有看到 不明白,请给我发到邮件好么,谢谢 wdyjz@126.com</P> <B>以下是引用<I>wdyjz</I>在2005-3-4 22:20:36的发言:</B>
2.2、字符串型数据的处理方法:
<P>
<P>
<P>
我们在处理过程当中,传输的数据可能具有一定格式或协议,比如一个完整的数据帧包括起始段、数据段、校验段等等,而每一段往往又有几个部分组成,这几个部分的类型和长度可能又不尽相同,可能是数值型的,可能是字符型的,也可能是布尔型的,单字节或者是多字节。此时我们往往都采用统一的字符形式来处理这些数据,因此有时候我们说,字符是LabVIEW里最方便的数据类型。
<P>
<P>
<P>
<P>
<P>
经过打包的字符数据要经过串口发送需要进行必要的转换,否则传输将出错。比如我们打包过后需要发送的的字符串为:34 12 56 78 94(空格为了区分),如果直接将其赋给VISA Write发送,串口上的数据将是:33 34 31 32 35 36 37 38 39 34。</P>
<P>正确的转换程序我没有看到 不明白,请给我发到邮件好么,谢谢 wdyjz@126.com</P>
<P>lv传输的是ASCII码,所以才会出现你发现的现象。你可以自己转一下,你会发现了。
解决的办法是将你需要的数据,转换一下:
<P>在发送之前首先要将其转换成对应的16进制字符串,才能赋给VISA Write发送。将这些数据构成一个数组,用Byte Array To String进行转换,转换的结果就是对应数组数值的字符串,可以提交VISA Write发送。或者使用Type Cast也可以实现同样的功能。</P>
[此贴子已经被作者于2005-3-5 10:16:51编辑过]
<P>首先很高兴自己的文章被贴出来,但请大家引用文章的时候注明出处,以尊重别人!</P><P></P><P>这是LabVIEW和虚拟仪器协作同盟网站上的原版文章引用!</P> 在网站上找一下,我记得以前有朋友发过这样的例子的!
论文急需呢
<P>能否提供一下"单片机C程序"一块,帖子里看不到的说~比较急着用于论文,西西</P><P>先拜过拉~邮箱youyou0824@hotmail.com</P> 我们网站有单片机与LV通信的例子的,单片机我是用C编写的,带有电路连接的,你找一下吧! 能不能给我发一个“在LabVIEW中使用MSCOMM控件”的例子啊?我要做的是用LabVIEW写一个程序控制单片机的发送(通过串口)。有中断功能,能够很方便的控制单片机向PC发送数据。有这方面的例子吗?劳烦给我发一个。先谢谢了。liuzhaofeng11b@sina.com 太好了 <P>为什么看不到图的</P> <P>这个很及时</P> <P><IMG src="http://www.cpubbs.com/old_bbs/Skins/Default/emot/em05.gif"><IMG src="http://www.cpubbs.com/old_bbs/Skins/Default/emot/em17.gif"></P><IMG src="http://www.cpubbs.com/old_bbs/Skins/Default/emot/em08.gif"><IMG src="http://www.cpubbs.com/old_bbs/Skins/Default/emot/em23.gif"><IMG src="http://www.cpubbs.com/old_bbs/Skins/Default/emot/em31.gif"> <P>怎么没有图片</P>
页:
[1]
2