多线程技术在数据实时采集分析中的应用

多线程技术在数据实时采集分析中的应用

 

数字接口设备是实现标准422串行总线到自定义串行总线转换的专用通信设备。数字接口测试系统根据数字接口设备的工作原理,输出422串行数据和自定义串行总线的控制信 (YCK,YZM)给数字接口设备,并对其输出的串行数据(YDATA)进行采集、存储、分析和处理,从而达到对被测设备进行检测的目的。本数字接口测试系统共提供了八个测试通道,每个通道的422串行总线和自定义串行总线的相关参数都可由测试人员通过应用软件进行设置。为方便对数据进行分析,同时在软件上约定了发送的数据格式为:AA xx 01 23 45 67 89 AB CD EF 01 23… 10,其中帧头为0xAA,帧尾为0x10,xx为发送计数器值,每发送一次依次加1。应用软件通过相应的算法对自定义串行总线接收数据进行实时分析和处理,如:已经接收的字节数,共接收了多少帧数据,共出错有多少字节……并将结果在测试界面上动态显示,测试人员可以根据这些实时的测试结果来判断被测设备是否正常工作,一旦发现测试数据误码率太高,即可马上断电停止测试,防止被测设备烧坏。

  系统实现方案

  数字接口测试系统原理框图如图1所示。测试设备通过USB2.0总线与操作控制计算机进行连接,每台测试设备提供了八个通道的数据发送和接收单元,其中数据发送单元用于输出422异步串行数据,其波特率最高可达614.4 kbps,帧长可根据测试要求进行调整,每帧数据最高循环发送帧周期为5ms;数据接收单元用于产生自定义串行总线的控制信 YZM和YCK,并从YDATA读回数据,YCK和YZM最高分别可达1.6384MHz和25.6kHz。

  

 

  数据采集

  为了实现USB返回数据的保存,在内存中构建了一个12k的高速内存缓冲区,12k的空间以512字节(一个USB数据包的大小)为单位平均分成24等份。多线程同步中常用信 量来控制访问某一共享资源的线程数,结合操作系统中生产者和消费者的思想可采用扩展信 量的方式来完成线程同步。数据采集线程操作时,12k高速缓冲区分别用读写两个信 量作为状态指示,对数据读入和输出进行控制。写信 量个数初始化为24个(表示有24个数据区间可写入),读信 量个数初始化为0个(表示有0个空间有数据需要读出),数据采集线程等效为生产者,数据分析线程等效为消费者。如图3所示。USB接口每返回一包数据,首先判断写信 量个数,为零则线程阻塞等待,不为零则实现数据写入操作,将USB数据包内容存入当前生产者指针(pWriteIndex)所指向地址的后512字节缓冲区中,完成后生产者指针加512,写信 量减1,读信 量加1,这是生产的过程。当线程切换到数据分析线程后开始消费(对采集回来的数据包分解处理),首先判断读信 量个数,为零(没有可消费的)则线程阻塞等待,不为零则由消费者指针(pReadIndex)来控制读取一包数据。一包数据读取完毕后消费者指针加512,读信 量减1,写信 量加1。由以上分析可知,整个12k的缓冲区在读写两个信 量的协调工作下不仅实现了数据采集和数据分析线程的同步,并且通过互锁机制保证了生产者指针和消费者指针不会指向同一块内存区域,使整个系统的可靠性得到显著提高。

  

 

 

  为了保证测试效率和数据处理的正确性,pWriteCounter既用于控制内存映射文件写入数据指针的移动,也用于判断已接收的数据字节数,作为数据处理时读内存映射文件指针的参考和是否开始对数据进行分析的条件。数据处理时,并不是内存映射文件中写入数据后就马上开始分析,而是根据pWriteCounter确定已接收的数据字节数,直到接收回来大于一个标准帧长度的数据后才开始对此帧数据的误码率分析,这样既避免了多次分析一帧数据,又保证了数据分析的正确性,而且减少了数据分析线程独占CPU的时间。从最终实际运行结果来看,此方法有效解决了数据实时采集过程中掉数据的问题。

  数据经分解写入对应通道内存映射文件后,还需要实时地将每个通道接收回来的测试数据和标准数据进行对比分析,并以误码率形式进行显示,测试人员根据实时变化的误码率即可监测数字接口设备是否工作正常。数据分析处理流程如图5所示。在实际使用中,数字接口设备可能出现的故障现象较多,采集接收回来的数据量相当大且数据出错情况各不相同,不能误判或漏掉任何一种情况,通过反复测试得出以下对固定格式数据处理的方法:

  ①从每个通道的内存映射文件中逐个字节扫描帧头0xAA,一旦检测到帧头0xAA,进入第②步。

  

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年1月2日
下一篇 2016年1月2日

相关推荐