韩金燕 淮安信息职业技术学院计算机与通信工程学院江苏淮安 223003
【文章摘要】
介绍了Labview 串口应用的开发方法,串口设备是否正常工作的检测程序,制定了符合常规测控设备需求的串口通信协议,包括通信双方的职责、上位机向下位机传输一帧数据的格式和下位机向上位机返回数据的格式,经测试,该协议可以稳定可靠的工作,具有简单实用的特点。
【关键词】
Labview ;单片机;RS232
中图分类号:TP274.2
文献标识码:A
1 串口通信简介
在各种测控应用中,上下位机之间的数据通信都是必需的,有各种各样的计算机外部通信协议和技术标准可供选择,比如RS-232、RS-485、CAN 总线、LIN 总线、Lonworks、USB、TCP/IP 等,其中,串行通口是目前最简单也最容易接触到的一种通信方式,在很多场合下基于RS-232 或RS-485 标准的串行通信现在和将来依然适用。
RS-232-C 是美国电子工业协会制定的一种双机串行通信物理接口标准,常用的数据传输速率是9600 波特,最高可达115200 波特。受驱动器电容负载的限制和单端信号传送存在共地噪声和不能抑制共模干扰的影响,一般用于
2 Labview 的串口通信功能
Labview 是美国NI 公司针对广泛的工业测控应用推出的图形化编程软件,具有全面而强大的接口通信编程开发能力,当然也支持RS232 标准的串口应用的开发。Labview 的串口功能可以在开发环境的程序框图中通过“函数面板/ 仪器IO/ 串口”路径下的八个VI 函数来实现,如图1 所示,对串口的操作基本流程是:打开(配置)—>循环(读写)—>关闭(释放)。首先是打开串口,也就是调用“VISA 串口配置”函数设置串口号、波特率、数据格式等属性。对串口的读写操作分别通过“VISA 读”和“VISA 写”函数实现,串口操作结束后,需要调用“VISA 结束”函数释放计算机资源。
3 计算机串口的测试程序
常见的计算机串口采用的是RS- 232C 标准,共九根针,在不需要数据流控制的简单使用情况下,只有2(接收)、3(发送)、5(地)三根针有用,用导线把2、3 脚短路,用来验证计算机串口以及线缆的功能是否正常,这相当于计算机自己接收自己发送的数据,如果收发数据一致,说明具备串口通信的硬件基础。
测试程序程序框图如图2 所示,首先调用“VISA 配置”函数,设置9600 波特率, 8 位数据,无奇偶校验、1 位停止位,在While 循环中每隔500ms 执行一次“VISA 写”,写和读的结果被Labview 作为字符处理,“VISA 串口字节数”函数来判断是否收到数据,如果收到数据个数大于0 方才执行“VISA 读”,读的结果在“接受区”字符框中显示出来。
运行时,先选择“COM1”资源,再点击“运行”按钮,在发送区输入字符点击“发送”按钮,同样的数据在“接收区”出现,前面板和运行情况如图3 所示。
4 串口通信协议
由于不同的设备具有不同的控制属性,并且通信数据量较大,为保证通信能可靠的持续进行,必须制定通信协议。上位机向下位机发送各种指令或数据,下位机根据收到的命令完成数据的采集处理并上传或对各种设备做出控制,可见通信的数据量并不大,为此,制定了这样的通信协议,每次通信都由上位机发起,下位机只是被动的等待命令,下位机不能主动发起对话,上位机发送的命令或数据都包括在一帧内,每次对话都是一帧数据,由多个数据组成,分别是帧头、命令、两字节数据长度、数据、帧尾。其中帧头、帧尾采用不常用的数字0x5a 和0xa5。数据长度用来确保通信的完整,因为数据中间也可能出现0x5a 和0xa5 这两个特殊数字,但它们仍是数据,不能认为是新的一帧数据的开始或结束,所以需要发送数据长度这个信息告诉下位机应该接收多少数据以免通信中断,数据长度的取值包括帧头、命令和数据长度自己,也就是在数据个数的基础上再加上四。而数据根据不同的命令又有一个或多个字节,比如继电器的动作无非是开或者关,只需要一个字节,但是128*64 点阵的液晶屏图片显示数据则多达1024 个字节,所以数据长度用两个字节分别表示高低8 位,数据帧格式如表1 所示。
单片机收到命令后需要向上位机返回数据的情形只有一种,那就是上传室温、光照强度和按键状态,此外其他的电路控制并不需要返回任何数据,所以对于下位机向上位机发出的数据帧比较特殊,可以没有数据长度等冗余信息,只按照一定的格式发数据就是了,但是上、下位机必须约定这个数据帧内哪些是室温哪些是光照以及如何利用,如表2 所示,温度采用4 个字节,分别是十位、个位、十分位、百分位,光照2 个字节,分别是高8 位和低2 位,按键1 个字节,用编码来表示2 个按键的4 种组合。
数据帧中对各电路控制命令的编码值分配如表3 所示,有的命令没有数据参
图3 程序运行情况
图1 串口函数的路径
图2 串口测试程序框图057
软件开发
Software Development
电子制作
数,有的只有一个字节的参数,有的多个字节的参数。
5 下位机的串口通信程序
下位机采用STC90C58AD 单片机作为控制器,采用串口中断的方式接收上位机发来的数据帧,解析其中的命令并执行,串口中断设定为最高优先级,串口中断服务程序代码[4] 如下,为了满足通信中大量数据的暂存需求,在XDATA 空间设置了一个长度为1030 的接受缓存区recbuf 数组,其中存放的数据格式符合前面的通信协议数据帧格式,recnum 是接受计数器变量,用于指示当前接受的数据个数,busy、sending、recing 分别是程序标志,供本程序和其他子程序参考使用。
void UART_Isr() interrupt 4 using 1
{ if(RI) { R I = 0 ; if(SBUF == 0x
{ recing = 1; sending = 0;
if((recbuf[2]*256+recbuf[3]) == recnum) recnum = 0; }
if(SBUF == 0xA5)
{ if((recbuf[2]*256+recbuf[3]) == recnum)
{ recing = 0; sending = 1; } }
if(recing) {recbuf[recnum++] = SBUF; } }
if(TI) { TI = 0; busy = 0; } }
6 通信协议的实际测试
下位机电路板上装有一些模拟真实的工业测控现场的简单设备,包括蜂鸣器、数码管、继电器、按键开关等,对于上位机来说,蜂鸣器、数码管、继电器是输出设备,按键是输入设备,通过上位机的Labview 编程测试,本文提出的通信协议可以稳定、可靠、实时的实现控制和输入操作,上位机界面如图4 所示,按键状态框中,K1、K2 两个按钮对应实验板上的两个真实的按键,如果按键被按下则对应的按钮颜色变深,同时实验板的数码管显示“1”或“2”,如果两个键都被按下,实验板上的蜂鸣器会鸣叫,计算机屏幕上两个按钮都变色,界面中的蜂鸣器和继电器开关分别控制下位机实物的动作。
蜂鸣器的上位机程序如图5 所示,其中对串口资源的操作流程和前述通信协议的数据帧结构之间的必须一一对应,由于Labview 的VISA 读写函数对串口传输的数据全部认为是字符,所以需要“强制类型转化”函数将十六进制数据转成字符格式再作为“VISA 写”函数的写入缓冲区, 继电器和数码管的控制程序与蜂鸣器的类似。
7 常见串口故障解决方法
先选择串口资源再运行程序,否则会出错;使用完串口后一定要使用“VISA 结束”函数关闭串口,否则程序在退出的时候会报错说数据丢失。
有时Labview 程序会提示串口号存在,但当前不能对其进行操作,通常是由于这个串口已经被其它程序占用了,同一个资源不能被多个程序同时使用,解决的方法是关掉其它程序即可。还有一种情况是调试通过后生成可执行程序,运行可执行程序也出现这个问题,这时是因为串口被原来的Labview 程序打开,再用可执行程序打开时就会报错,解决办法是关掉原来的Labview 程序。
8 结论
本文介绍了Labview 串口程序开发方法和由运行Labview 软件的上位机和由单片机构成的下位机之间串口通信的实验过程,针对测控现场常见的多种控制设备的特点和需要,制定了简单的通信协议,实际测试,该协议可以达到RS232 标准的最高通信速率115200 波特,对于通信协议中提到的其他设备,尤其大批量数据的传输实验也已测试通过,比如点阵液晶显示屏、LED 显示屏,只是限于篇幅,不能分别展开介绍,这些实验证明了本通信协议的实用价值,也体现了Labview 图形编程软件的便捷和实用的优点。
【参考文献】
[1]National Ins truments Corporation. LabVIEW User Manual. April 2003 Edition
[2] 于祯,王秀清. 基于LabVIEW 与单片机串口的信号处理的研究[J]. 天津科技大学学报,2004,19(3) : 35-38.
[3] 马秀龙,董浩斌,武彬. 基于LabVIEW 串口通讯的多路数据采集系统[J]. 工业控制计算机. 2008, 21(5) :14-15.
[4] 马忠梅, 籍顺心. 单片机的C 语言应用程序设计[M]. 北京: 北京航空航天大学出版社, 2004
【作者简介】
韩金燕,1980-04,女,汉,山东省济南人,淮安信息职业技术学院,讲师 ,学历: 研究生,方向:通信技术方向。
表1 上下传输数据帧格式
表2 下上传输数据帧格式
表3 命令代码及其格式
图4 串口设备测试界面
图5 蜂鸣器的Labview 程序058