您的位置 首页 元件

多线程技能在数据实时收集剖析中的使用规划

数字接口设备是实现标准422串行总线到自定义串行总线转换的专用通信设备。⑥检查该帧中计数器数据与前后帧的计数器数据是否连续,如果连续则没有帧出错,否则有掉帧现象出现,需要根据前后计数器数据确定掉帧的长

  导言

  数字接口设备是完结规范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总线上传数据的缓存,用于完结接纳的USB数据包依照各个通道进行数据分化;二级缓冲则依照通道号将分化输出的数据别离进行暂存,用于数据剖析线程完结数据剖析处理。整个计划中,数据包的上传、存储、数据分化、数据剖析等操作均是在内存中完结,速度快,正确率高,再加上选用新的线程同步办法,既确保了数据收集线程高速数据吞吐量、数据剖析线程的快速响应和实时剖析,又确保了整个计划较高的功能和最低的体系开支。数据缓存处理如图2。

  

  

  数据收集

  为了完结USB回来数据的保存,在内存中构建了一个12k的高速内存缓冲区,12k的空间以512字节(一个USB数据包的巨细)为单位均匀分红24等份。多线程同步中常用信号量来操控拜访某一共享资源的线程数,结合操作体系中出产者和顾客的思维可选用扩展信号量的办法来完结线程同步。数据收集线程操作时,12k高速缓冲差异离用读写两个信号量作为状况指示,对数据读入和输出进行操控。写信号量个数初始化为24个(表明有24个数据区间可写入),读信号量个数初始化为0个(表明有0个空间有数据需求读出),数据收集线程等效为出产者,数据剖析线程等效为顾客。如图3所示。USB接口每回来一包数据,首要判别写信号量个数,为零则线程堵塞等候,不为零则完结数据写入操作,将USB数据包内容存入当时出产者指针(pWriteIndex)所指向地址的后512字节缓冲区中,完结后出产者指针加512,写信号量减1,读信号量加1,这是出产的进程。当线程切换到数据剖析线程后开端消费(对收集回来的数据包分化处理),首要判别读信号量个数,为零(没有可消费的)则线程堵塞等候,不为零则由顾客指针(pReadIndex)来操控读取一包数据。一包数据读取结束后顾客指针加512,读信号量减1,写信号量加1。由以上剖析可知,整个12k的缓冲区在读写两个信号量的和谐作业下不只完结了数据收集和数据剖析线程的同步,并且经过互锁机制确保了出产者指针和顾客指针不会指向同一块内存区域,使整个体系的可靠性得到明显进步。

  数据剖析

  因为数字接口测验设备八个通道可一起作业,为了差异USB总线上传的数据包中的数据别离对应哪一个通道的数据,并满意数据传输的实时性要求,每个通道以64字节为单位将测验数据送入USB接口的内部缓冲区,其第一个字节用于标识随后63字节是哪一个通道的数据,别离用01,02……07,08进行标识。当USB接口的内部缓冲区填满512字节后即经过USB总线上传到计算机内存中的高速缓冲区。所以在数据剖析时首要需求从USB数据包中提取每个通道回传的测验数据,然后与规范格局数据进行比照剖析。可见若在长期测验时,数据剖析线程数据处理量大,使命深重。为确保整个体系的实时性和数据剖析准确性,测验接纳回来的数据依照通道号不同别离保存在不同的内存映射文件中。

  数据剖析线程在读信号量和顾客指针的操控下成功读取一包数据后,依据通道标明号提取此包中每个通道的数据,写入对应的内存映射文件中,再调用数据处理函数对每个通道数据做误码剖析。误码剖析的成果可由主界面线程调用显现。数据分化流程如图4所示。

  

  为了确保测验功率和数据处理的正确性,pWriteCounter既用于操控内存映射文件写入数据指针的移动,也用于判别已接纳的数据字节数,作为数据处理时读内存映射文件指针的参阅和是否开端对数据进行剖析的条件。数据处理时,并不是内存映射文件中写入数据后就立刻开端剖析,而是依据pWriteCounter确认已接纳的数据字节数,直到接纳回来大于一个规范帧长度的数据后才开端对此帧数据的误码率剖析,这样既避免了屡次剖析一帧数据,又确保了数据剖析的正确性,并且减少了数据剖析线程独占CPU的时刻。从终究实践运转成果来看,此办法有用处理了数据实时收集进程中掉数据的问题。

  数据经分化写入对应通道内存映射文件后,还需求实时地将每个通道接纳回来的测验数据和规范数据进行比照剖析,并以误码率方式进行显现,测验人员依据实时改变的误码率即可监测数字接口设备是否作业正常。数据剖析处理流程如图5所示。在实践使用中,数字接口设备或许呈现的毛病现象较多,收集接纳回来的数据量相当大且数据犯错状况各不相同,不能误判或漏掉任何一种状况,经过重复测验得出以下对固定格局数据处理的办法:

  

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

  ②首要判别此帧数据的帧尾方位是否为0x10,以及帧尾的前一个数据和对应的规范数据(规范数据帧尾的前一个数)是否相同,若一起满意这两个条件,阐明此帧数据为规范帧(此帧数据长度和发送的规范帧帧长度持平),若不满意进行第④步操作。

  ③判别此帧为规范帧后,从此帧数据和规范数据的第二位开端到帧尾逐个进行比照判别(越过第0个帧头数据和第1个计数器数据),不持平则记载犯错,每发现一处过错字节,过错字节数加1。进入第⑥步。

  ④从帧头到帧长度数据范围内查找是否呈现0xAA,呈现0xAA,首要用第②步操作判别此0xAA是否为下一帧数据的帧头,若是下一帧数据帧头,记载帧头前一个字节为此帧帧尾方位,阐明此帧数据有掉数据现象,不然为过错数据,调用非规范帧处理。

  ⑤从此帧数据和规范数据的第二位开端到确认的该帧长度范围内数据进行逐个比照判别 (越过第0个帧头数据和第1个计数器数据),不持平则记载犯错,并判别为过错一个字节。

  ⑥查看该帧中计数器数据与前后帧的计数器数据是否接连,假如接连则没有帧犯错,不然有掉帧现象呈现,需求依据前后计数器数据确认掉帧的长度,并转化为对应过错字节数。

  一起接上两个被测设备验证整个体系的功能,即便每个通道均挑选作业在最高波特率614.4 kbps和最高循环发送帧周期5ms下,仍能确保数据收集实时高速、数据质量安稳且误码率低。

  结束语

  实时测验与成果显现如图6所示。该技能现已成功应用于某数字接口设备的检测与修理体系,取得了杰出的作用。经很多测验验证,此种多线程、内存映射文件和两级缓冲的办法在高速实时数据收集和剖析中作用很好。依据出产者和顾客的思维树立的读写信号量有用地完结了收集和剖析线程间的同步,内存映射文件的巨细在开端测验前请求为100M,当需求更长期测验时还能够动态请求拓荒新的内存空间,既确保了体系的实时性要求,又有用节省了体系内存资源。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/224966.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部