APP下载

基于Linux的WFT嵌入式数据传输系统设计

2013-02-28刘庆华李晶晶张为公

关键词:线程串口报文

刘庆华,李晶晶,张为公,何 仁

(1.江苏科技大学计算机科学与工程学院,江苏镇江212003)(2.东南大学仪器科学与工程学院,江苏南京210018)(3.江苏大学汽车与交通工程学院,江苏镇江212013)

汽车实车道路试验作为不可替代的重要汽车试验与测试方法,对于分析评价汽车动态性能、道路载荷谱数据采集以及台架路谱再现等具有重要的意义[1].目前汽车道路试验技术在发达国家,以美国、日本、德国最为先进,已研制出各种先进的随车专用传感器及数据采集与处理系统,可进行多种汽车道路试验.国内绝大多数的汽车生产商和检测单位均购买或租赁国外现有的车轮力传感器与数据采集系统进行整车试验.国内尚未出现企业或其他研究机构规模化开发与生产具有一定系统性与集成性的车轮多维力传感器和数据采集系统[2-5].

本项目组为实现对汽车道路载荷谱数据的采集,以车轮力传感器(wheel force transducer,WFT)为核心,与其他分立系统(包括数据传输采集模块、WFT嵌入式数据传输系统、道路载荷谱显示分析系统)共同组成了一套道路载荷谱数据采集与显示分析系统,具有广阔的应用前景和实用价值.其中本嵌入系统作为项目中4串口设备的联网服务器,共完成了1个网口与上位机(道路载荷谱显示分析系统)、4个串口与下层模块(数据传输采集模块)间的通讯,并把所采集到的垂直力Fz、回正力矩Mz等[6]的二进制数据进行保存与上传至上位机等.

1 总体设计

整个项目的系统结构框架如图1.贴在弹性体上的应变传感器通过排线连接到组桥电路(安装在弹性体上);数据采集模块采用5 V电池组供电,采集来自于组桥电路的差分输出,以及磁电式编码器的输出;数据传输模块所需电源由本系统提供,并将采集到的数据传输至本系统;道路载荷谱分析显示系统作为以太网的客户端连接到本系统的服务端,进行数据交互.

图1 项目系统结构框架Fig.1 Frame of project system structure

2 硬件设计

本WFT嵌入式数据传输系统主要实现WFT多串口数据转以太网的上位机远程数据传输,系统硬件采用板载英特尔Navy pier N270处理器(1.6 GHz),与市场上其他PC/104 CPU模块相比更为经济.作为一款可编程串口设备的联网服务器,本系统硬件支持1个10/100Base-TX以太网接口、2个USB 2.0接口、4个串口、1个18位LVDS接口、2个PS/2接口(键盘与鼠标)和实时时钟,可以实现RS-232串行接口与TCP/IP网络的数据通信.除CPU外其他芯片主要采用Intel 945GSE和ICH7-M(82801GBM),确保了更好的工作性能,为完成本系统的设计需求奠定了基础.本系统硬件总体结构示意图如图 2[7].

图2 硬件总体结构示意图Fig.2 Schematic diagram of hardware structure

本嵌入式系统建立于板载Intel Atom Navy pier N270处理器与Intel 945GSE+ICH7-M芯片组上,其具体设计如下:主板采用PC104主板;CPU选用Intel Navy pier N270处理器,主频1.6 GHz,功耗为2.5 W;系统配备SCH3114芯片,便于控制与扩展I/O;实时时钟选用ICH7-M芯片控制;系统内存采用DDRLL533,最高可达1 GB内存;采用PCI-104扩展接口;AT/ATX电源模式,12 V输入下运行.

硬件内预装的Linux操作系统为软件设计提供了开源软件的开发平台,其高容量的内存可以直接下载运行应用程序,这有利于系统的多次设计开发.作为符合标准Linux系统架构的操作系统,凡符合POSIX标准的应用程序,经过交叉编译工具编译以后,可以很容易移植到本系统硬件设备上运行,其系统结构如图3.将本嵌入式系统的软件在PC机上经过交叉编译,然后移植到本系统的硬件设备上,就可以完成系统设计所要求的全部功能[8].

图3 系统结构Fig.3 System structure

3 软件设计

3.1 Linux 操作系统

Linux是指一套免费使用和自由传播的类UNIX操作系统,通常所说的Linux是Linus Torvalds所写的Linux操作系统内核.从Linux的发展过程可以看出,Linux从最开始就是一个开放系统,并且它始终遵循着源代码开放的原则,是一个成熟而稳定的网络操作系统,作为嵌入硬件的操作系统具有如下优势:① 低成本开放系统,Linux的源码开放性使任何人可以获取并修改Linux源码,这大大降低了开发成本和提高了开发产品的效率;②可应用于多种硬件平台,Linux可支持多种体系结构,并且已经被移植到多种硬件平台使用;③可定制的内核,Linux的内核可裁剪;④ 性能优异,Linux操作系统内核精简、高效并且稳定,能充分发挥硬件的功能;⑤ 良好的网络支持,Linux是首先实现TCP/IP协议栈的操作系统,它的内核结构在网络方面是非常完整的.以上特性表明,本WFT嵌入数据传输系统采用Linux作为操作系统对软件进行设计具有较多优势.

3.2 多线程技术

多线程技术早在60年代就被提出,但真正应用到操作系统中是在80年代中期,现已被许多操作系统所支持.多线程程序作为一种多任务、并发的工作方式,有如下优点:① 相比于进程,使用多线程除节省资源外,线程间彼此转换所需的时间也远远小于进程间转换所需要的时间[9];② 不同线程可以并行执行不同的任务,且它们之间互相不会干扰;③改善程序的结构,一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序便于理解和修改.

线程的层次被分为用户级线程(在应用软件中创建和操纵)、内核级线程(操作系统实现大多数线程)与硬件线程(线程在硬件资源上的表现).本系统软件是在用户级线程进行设计编程,可调用线程库API,操作系统在内核级进行线程管理,并完成软件线程到硬件线程的映射工作.

多线程程序设计的基本思想主要包括对3种问题的分解:任务分解,不同程序行为采用不同线程实现,是对问题的纵向切割;数据分解,多个线程对不同数据块执行相同的操作,是对问题的横向切割;数据流分解,一个线程的输出作为另一个线程的输入,即流水线模型.本WFT嵌入式传输系统的软件是采用任务分解和数据分解相结合的方式进行设计.

Linux系统下的多线程遵循POSIX线程接口,称为pthread,编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a.

3.3 软件框架

本嵌入式系统采用了多线程技术,对4路车轮力传感器的数据信息进行了快速与同步的采集.图4为本系统的软件框架图,从图上可以得知,对采集过程的控制既可以通过上位机(与本系统通过网口连接),也可以通过命令参数来进行:当网口接收到来自于上位机的命令报文后,令切换参数为1(pp=1);当某特定的命令参数被获得(即某特定按键被按下)后,令切换参数为0(pp=0);所以可根据pp值的不同判断此时是处于上位机控制采集过程,还是命令参数控制采集过程.

图4 软件系统框架Fig.4 Software system framework

3.4 程序设计

在main函数里,首先对串口进行了初始化,然后创建5个线程,网络初始化与接收,接着线程挂起等待,最后关闭网络,关闭串口.主程序的执行流程具体如图5.

图5 主程序流程Fig.5 Flowchart of main program

3.4.1 主线程与子线程的具体设计

在主线程中进行了网络数据的传输,是作为网络的Server服务器与上位机间进行通讯.

1)使用sock函数和bind函数对网络端口号进行了初始化与绑定,然后listen函数监听,accep函数等待并接受客户端的请求[10].

2)网络接收数据使用recv函数,对接收到的数据报文首先进行解析,提取出报文类型与采集模块的值.根据报文类型的值可以判断上位机发送给本系统的命令是属于何种命令(包括激活、休眠、开始、停止命令),再做出相应不同的处理.当为激活、休眠、开始、停止命令时,分别令采集控制参数coll_flag 为 0,1,2,3.

3)串口写入函数为write函数,根据网口接收到数据报文命令的采集模块值,判断出该向哪一串口模块转发此数据报文.

4)使用pthread_create函数创建5个采集子线程并开始执行;pthread_join函数等待各线程结束,并回收线程资源.

子线程包括从线程1与从线程2,3,4,5,其具体实现过程如下:

1)从线程1主要负责接收命令参数,当某命令参数被获得(某命令按键被按下)时,向4个串口写入与命令参数相对应的数据报文(激活、休眠、开始、停止命令),此外在发送上述命令时,做出相应不同的处理.当为激活、休眠、开始、停止命令时,分别令 coll_flag=0,1,2,3.

2)从线程2,3,4,5主要执行从4个串口读入数据,通过这4个串口实现本系统与下位机(下层采集传输模块)间的通讯,其执行的是相同的函数,流程图都如图6,由图可知其具体执行的操作如下:

当切换参数为1(有上位机)时,通过网口转发从串口中读入的数据至上位机,此外,根据采集控制参数的不同,执行不同的操作.

当切换参数为0(无上位机)时,根据控制采集参数的不同,从而执行不同的操作.当coll_flag=0或1时,确保4个串口都读入到正确返回命令数据后,才可以写入下一采集命令数据.当coll_flag=2(开始采集命令)时,保存从串口中读入的返回采集数据至文件夹下的对应文件;当coll_flag=3(停止采集命令)时,确保4个串口都无数据读入后,才接收下一个命令的发出,并打印从串口读入的数据直至串口无数据读入为止.

图6 数据采集流程Fig.6 Flowchart of data acquisition

3.4.2 采集数据存储

本车轮力传感器嵌入式数据传输系统对返回的采集数据进行了上传与本地存储.其中本地存储具体实现的过程如下:

1)在接收到开始采集命令后,以当前年月日创建一个文件夹(如WFTcollection20120512),若已经存在就打开此文件夹;通过解析开始采集命令数据报文,获得采集模块的值,在上述文件夹下分别创建以采集模块值(1,2,3,4阿拉伯数字)命名的文件夹,若已经存在就打开此文件夹;打开一个二进制文件,并以当前的时分秒命名(如115021.bin).

2)当从串口中接收到数据要保存时,将采集到的数据写入上述打开的文件.

4 系统测试

本项目系统对道路载荷谱数据进行采集,要求每接收到一份采集数据报文,用时必须在5 ms以内.为了验证本WFT嵌入式传输系统的性能是否能够满足要求,任意选择本嵌入式系统的某一个串口,利用串口调试助手模拟下位机(数据传输模块与数据采集模块)向本系统发送数据,对本嵌入系统接收数据的错码率与丢包率进行测试,同时串口助手也可以接收来自本嵌入式系统的返回数据并显示.

设置串口助手每1 ms发送一次相同的采集数据(满足本项目系统的通讯协议)给本系统,共发送26 527次.本系统会将接收到的采集数据保存至以当前时间命名的二进制文件中,接收数据结束后,将此二进制文件通过USB拷贝至笔记本电脑,在VC++6.0环境下通过编程实现对数据的比对,其具体比对过程为:通过循环语句,每次从二进制文件中读取17 Byte数据与串口助手每次发送的17 Byte数据进行比对,如果有一字节发生错误,则错码数加1;接收到的采集数据报文总个数应该为26 527,即总字节数为450 959(26 527×17),若接收的字节数比450 959少n个,则丢包数加n;将错码数除以26 527再乘以100就得到错码率,将丢包数除以450 959再乘以100就得到丢包率.结果显示未出现丢包,错码百分率为0.011 309.

再一次进行测试,具体过程与上述相同,只是将串口助手的循环时间间隔改为5 ms,结果显示未出现丢包,未出现错码.

对其他3个串口也进行上述相同的系统测试,试验结果表明:本系统能够满足5 ms以内接收一份采集数据报文的性能要求,能够准确完整采集各路传感器的信息,具有较高精确性与实时性.

5 试验结果

本试验(汽车实车道路试验)采集到的数据实际为组桥电路的差分输出值与磁电式编码器的输出值:组桥电路的差分输出值为AD转换值,与力、力矩存在某种线性关系;磁电式编码器测量的为车轮转动的频率,与解耦采集数据有关.

将本嵌入式传输系统与项目中其他分立系统联立后进行了多次试验,图7与图8分别为汽车在水泥和卵石路面上进行道路载荷谱数据采集的实时曲线,此曲线是在数据采集时由Window系统下MFC载入的IOCOMP控件在VC++中编写软件绘制.

图7 水泥路面Fz实时显示曲线Fig.7 Curve of Fz

图8 卵石路面Fz实时显示曲线Fig.8 Curve of Fz

将图7与图8中的曲线进行对比,图7曲线中幅值大致范围为[4 500,3 500]N,图8曲线中幅值大致范围为[2 000,5 500]N,求解出图7对应的数据采集平均值为3 465.7 N,方差为296.46 N2,图8对应的数据采集平均值为3 782.3 N,方差为726.41 N2,由方差值的大小可以描述出图8曲线的波动程度比图7大.可见图8所示路面更不平整,起伏较大,所采集数据与路面实际情况一致.

6 结论

文中为满足车轮力传感器数据采集的需要,在Linux开发环境下设计了一套多传感器嵌入式数据传输系统,并对系统的软硬件进行了设计.目前该系统已能较好完成数据实时和精确采集的功能,多次试验测试表明,该系统具有很强的扩展和兼容性,数据采集性能稳定可靠,能够满足道路载荷谱数据采集的性能要求,作为自主研制的车、路测试仪器具有重要的应用价值.

References)

[1]刘庆华,张为公.基于车轮力传感器的道路载荷谱采集系统设计[J].江苏大学学报:自然科学版,2011,32(4):389-393.Liu Qinghua,Zhang Weigong.Design of acquisition system for road loading spectra data based on wheel force transducer[J].Journal of Jiangsu University:Natural Science Edition,2011,32(4):389-393.(in Chinese)

[2]付鹏.嵌入式车轮力传感器及数据采集系统开发与工程实现[D].南京:东南大学,2006:8-14.

[3]徐晶晶.汽车行驶试验数据数据分析软件开发与研究[D].南京:解放军信息工程大学,2008:7-11.

[4]宋国民.多分力车轮力传感器研究及其在汽车道路试验中的应用[D].南京:东南大学,2001:5-17.

[5]周木子.便携式汽车道路试验数据采集及分析系统研究[D].南京:东南大学,2006:13-33.

[6] Wang Yu,Zhang Weigong,Wang Hai.Application of wavelet method with nonlinear threshold control in vehicle wheel force signal denoising[C]∥Fourth International Conference on Intelligent Computation Technology and Au-tomation.Shenzhen Guangdong:[s.n.],2011.

[7]Wang Jiannong,Wang Wei.The common data acquisition system based on arm9[C]∥The 10th International Conference on Electronic Measurement&Instruments.Chengdu Sichuan:[s.n.],2011.

[8]汪崇.嵌入式Linux在远程数据采集中的应用研究[D].大连:大连理工大学,2007:48-51.

[9]华清远见嵌入式培训中心.嵌入式Linux应用程序开发标准教程[M].2版.北京:人民邮电出版社,2009:79-83.

[10]孙德辉,王科,史运涛.基于SOCKET编程实现IP传感器的网络通信[J].电子测量技术,2008,31(9):97-99.Sun Dehui,Wang Ke,Shi Yuntao.IP sensor′s network communication based on SOCKET programming[J].E-lectronic Measurement Technology,2008,31(9):97-99.(in Chinse)

猜你喜欢

线程串口报文
基于J1939 协议多包报文的时序研究及应用
基于C#线程实验探究
浅谈AB PLC串口跟RFID传感器的通讯应用
CTCS-2级报文数据管理需求分析和实现
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
浅析反驳类报文要点
ATS与列车通信报文分析
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索