APP下载

基于LXI的数据采集管理软件设计与实现

2015-04-25叶卫东杜霄峰

制造业自动化 2015年3期
关键词:入队线程队列

叶卫东,杜霄峰

YE Wei-dong, DU Xiao-feng

(北京航空航天大学 自动化与电气工程学院,北京 100191)

0 引言

数据采集技术是多学科交叉、融合的产物,及时将相关学科的研究新成果应用到数据采集技术中,研究新的数据采集技术与方法对于制造企业采用先进制造技术实现制造自动化、全面提高产品质量、增强企业竞争力有着重要意义。熟悉数据采集与管理系统的概念、功能和组成情况;利用软件模块化思想进行系统的软件设计,包括软件的分层设计,模块划分,模块接口设计;对于底层协议及相关通讯与命令接口封装成IVI驱动,利用DLL接口实现调用。从而实现软件上层与底层的隔离,便于日后的维护升级以及扩展其他通讯方式。

系统分为客户机端和服务器端,客户机可通过以太网通讯方式对数据采集各通道参数进行配置和通信,服务器便可按照配置好的参数进行数据采集工作。同时客户机可将服务器传输过来的实时采集数据进行统计、滤波、时域频域转换等处理;实现数据库、文件等格式的存储,数据库的管理与访问技术;通过表格、图形、以及良好的用户界面友好性,帮助用户得以更快、更好、更便捷的查补系统问题。

用户可以通过在PC机上安装应用程序,通过软面板操作将设置的参数信息准确的发送到仪器。并最终生成C/S模式的安装程序提供给用户进行数据采集管理工作。

1 软件总体方案设计

C/S模式也称C/S架构,是软件系统体系结构的一种。用户在PC机上操作应用程序,通过IVI驱动程序将用户的请求交给服务器端程序进行处理,进而控制硬件动作,实现对仪器模块的远程控。主要内容是介绍LXI数据采集软件的工作原理、C/S模式应用软件方案设计以及IVI驱动软件设计。

本课题中的LXI数据采集软件体系总体结构中包含了客户端和服务端的多个程序,分别完成不同的功能,这些程序共同运行和作用才能实现仪器所有的功能。软硬件系统整体结构图如图1所示。

图1 软硬件系统整体结构图

C/S模式,不依赖外网环境,很多工作在提交给服务器端之前,会首先在客户端进行处理,使得客户端计算机的处理能力得到充分发挥,很大程度上减轻了服务器的负担,提高了仪器工作效率。LXI数据采集软件C/S模式客户端的设计核心就是软件设计,为了增强软件系统的灵活性和可扩展性,方便以后软件的升级和维护,在进行软件设计时采用了模块化的设计思想。

数据处理模块接收从各通道读取回来的数据,对其进行预处理。实现基本功能有:数据工程单位的转换;可根据项目需求,对一定阶段的数据进行统计。

数据存储模块可以对从下位机接收到的数据,根据项目当中的实际需要,可以提供相应存储形式的接口,如csv、txt、二进制文件形式,或者.NET相对优越的数据库存取服务,直接将所需要的数据存入数据库中,还可以直接导出下位机的原始数据,供二次开发使用。

通讯与命令接口模块包括对上位机下位机通讯协议的解析,软件多线程并发队列的设计以及TCP/IP网络的编程通信等功能。

各功能模块详细设计结构如图2所示。

图2 C/S模式软件结构设计

2 通讯与命令接口模块设计

本节中主要介绍基于TCP协议的数据传输,多线程并发队列设计。

2.1 TCP协议的数据传输

TCP连接的建立分为三个阶段:建立连接、数据传输和断开连接,即我们通常所说的三次握手。

数据采集管理系统基于套接字的面向连接的通信连接过程分为以下三个步骤:

1)建立连接

当上位机向下位机发出连接请求,下位机给出响应,双方即可通信。在上位机程序中,首要任务是创建一个本地套接字对象:然后连接到的目标IP和端口号。

2)数据传输

此时上位机与下位机服务器尝试连接;连接成功后,就可以接收服务器发送的消息了。

3)关闭连接

在通信完成之后,必须先使用Shutdown方法停止回话,然后关闭Socket实例。

图3 TCP协议客户端和服务器端工作流程图

2.2 多线程并发队列设计

本文在设计底层通讯功能时,为使系统具有高效率实时性,数据存储和显示无延时,程序在设计时将数据接收和数据处理线程分割开来,使两个线程分别执行互不影响,相当于设计模式中的生产者消费者问题。这两个线程的数据共享的公共存储区就依靠这个队列。而这样的方法可能会引起队列并发访问。

对于一个队列来说,它提供的两个最主要的操作就是入队和出队操作。在多线程的程序当中,多个线程同时会对一个队列进行入队和出队操作。为了保证在入队和出队时操作着同一个队列节点,多个线程并发进行入队和出队操作,这两种情况下的操作是线程安全的。下面分别对Monitor方法,Mutex方法以及Semaphore方法进行实验对比。

1)Monitor(lock)方法

Monitor 类通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问代码块(通常称为临界区)的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。

首先进行初始化操作,建立共享队列,入队操作和出队操作线程。其次启动入队线程和出队线程,并为线程执行函数涉及共享队列部分加上Monitor.Enter()和Monitor.Exit()互斥锁,直到入队出队全部完成,查看程序执行时间。

Lock类为简化版的Monitor类,封装了Monitor.Enter()和Monitor.Exit()函数,性能与Monitor方法一致。

2)Mutex方法

Mutex与Monitor类似,需要注意的是Mutex分两种:一种是本地Mutex一种是系统级Mutex,系统级Mutex可以用来进行跨进程间的线程的同步。尽管Mutex比监视器更为强大,但是相对于Monitor类,它所需要的互操作转换更消耗计算资源。

Mutex与Monitor有一个很大的区别:Mutex可以用来同步属于不同应用程序或者进程的线程,而Monitor没有这个能力。与Monitor类实验方法类似,此处不再详细说明。

3)Semaphore方法

信号量的特性如下:信号量是一个非负整数(表示可以利用的资源数,这里是指的是可用的数据缓冲区中BLOCK的数量),所有通过它的线程(接收线程和存储线程)都会将该整数减1(通过它当然是为了使用资源),当该整数值为零时,所有试图通过它的线程都将处于等待状态。在信号量上我们定义两种操作:Unsignal 和 Signal(释放)。 当一个线程调用Unsignal操作时,它要么通过然后将信号量减1(还有相应的资源),要么一直等下去(相应的资源已经没有),直到信号量大于1或超时。Signal实际上是在信号量上执行加操作,相当于提醒别的新的线程已经可以使用被释放的资源。

数据缓冲区结构如图4所示。

图4 数据缓冲区结构(队列)

实验设计如下:

入队信号量表示现在数据队列中已经存放满数据的数据块的数量,出队信号量表示现在数据队列中空数据块的数量,初始化出队信号量为0。入队信号量初始化为n,初始化两者最大允许的并发数为n。初始化当前入队和出队线程正在处理的数据块的编号为0。分别启动入队线程和出队线程。

当入队信号量计数器大于0时按照In_Index编号选定一个可用数据块对象,直到当前数据块存储内容达到上限,将出队信号量加1,同时入队信号量减1,In_Index加1。若未达到上限,都不执行,继续填充数。当入队计数器等于0时入队线程阻塞,In_Index达到数据块最大时,返回0继续重复之前过程。

当入队信号量计数器大于0时按照Out_Index编号选定一个可用数据块对象,直到当前数据块存储内容全部取出,将出队信号量加1,同时入队信号量减1,Out_Index加1。若未达到上限,都不执行,继续填充数。当出队计数器等于0时出队线程阻塞,Out_Index达到数据块最大时,返回0继续重复之前过程。

基于Semaphore(信号量)的方法流程图如图5所示。

图5 Semaphore方法流程图

计算结果如表1所示。

表1 三种并发队列访问方法效率对比

经过实验得出采用方法三中信号量的方式效率最高,故本软件采用此方法,可以有效的提高队列的出队效率,为软件图形的实时显示及数据的存储打下良好的基础。

3 软件界面设计

3.1 软件总体设计

软件上方菜单选项有“设备”和“系统设置”。其中,“设备”选项下的内容主要用于对设备的完全控制,而“系统设置”选项下的内容主要用于实现软件开机自启动、设置数据库连接配置;状态栏实时显示软件工作状态,以及当前时刻接收和存储的数据量;功能区主要包括通道扫描表设置,采样速率设置,采集方式设置。

3.2 软件工作流程

1)新建设备

打开菜单中的新建设备选项,输入设备ID及名称,配置好需要连接的下位机采集器的IP及端口号。

2)通道配置

“通道配置”界面会以表单形式呈现给用户,让其进行各采集通道独立的参数配置。根据传感器类型,分为两页,即“微应变”和“电压输入”。对于同一个通道,每次仅有一个类型的配置页生效,比如用户在“微应变”页启用并配置了通道1,那么在“电压输入”页将自动禁用通道1的配置,反之同理。如图6所示。

图6 采集软件图形实时显示界面

3)采集配置

“采集配置”界面可以让用户进行采集方式的配置。根据类别不同,主要分为“随机采样配置”、“定时采样配置”、“触发采样配置”,并且以配置页的形式呈现给用户。

完成以上基本设置操作后,软件可以开启采集,实时波形显示效果如图7所示,界面中间区域就是实时曲线显示区,可以观察采集仪传送上来的采集数据曲线。图形显示区的右侧为当前显示的通道图例,如果想要取消哪一个通道曲线的显示,可以去掉相应通道前的勾选。如果想要放大图形显示,在图形显示区想要放大的位置,可完成对该区域的显示放大。

图7 采集软件图形实时显示界面

3.3 实验结果

为验证软件是否正常工作,实验中开启了十个通道的微应变随机采集,采样速率设备120,每个通道每秒中产生120个数据包。每256个数据包合成一个文件存储在相应路径下。相应二进制文件。

对于用户不需要保存原始数据,只要求在数据库中看到采集数据,我们可以通过ADO.NET的SqlBulkCopy方法可将内存中大量数据快速上传至数据库中,保证数据的实时性以及可靠性。数据库中查看到的结果如图8所示。

图8 采集数据上传至数据库

4 结论

本文在深入研究了LXI相关协议及用户的需求后设计了基于LXI的C/S模式数据采集管理软件以及IVI驱动程序设计,实现了与采集器的通信,对采集器进行采集配置与命令控制,完成数据从采集到存储为二进制文件或数据库相应表中,并且可以实时波形显示等功能,解决了多线程并发队列的高效访问问题,达到了预期目的,取得了良好效果。

[1] 于劲松,李行善.下一代自动测试系统体系结构与关键技术[J].计算机测量与控制,2005,13(1)∶1-3.

[2] LI Yue-qin,LI Jin-ping.Arbitrary Waveform Generator based on LabVIEW[A].IEEE[C].2009,103-06.

[3] LXI Consortium.LXI Standard Revision 1.4[Z].October, 2013 Edition.

[4] 田韬,张悠慧,汪东升.基于C/S架构的可扩展嵌入式系统[J].计算机工程与设计,2008,29(7)∶1804-1807.

[5] 胡友民,杜润生,杨叔子.制造系统数据采集技术研究[J]. 制造业自动化,2002,24(3)∶23-27.

[6] Stevens W R,范建华,胥光辉,等.TCP/IP详解卷1∶协议[J]. 2000.

[7] Michael M M, Scott M L. Simple, fast, and practical nonblocking and blocking concurrent queue algorithms[A].Proceedings of the fifteenth annual ACM symposium on Principles of distributed computing.ACM[C],1996∶267-275.

猜你喜欢

入队线程队列
今天我入队——入队仪式
基于C#线程实验探究
1+1我们这样学队章:我们的入队誓词
分批『全童入队』常熟少先队这样做
队列里的小秘密
基于多队列切换的SDN拥塞控制*
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
在队列里
今天我入队了