一种基于LabVIEW的多通道多采样率CAN总线数据解析方法与流程

文档序号:14727209发布日期:2018-06-19 11:51阅读:1031来源:国知局

本发明属于CAN总线传输技术领域,涉及一种基于LabVIEW的多通道多采样率CAN总线数据解析方法。



背景技术:

CAN总线一个主要优点是可以实时传输多个节点的数据。但是,使用CAN总线传输采集数据时,不同节点采样率各异使得不同通道采样数据量不同,这就对上位机灵活可靠稳定接收不同通道的数据,并解析、存储、显示数据提出了挑战,目前基于LabVIEW的CAN总线数据接收处理尚未有较好的处理方法。

《一种基于LabVIEW的CAN总线数据处理方法》专利中提出一种针对双CAN总线实时通讯的技术,但是其接收的每个CAN总线只能有一个CAN节点发送数据,无法解决多个节点同时发送数据的问题,亦无法解决不同采样速率节点不同采样率的问题,由于CAN总线为串行通讯方式,数据解析错误会导致各通道间数据互串的问题。以上问题成为LabVIEW应用CAN总线通讯的一个难点问题,限制了CAN总线在以LabVIEW为基础的测试控制领域的应用。



技术实现要素:

针对目前对CAN总线数据解析的缺陷,本发明提出一种基于LabVIEW的多通道多采样率CAN总线数据解析方法,有效解决多CAN总线、多通道、多ID、多采样率CAN总线数据实时传输与解析问题。

本发明的目的是通过以下技术方案来实现的:

一种基于LabVIEW的多通道多采样率CAN总线数据解析方法,包括以下步骤:

步骤一:根据不同ID解析数据块,取出相应字节的数据作为对应通道数据,将本ID内所有通道数据组成一个二维数组,放入对应寄存器内,每个二维数组的行数代表本ID数据帧所包含的通道数,二维数组的列数是数据块所包含的本通道的采样点个数;

步骤二:读出所有寄存器内的二维数组,将所有二维数组拼接为一个总二维数组,其行数即对应通道数,列数对应采样点数;

步骤三:将步骤一得到的每通道的采样点个数,存为一列数组,拼接到步骤二得到的二维数组的最前面,作为总二维数组的帧头,得到的拼接后的二维数组的第一列即对应本通道采样点数;

步骤四:将步骤三中得到的二维数组传输给显示模块显示以及存储模块缓存。

进一步地,所述显示模块按照第一列每行数据值截取本通道后续数值,剔除补充的0值进行显示。

进一步的,所述存储模块预先设定写入次数阈值,当写入次数达到阈值时将缓存数据写入TDMS文件。

本发明的有益效果:

1、本发明对不同采样率采样通道分配CAN总线数据帧的数据域和仲裁域ID,根据ID解析不同通道数据,数据根据通道号存储在二维数组中,根据不同通道采样点个数对二维数组添加帧头,用于显示数据以及存储数据时提取采样数值,并且设定存储间隔,有效降低系统开销,提高数据解析稳定性。

2、本发明将所有二维数组拼接为一个总二维数组后,再拼接帧头,这样避免了解析错误导致的各通道数据的互串,并且通过添加的帧头可以灵活的接收解析不同采样率的数据。

具体实施方式

下面举实施例对本发明进行详细描述。

如表1所示,为CAN总线数据帧定义格式,根据测试需要制定不同CAN总线数据的仲裁域ID,为区别不同类型数据帧,CAN总线网络内,每种数据帧对应唯一ID,不同类型数据帧ID不能重复。

表1

CAN总线数据帧的数据域进行填充,CAN总线数据域包含8个字节,本实施例选用每两个字节填充一个通道数据,一个数据帧可以填充四个通道数据,同一ID的数据帧内填充相同采样率数据,数据域未使用字节可以闲置。

本具体实施例包含35种ID数据帧,包含140个通道数据,采样率包含100Hz、50Hz和20Hz,CAN总线为3条。

CAN总线数据分块上传到上位机,块大小预先设定为2000,即每次处理2000帧CAN总线数据,上传数据块内包含本时间段内CAN线内所有不同采样速率数据帧,其中采样率高的数据帧数多,采样率低的数据帧数少,其采样率不影响后续数据处理。

数据解析过程具体为:

步骤一:根据不同ID解析本数据块数据,取出相应字节的数据作为对应通道数据,将本ID内所有通道数据组成一个二维数组,放入对应寄存器内,每个二维数组的行数代表本ID数据帧所包含的通道数,对应表1的数据帧解析得到一个4行二维数组,第一行为第一通道,依次为第二、三、四通道,二维数组的列数是本数据块所包含的本通道的采样点个数,比如处理的块数据,2000个数据帧中包含15个如表1的ID数据帧,则解析完本块2000个数据帧后,应得到15个本通道采样数据。依照本方法解析所有ID数据帧,并存入不同寄存器。

步骤二:待本块2000个数据帧数据处理完毕后,判断每个寄存器内二维数组的每行的列数,得到每个通道的采样点个数。

步骤三:读出所有寄存器内的单独的二维数组,将所有二维数组拼接为一个总二维数组,本二维数组行数即对应通道数,列数对应采样点数,不同采样率通道对应的数组的列数不同,本实施例得到的二维数组为140行,对应140个采集通道。但是在拼接为二维数组过程中,二维数组以采样率最大的数组的列数拓展二维数组,采样率低的不足的会自动用0补齐。如采样率为100Hz的通道的每行都为真实数据,但是50Hz和20Hz采样通道由于采样数少,会在采集数据后出现无效数据0。由于本问题的出现,在数据显示和存储的过程中,必须剔除自动补充的0值,否则会使通道数据显示和存储错误。

步骤四:将步骤二中得到的每通道的采样点个数,存为一维数组,对于本实施例一共有140个通道,所以得到一个长度为140的数组,数组的值对应每个通道的采样点个数,将本数组拼接到步骤三中得到采样点的二维数组的最前一列,作为二维数组帧头,得到的拼接后的二维数组的第一列即对应本通道采样点数。

步骤五:将步骤四中得到的二维数组传输给显示模块和存储模块缓存。

步骤六:显示模块按照第一列每行数据值截取本通道后续数值,剔除步骤三中补充的0值,进行显示。

进一步的,如果数据存储每次处理完数据后进行存储,由于磁盘读写速度较慢,频繁调用写入操作,磁盘写入会占用较大系统开销,所以在存储模块缓存写入预先设定次数时,再进行一次存储写入。本实施例设定为150次,即缓存150次处理后的收据,在调用一次数据写入操作。

步骤七:处理完本块数据后等待处理下一块采集数据,或等待停止接收数据命令。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1