【串口通信】labview实现串口通信
现在初步实现了串口的通信,把其中的体会和实现过程写出来,权当抛砖引玉
其中的串口采用的是Rs-232,D型口,共九跟针,其中能用的就是三跟针脚,2,3,5,一个是发送一个是接受,一个是接地,如果做一个串口线延长线的话,只需连接这三根针脚即可,就是2连3,3连2,5连5。
在labview中采用的visa,首先是进行串口设置,设置串口号,波特率,在这里面只要设置这两个就可以了,其余的采用默认,其中特别注意的是要安装visa驱动包,只有安装了这个驱动包,你的串口才可以选择,一般现在的电脑上只有一个串口,那么为了调试方便,这里有两个工具可以推荐,一个叫做串口虚拟软件,我用的是VSPDXP5,就是一个虚拟串口的软件,让你的电脑能够多虚拟两个串口,你要设置成让他们互联,另一个就是串口调试工具,叫sscom32.exe,用来调试串口通信的,可以验证通信时候成功。visa驱动包在ni网站上有,具体什么地址你可以到搜索一下.
再就是visa read作用是从串口读取数据,这里面有个read buffer,从串口读取的数据
visawrite向串口写入数据或者是命令
还有visa close结束串口读取数据,目的是读完数据后,释放串口资源
我的例子
前面板图
程序图
labview也可以调用mscomm控件来实现串口通信,但是编程相对来讲比较复杂,一般不推荐,直接用labview中自带的visa是最方便的,在调试过程中的注意事项,
一、串口通讯的波特率设置要精确,比如要求9600的波特率,则晶振应选择11.0593MHz或其倍数。
二、由于通常情况下LabVIEW串口VI接收或发送的都是字符串(Normal),
这里是指串口通信中,如果不是在串口通信,我们可以做个小小的验证,
在前面板中,字符串在正常显示的情况下,你输入00,跟字符串00也会匹配,指示灯也会亮的,但是在串口通信中,一定注意,
所以如果需要发送或接收十六进制数值(Hex),请在发送或接收之前进行必要的转换。(这一点尤其要注意)
在与单片机通信的时候,假如说跟下位机的协议是发送字符串00,那么开始采集信号,并显示出来,如果你也发送00的话,跟字符串根本是不一样的,首先要经过变化,因为00对应的ascii码是4848,16进制就是3030所以你发送的字符串在16进制下也应该是3030
在调试的过程中,我们经常会发现有收到的数据延迟的现象,现在提出几点解决的方法:
(1)在循环中加入适量的延时,通过一个简单的例子看,
你会发现在cpu的占用率在加延时和不加的时候有很大的区别,当加的时候基本不占,而不加延时的时候达到100%。我在调试串口通信时候,发现whileloop里加一个延时会有很好的效果(假如有一个或某几个线程占用了 100% 的CPU,此时系统对其他线程就会反应迟钝。例如,程序的执行线程占用了100%的CPU,那么用户对界面的操作就会迟迟得不到响应,甚至于用户会误认为程序死锁了。所以在程序中要尽量避免出现100% 占用 CPU 的情况。 目前大多数的计算机还是单核单个
CPU的,因此要避免任何一个线程试图 100% 占用 CPU 的情况).
(2)visa read的字节总数最好用一个属性节点来代替
因为我们不知道数据缓冲区有多少个字节,这样就不需要去设定了
(3)经常看到会有人说串口里面有一堆数据,但是去读的时候却读回来一点点,每次均不相同,这种怀状况是由于串口有一个serialconfiguration这个节点上面,有一个terminationchar,大家将它设为F就可以了,因为遇到这个终止符,它就会停止读数,所以读回来的就会少了!