洪涛的博客
随笔 - 39  文章 - 222  评论 - 576

沪江博客  首页  新随笔  新文章  管理  档案  讨论  名师  订阅 订阅
在LabVIEW中应用串口

第一部分使用LabVIEW系统VI

 

一、串口VI介绍

LabVIEW的串口通讯VI位于Instrument I/O Platte的Serial中,包括:

 

 VI名称  VI功能
 VISA Configure Serial Port  初始化VISA resource name指定的串口通讯参数
 VISA Write  将输出缓冲区中的数据发送到VISA resource name指定的串口
 VISA Read  将VISA resource name指定的串口接收缓冲区中的数据读取指定字节数的数据到计算机内存中
 VISA Serial Break  向VISA resource name指定的串口发送一个暂停信号
 VISA Bytes at Serial Port  查询VISA resource name指定的串口接收缓冲区中的数据字节数
 VISA Close  结束与VISA resource name指定的串口资源之间的会话
 VISA Set I/O Buffer Size  设置VISA resource name指定的串口的输入输出缓冲区大小
 VISA Flush I/O Buffer  清空VISA resource name指定的串口的输入输出缓冲区
 

二、使用说明

在LabVIEW环境中使用串口与在其它开发环境中开发过程类似,基本的流程框图如下。

 

 流程框图

 图1、串口操作数据流图

 

首先需要调用VISA Configure Serial Port完成串口参数的设置,包括串口资源分配、波特率、数据位、停止位、校验位和流控等等。

 

 初始化串口

 图2、初始化串口

 

如果初始化没有问题,就可以使用这个串口进行数据收发。发送数据使用VISA Write,接收数据使用VISA Read。在接收数据之前需要使用VISA Bytes at Serial Port查询当前串口接收缓冲区中的数据字节数,如果VISA Read要读取的字节数大于缓冲区中的数据字节数,VISA Read操作将一直等待,直至Timeout或者缓冲区中的数据字节数达到要求的字节数。当然也可以分批读取接收缓冲区或者只从中读取一定字节的数据。

 

 发送数据  接收数据

 图3、从串口发送数据 

图4、从串口接收数据

 

在某些特殊情况下,需要设置串口接收/发送缓冲区的大小,此时可以使用VISA Set I/O Buffer Size;而使用VISA Flush I/O Buffer则可以清空接收与发送缓冲区。在串口使用结束后,使用VISA Close结束与VISA resource name指定的串口之间的会话。

 

设置缓冲区大小 

清空缓冲区

 结束会话

 图5、设置缓冲区大小

图6、 清空缓冲区

 图7、结束会话/线程

 

具体的例子可以参考:examples\instr\smplserl.llb。

 

第二部分使用MSCOMM控件

 

在LabVIEW中使用MSCOMM控件,与在VC、VB中使用一样。同样可以使用中断方式进行接收。具体的例子可以发  索取。

 

 图8、使用控件的串口收发程序

 

 程序框图

 图9、程序数据流图

 

首先通过LabVIEW的工具菜单“Tools >> Advanced >> Import ActiveX Controls”将Microsoft的串口控件-“Microsoft Communications Control,version 6.0”添加到LabVIEW环境中,存放在缺省路径即可,这样在User Controls Palette里面可以找到这个控件。

 

添加ActiveX控件菜单

 图10、添加ActiveX控件菜单

 

选择添加用户控件

 图11、选择添加用户控件

 

用户控件

 图12、用户控件

将串口控件 串口控件 放置在Front Panel上,在框图程序中用控件属性对其进行编程,实现所需要的功能。

注意:一个串口资源要有一个MSCOMM控件与之相对应。

 

第三部分 注意事项

 

一、串口通讯的波特率设置要精确,比如要求9600的波特率,则晶振应选择11.0593MHz或其倍数。

 

二、由于通常情况下LabVIEW串口VI接收或发送的都是字符串(Normal),所以如果需要发送或接收十六进制数值(Hex),请在发送或接收之前进行必要的转换。

 

2.1、数值型数据的处理方法:

 

2.1.1、1、如果这些数据是静态的,也就说在程序设计阶段要传输的数据就已经确定了,在这种情况下,首先设置VISA Write的write buffer的显示属性为Hex Display,然后直接输入要发送的16进制字符串就可以了。串口设备的控制命令通常是由一个或多个16进制字符组成的,当我们需要对其进行控制时经常会采用这种方法发送控制命令。

 

2.1.2、数据是动态的;即要传输的数值型数据是动态产生和变化的,在发送之前首先要将其转换成对应的16进制字符串,才能赋给VISA Write发送。将这些数据构成一个数组,用Byte Array To String进行转换,转换的结果就是对应数组数值的字符串,可以提交VISA Write发送。或者使用Type Cast也可以实现同样的功能。

 

 数据转换  数据转换程序

 图13、串口数据转换界面

图14、 串口数据转换数据流图

 

 

 

 图15、操作界面

 

 

 

图16、单片机C程序

 

2.2、字符串型数据的处理方法:

 

我们在处理过程当中,传输的数据可能具有一定格式或协议,比如一个完整的数据帧包括起始段、数据段、校验段等等,而每一段往往又有几个部分组成,这几个部分的类型和长度可能又不尽相同,可能是数值型的,可能是字符型的,也可能是布尔型的,单字节或者是多字节。此时我们往往都采用统一的字符形式来处理这些数据,因此有时候我们说,字符是LabVIEW里最方便的数据类型。

 

经过打包的字符数据要经过串口发送需要进行必要的转换,否则传输将出错。比如我们打包过后需要发送的的字符串为:34 12 56 78 94(空格为了区分),如果直接将其赋给VISA Write发送,串口上的数据将是:33 34 31 32 35 36 37 38 39 34。正确的转换程序如下。

 

字符型数据转换 

 图17、字符型数据处理

 

数据接收:

从计算机串口接收到的数据是16进制的ASCII码,要转换成对应的数值型数据,可以使用String To Byte Array或者Type Cast。

 

三、LabVIEW串口VI不能使用中断方式传输。

posted on 2006-04-04 12:27 洪涛 阅读(18954) 评论(132)  编辑  收藏 所属分类: LabVIEW 网摘收藏

发表评论
  回复  引用    
2006-04-04 12:28 | ehongtao
来源:http://labview.anyp.cn/articles/articles/0406090553036400007.aspx?z=121793&m=229714
  回复  引用    
2006-04-09 15:01 | LCS
VERY GOOD
  回复  引用    
2006-04-14 22:36 | 83771553
可不可以不给我一个例程呢,我的邮箱是kakijohn@163.com,十分感谢,应为我多次调试都不能正确读数,实在着急,多谢赐教
  回复  引用    
2006-04-17 08:15 | 小黑子
给我一个,xhztech@163.com,非常感谢!
  回复  引用    
2006-04-24 08:44 | 张金密
我现在也很急用,请大哥给我发一份吧,邮箱zjm103@tom.com
  回复  引用    
2006-05-09 16:16 | Su
给我发一份吧,谢谢了 zenin.net@163.com
  回复  引用    
2006-05-12 10:02 | 小猪
你好:
   我是今年即将毕业的学生,正为毕设而发愁,你的文章对我很有用,你可以给我发一份吗?谢谢
pzj1984@sina.com
  回复  引用    
2006-05-17 12:26 | happywd
正在学,也给我一份吧
happywd1984@hotmail.com
  回复  引用    
2006-05-18 10:47 | 墨绿茶香
也给我一份吧
ourwe2002@163.com

  回复  引用    
2006-05-25 23:03 | guoren
lara007624@163.com

谢谢
  回复  引用    
2006-05-30 14:08 | 孤独的守望者
给我一份吧,当前正在做工程,特需要。谢谢!
  回复  引用    
2006-05-30 14:10 | 孤独的守望者
给我一份吧,当前正在做工程,特需要。谢谢!
baozi_18@163.com
  回复  引用    
2006-06-02 10:19 | shenj1
shenj1@126.com

Please send me a copy
  回复  引用    
2006-06-02 10:34 | jack
jiao0379@hotmail.com
谢谢你,我想学习串口与labview的通讯,希望您也能 给我一份 谢谢
  回复  引用    
2006-06-02 13:12 | fish
arui24124@163.com
谢谢你,我想学习串口与labview的通讯,希望您也能 给我一份 谢谢
  回复  引用    
2006-06-12 08:55 | gcyt
我也想学一下,gcyt124@sohu.com
  回复  引用    
2006-06-20 20:45 | 陳爍爍
chenshuoshuo1998@163.com
能給我髮一份嗎?謝謝!
  回复  引用    
2006-06-21 14:41 | 郭子山
我做实验要用,能给我一份吗?谢谢!我用的是labview7.0版本
gzs200471@mail.dhu.edu.cn
  回复  引用    
2006-06-27 16:29 | ruanqizhen
顶
  回复  引用    
2006-06-30 09:23 | 飞翔
最近正在研究,可以发一份给我吗?特别是发送和接收16进制数,我的邮箱:liu_kc2008@163.com
  回复  引用    
2006-07-06 09:33 | 我是工作者!
你好:
    我在网上看见你们的有关在LabVIEW中使用MSCOMM控件的文章,这个对我现在的工作很有用,麻烦你将例子发给我!谢谢!
我的邮箱:heqiuna@tom.com
  回复  引用    
2006-07-09 14:12 | yt
有源程序吗?麻烦发给我一份。
很有用的!!!
yt5408@126.com
  回复  引用    
2006-07-13 15:39 | 鱼肠
您好,我也想求您一份源程序。多谢
liky301@163.com
  回复  引用    
2006-07-17 14:46 | wenyi
您好,也请给我一份源程序吧。多谢!

wenyicjd@163.com
  回复  引用    
2006-07-17 20:47 | yongliang
非常的好,也给我来一份吧,非常感谢。
邮箱:yongliang@ahu.edu.cn
  回复  引用    
2006-07-17 20:55 | yongliang
最近正在学习,想把它应用到工程中去,可以发一份给我吗?特别是接收16进制数,我的邮箱:yongliang@ahu.edu.cn

  回复  引用    
2006-07-26 16:08 | enxueli
最近在学习这个 麻烦你把这个串口的程序给我一份吧 很急
多谢!!!
  回复  引用    
2006-07-26 16:09 | enxueli
最近在学习这个 麻烦你把这个串口的程序给我一份吧 很急 
多谢!!!
enxueli@yahoo.com
  回复  引用    
2006-07-27 10:18 | enxueli
最近在学习这个 麻烦你把这个串口的程序给我一份吧 很急 
多谢!!! 
enxueli@yahoo.com.cn

  回复  引用    
2006-08-13 16:50 | ncitnancy
能给我一份么?谢谢!ncitnancy@tom.com
  回复  引用    
2006-08-18 11:10 | thanks
能不能给我发个mscomm的例子谢谢

lvkai198379@163.com
  回复  引用    
2006-08-22 12:44 | typhoon
你好 我现在碰上问题是16位的输出问题 总是把1B输出成3142,怎么解决呢?能发些这方面的例程么?谢谢了

typhoon@ustc.edu.cn
  回复  引用    
2006-08-25 12:43 | bxh2258
最近正在学习,可以发一份给我吗?急用.我的邮箱:bxh2258@21cn.com 


  回复  引用    
2006-08-29 19:53 | 白云
也给我发一份吧,我也很急用.我的邮箱guimingy@163.com.谢谢啦!
  回复  引用    
2006-09-03 19:58 | xiaozhu
我正在用Labview做串口的实验,能给我传一份么?万分感谢!谢谢!qq7678@tom.com
  回复  引用    
2006-09-04 13:17 | DSG
我做的程序是808温控仪的串口通讯,它的读取命令是 81 81 52 00 00 00 53 00,但用LABVIEW设计的程序总是无法调通,进敬请指点迷津
dsg1982@sina.com
  回复  引用    
2006-09-17 19:54 | 02003
最近正在学习,可以发一份给我吗?
02003@163.com
  回复  引用    
2006-09-18 14:58 | maple zhang
最近正在调试labview的串口程序,发给我一份好么

zhang_jian616@126.com

谢谢
  回复  引用    
2006-09-23 00:36 | xiuxiu
我也在学,想参考以下,可以发我一份吗?谢谢

hxz96@126.com
  回复  引用    
2006-09-26 16:53 | 杜
我也在学,想参考以下,可以发我一份吗?谢谢


nnnnnory@yahoo.com.cn 

  回复  引用    
2006-10-21 12:01 | 赵玉剑
我正在做毕业设计,急用。
能给我发一些例程和资料吗?谢谢!

zyjzxz@sina.com
  回复  引用    
2006-10-23 16:31 | misszhangruimin@gmail.com
谢谢,能给我发一份吗?
  回复  引用    
2006-10-24 14:02 | lndtshana@163.com
请发给我一些相关的源程序和资料,非常感谢!
lndtshana@163.com
  回复  引用    
2006-11-04 18:41 | slxjy@yahoo.com.cn
请发给我一些相关的源程序和资料,非常感谢!
slxjy@yahoo.com.cn
  回复  引用    
2006-11-18 10:31 | ldlucky@21cn.com
我正在用Labview做串口的实验,能给我传一份么?万分感谢!谢谢!

ldlucky@21cn.com
  回复  引用    
2006-11-19 20:26 | yang
谁有的话我也要,我也是做毕业课题 ,分场感谢 !!
yanguxuemei2002577@sina.com
  回复  引用    
2006-11-22 13:56 | KKK
我测试LABVIEW自带的例程都有错误,也不知道错误在什么地方?
  回复  引用    
2006-11-26 22:06 | jying
我正在用labview做串口采集的东东,请给我一份吧,万分感谢!:)
zjy7983@126.com
  回复  引用    
2006-12-07 15:27 | ln
我正在用labview做串口采集的实验,能否给我一份程序?非常感谢!:) 
lgp921@163.com
  回复  引用    
2006-12-07 17:18 | applewba@tom.com
我最近正在做一个设备与计算机之间的接口程序,用到的是LABVIEW,看了你的东西,深受启发,可不可以给我发一个串口的应用实例。我的邮箱是applewba@tom.com十分感谢,而且我的这个东西还必须把接受到的数据,用波形显示出来,本人刚毕业,感谢您的帮忙,
  回复  引用    
2006-12-12 00:13 | ares
dqy32@sohu.com
最近正在学习,请发我一份,谢谢!!!

  回复  引用    
2006-12-20 13:35 | kamado
也给我一份吧 谢谢
kama_ya@163.com
  回复  引用    
2006-12-23 19:20 | lili
你好
帮我也发一个吧!我正急等用呢!谢了

  回复  引用    
2006-12-23 19:23 | lili
哦忘了告你我的li_wd@126.com
  回复  引用    
2006-12-28 15:05 | master_baron
可以给我一份串口的程序吗?wangdong56529766@yahoo.com.cn
  回复  引用    
2006-12-28 20:52 | 杨宋志

您好,我正在学习,能帮我发一份吗?
我的邮箱 :yangsongzhi123@yahoo.com.cn
  回复  引用    
2007-01-11 00:37 | fangzhilan
真是及时事雨!请把具体例子给我发一份,不胜感谢!

邮箱:zhilan25977203@126.com
  回复  引用    
2007-02-14 20:22 | rike
求您一份源程序。多谢
rike0256@163.com
  回复  引用    
2007-03-07 15:09 | 杨庆德
我也想要一份源程序。多谢。
  回复  引用    
2007-03-07 15:10 | 杨庆德
kindyoung@163.com
  回复  引用    
2007-03-16 15:28 | leo
请给我发一份,谢谢!
leox108@gmail.com
  回复  引用    
2007-03-19 08:53 | gaofeng
gao6feng@yahoo.com.cn
谢谢!
  回复  引用    
2007-04-08 22:36 | mugang
请给我发一份,谢谢!
mugang2003@163.com
  回复  引用    
2007-04-11 10:42 | 吴鹏飞
我最近在做labview与单片机的串口通信,请跟我发一些这方面的实例好吗,非常感谢!
邮箱:wupengfei8201@126.com
  回复  引用    
2007-04-17 13:29 | 张献逢
我最近在做labview与单片机的串口通信,单片机用于控制单色仪器,请跟我发一些这方面的实例好吗,非常感谢!
邮箱:zhangxianfeng013@163.com
  回复  引用    
2007-04-19 16:37 | 蝈蝈

我是今年即将毕业的学生,做LabVIEW串口。正为毕设而发愁,你的文章对我很有用,你可以给我发一份吗?谢谢
yezi00003@163.com
  回复  引用    
2007-04-24 13:11 | laokong00
laokong00@163.com 你可以给我发一份吗?多多指教~
  回复  引用    
2007-04-25 21:45 |