APP下载

LabVIEW平台下双缓冲高速串口通信系统的设计与实现

2016-01-18,,,

机械与电子 2015年3期

,,,

(1. 同济大学电子与信息工程学院,上海 200092,2. 上海宇航系统工程研究所,上海 201109)

Design and Realization of Double-buffer and High-speed SerialCommunication System Based on LabVIEW

SHI Pei1,WU Yuanbing2,ZHANG Zhiming1,YU Youling1

(1.College of Electronics and Information Engineering,Tongji University,Shanghai 200092,China;

2.Aerospace Research System Engineering Shanghai 201109,China)

LabVIEW平台下双缓冲高速串口通信系统的设计与实现

施培1,吴源兵2,张志明1,余有灵1

(1. 同济大学电子与信息工程学院,上海 200092,2. 上海宇航系统工程研究所,上海 201109)

Design and Realization of Double-buffer and High-speed SerialCommunication System Based on LabVIEW

SHI Pei1,WU Yuanbing2,ZHANG Zhiming1,YU Youling1

(1.College of Electronics and Information Engineering,Tongji University,Shanghai 200092,China;

2.Aerospace Research System Engineering Shanghai 201109,China)

摘要:采用多线程机制、双缓冲和队列技术,基于LabVIEW平台和高速RS422串口,在高速通信模式下实现数据的实时采集、处理、显示及存储。实际项目应用表明,系统运行稳定,执行效率高,具有良好的可移植性和可扩展性,能较好地完成高速串口通信功能。

关键词:LabVIEW;高速串口通信;多线程技术;双缓冲技术

中图分类号:TP273;TP311

文献标识码:A

文章编号:1001-2257(2015)03-0017-03

收稿日期:2014-12-17

Abstract:High-speed serial communication system was developed based on LabVIEW and RS422 communication protocol. Multi-threads mechanism,double-buffer technique and queue scheduling in LabVIEW were applied for the real-time data acquisition and processing,GUI display and database storage. Application result indicates the proposed frame can improve the operation efficiency and veracity,expand the program's functions effectively.

作者简介:施培(1987-),男,上海崇明人,硕士研究生,研究方向为嵌入式系统开发与应用。

Key words:LabVIEW;high-speed serial communication;multithread technique;double-buffer technique

0引言

串口通信是一种使用灵活方便,数据传输可靠的通信方式,在工业控制、数据采集和实时监控中被广泛的应用。高速串口数据采集系统的设计不同于普通串口通信系统,在接收到数据采集终端或者其他设备所发送过来的大量数据的同时,需要对已接收到的数据进行处理并且实时显示,通常情况下也要准确完整地存储数据[1CD*22]。由于数据的传输速度较快,数据量大,如采用传统的单线程编程方式,常常会出现接收数据内容不完整或者不正确的情况。某型地面试验系统中,控制中心机与DSP下位机终端之间采用RS422全双工通信,传输格式采用1位起始位,8位数据位,1位停止位,115200bps的传输速率,DSP终端每隔10 ms上传64字节长度的数据帧。设计要求计算机能完整准确的接收数据并存储到后台数据库中(本地数据库Access),同时同步显示解析后的动态数据。采用多线程技术则能保证系统的每个环节同步工作,节省大量系统时间完成数据读取、显示及存储。

1基于LabVIEW串口通信程序的开发

1.1 LabVIEW-VISA

LabVIEW是NI(美国国家仪器公司)开发的一种基于图形化编程语言的虚拟开发平台,它采用的图形化G语言使应用程序的开发变得简单方便[1-3]。LabVIEW 软件提供了丰富的串口通信函数,编程时,首先调用串口配置函数完成串口参数设置,包括资源分配,设置波特率、数据位、停止位、校验位等.然后,使用VISA Write函数发送数据,使用VISA Read函数接收数据.串口使用完成后,应用VISA Close函数关闭串口,结束通信[3CD*24]。

1.2 多线程技术

传统测控系统的工作流程是数据采集,分析,显示,存储4个任务在同一线程上按照顺序依次执行,在一个任务运行的同时后面其余的任务就不能同步运行,只能处于等待状态,因此,常常造成数据不能正常处理显示及存储。采用多线程技术,当程序运行时,操作系统为每个独立的线程安排CPU时间,单处理器系统以轮回方式按线程的优先级提供时间片,每个线程在使用完时间片后交出控制权,系统再将CPU时间片分配给下一个线程,相较于单线程编程方式,多线程技术极大的提高了系统的执行速度。

1.3 双缓冲技术

图1 数据接收程序

由于数据采集、处理、显示和存储所需的系统资源和运行时间各不相同,和前三者相比较,存储操作往往耗时更长。在高速大数据量情况下,当前数据记录在存储的过程会被后一条数据记录覆盖,这样会导致数据不能完整正确的存储。借鉴图像显示中的双缓冲技术,在程序中先开辟2个缓冲区,将接收到的数据先存放到一个缓冲区中,当缓冲区达到一定大小时将数据存放到另一个缓冲区中,同时对第1个缓冲区中的数据进行存储操作。一旦第2个缓冲区中的数据记录达到指定的数量后,再将数据存放到第1个缓冲区中,重复使用2个缓冲区进行数据的存放和存储,能够有效地避免上面遇到的问题。双缓冲能起到很好的数据存储缓冲作用,在实际工程中能高效地完成数据存储操作。

2高速串口通信程序实现

2.1 总体设计方案

根据多线程的机制,将数据采集、分析显示、双缓冲、存储分配到4个While循环中,并行的执行。每个While循环采用状态机制,循环之间借助队列函数实现“生产者-消费者”架构进行数据的共享。VISA读取函数每隔10 ms读取一次串口缓冲区,将下位机数据终端发送的数据读取出来,再将数据传输给后面的数据分析显示循环和数据存储循环,数据接收循环程序如图1所示。

当使用多线程技术的同时,必须考虑程序的停止机制,即如何来确保4个不同功能While循环的同步停止,以便能安全退出整个上位机程序。当读串口循环接收到64个字节的数据后,将其通过队列函数传递到数据分析循环,按下停止按钮将读串口循环停止,连接在While循环内的释放队列引用函数将前面定义的Data队列取消,在数据处理循环中的出队列函数,将无法检测到Data队列的引用,从而产生报错。利用此错误可停止数据处理While循环,即通过1对队列函数(入队列和出队列)来控制2个While循环的停止。系统中其余3个While循环(数据显示、数据处理、数据存储)均通过此机制实现循环的停止。数据显示循环和数据存储循环的后台程序流程如图2所示。

图2 数据显示和存储程序流程

2.2 双缓冲的实现

在缓冲处理循环的Initialize状态中,首先利用初始化数组函数开辟缓冲区A和缓冲区B(50行64列的二维数组),并且初始化数组指针为0。程序进入Buffer状态后,当上位机每隔10 ms接收到一帧64个字节的数据后,利用数组替换子集函数将数据写入到缓冲区A中,第1条数据替换到缓冲区A的第1行(组数指针初始化为0),同时数组指针自动加1,即第2条数据存放到第2行,当存放到第50条时(数组指针为49),标志缓冲区A放满,切换到缓冲区B,将后续数据存放到缓冲区B中,操作与缓冲区A相同。同时对缓冲区A中的数据进行存储操作,借助队列函数将其传输到存储循环中进行存储。这样就实现接收数据的同时又在存储数据。当缓冲区B存满时,再将数据存放到缓冲区A中,同时对缓冲区B中的数据进行存储操作。如此依次进行存放和存储操作,接收双缓冲机制流程如图3所示。

图3 双缓冲流程

3测试结果

实际工程项目应用中,上位机电脑配置为:Intel Celeron 1.5 GHz主频,4 G内存,500 G硬盘,Windows XP操作系统,本地数据库采用Access2007。下位机DSP数据终端以10 ms间隔,115200bps速率持续向上位计算机发送64个字节的数据帧,利用前述技术方案在LabVIEW环境下编程,上位机能够实时接收数据、显示数据和存储数据,并且在接收和处理数据时没有发生缓冲区溢出现象。根据实验测试数据,可以计算得到平均存储一条数据记录的时间t=4.08 ms。

4结束语

结合实际项目,实现基于双缓冲的高速串口通信程序,能可靠地接收数据终端所发送的数据,完整准确地进行显示和存储,能够达到预先提出的设计指标。进一步的研究方向是提高数据传输的速率(如发送时间间隔减小或者增大发送数据长度),以达到更好的技术性能,并引入高性能数据库管理系统(如SQL Sever或Oracle等来提高程序的整体性能)。

参考文献:

[1]李江全. LabVIEW虚拟仪器从入门到测控应用130例. 北京:电子工业出版社,2013.

[2]苏岳龙,李贻斌,宋锐. 基于VC++6.0的高速串口通信数据采集系统.微计算机信息,2005,21(5):147-148.

[3]Bitter R,Mohiuddin T. LabVIEW advanced programming techniques. Boston:CRC Press,2001.

[4]赵奇峰,闵涛,杨黔龙,等. 基于LabVIEW串口数据采集系统设计. 计算机技术与发展,2011,21(11):224-226.

[5]徐华中,黄丽萍. 基于LabVIEW和DSP串口的多通道电机参数采集系统.电子测量技术,2011,34(4):66-69.