NI-CAN记录文件规范

概述

NI-CAN记录文件规范定义了用于存储CAN数据的简单、开放的二进制文件格式。记录文件主要用于NI-CAN和CompactRIO范例中记录、重放和显示CAN数据。NI-CAN记录文件也用于NI CAN工具(如总线监视器)。

内容

注:

虽然为了兼容,支持NCL记录文件格式,但建议新应用程序使用TDMS记录文件格式。详细信息见TDMS嵌入式网络数据。

根据NI-XNET记录文件规范创建的记录文件无法用于为NI-CAN记录文件规范设计的应用程序。

NI-CAN日志文件可用于符合NI-XNET日志文件规范的应用程序。

NI-CAN记录文件特性

NI-CAN记录文件规范旨在满足下列特性:

  • 简单:记录文件中每个事件(帧)的格式类似于NI-CAN使用的帧格式,以及用于CAN的LabVIEW FPGA I/O接口(CompactRIO CAN模块)。这使得应用程序开发更简单、更高效。
  • 开放:本文档中完整定义了NI-CAN记录文件的编码,并在范例中提供了源代码。可将范例代码原封不动地加入应用程序,以确保应用程序在NI工具中正常运行。或者,可增强范例代码以创建自己的记录文件格式(使用自己的文件扩展名)。
  •   二进制:为了支持高效记录全部总线负载,格式为二进制,而不是用户可读的文本。
  • 可扩展:每个NI-CAN记录文件以包含版本信息的头开始。该规范的后续版本将生成具有更新版本的文件。虽然应用程序可以专注于支持单个版本,但未来的NI-CAN工具将解释所有版本。
  • 帧(非波形):由于CAN帧在网络上以事件驱动方式发生(非周期性调度),因此CAN帧提供了最有效的文件存储方式。NI-CAN还支持通过特定CAN消息标识符获取的每个通道(信号)的CAN波形。虽然将CAN数据存储为波形效率较低,但为此目的可使用NI测试数据交换格式(.tdm)等二进制格式(更多信息见LabVIEW或DIAdem帮助)。或者,可使用NI-CAN记录文件获取CAN数据,然后使用NI-CAN的帧间转换功能将CAN帧转换为用于显示的波形。
  • 大端:多字节整数的排序为big-endian(最高有效字节优先)。

文件扩展名

所有NI-CAN记录文件使用的文件扩展名为:

.ncl

所有NI-CAN产品均假定具有该扩展名的文件完全符合此规范。

NI提供访问NI-CAN日志文件的源代码。如未作任何改动将源代码合并至应用程序,可对该应用程序使用的文件继续使用.ncl扩展名。

如修改NI-CAN记录文件的代码,即使代码看起来兼容,也必须将文件扩展名从.ncl改为其他扩展名。新的文件扩展名将文件标识为符合您自己的规范,因此可确保该文件不会由NI CAN软件产品错误解释。

行文规范

规范为每个字段使用下列类型:

            U8位8位无符号整数

            U16 16位无符号整数,big-endian,对齐文件中的16位偏移量

            U32 32位无符号整数,big-endian,文件中32位偏移对齐

            U64 64位无符号整数,big-endian,文件中64位偏移对齐

信息

头是记录文件的第一个字段序列。每个记录文件只有一个头信息。

 

 现场

类型

说明

 签名

 U16

所有NI-CAN记录文件的固定值,用于验证文件的二进制编码是否符合规范。值为十六进制4E49(ASCII中的“NI”)

 页眉大小

 U16

头的大小,以u32的倍数(4字节递增)为单位,包括签名和头大小。NI-CAN记录文件支持解析u32数组。

 页眉主版本

 U8

头信息的主版本(即1.5中的1)。这表明改动破坏了与前期版本的兼容性。

头信息更新版本 

 U8

头信息的升级版本(即5 in 1.5)。这表明改动保留了与升级版本0的兼容性。

 事件主版本

 U8

文件中所有事件的主版本。  这表明改动破坏了与前期版本的兼容性。

 事件升级版本

 U8

升级文件中所有事件的版本。  这表明改动保留了与升级版本0的兼容性。

表1:  NI-CAN记录文件头信息

对于该规范,头信息必须始终包含以下十六进制的字节序列:

4E 49 00 02 01 00 01 00

事件信息

头信息之后,NI-CAN记录文件将包含零个或多个事件。 每个事件通常表示单个CAN帧,但它也可以编码其他信息,如错误或触发。

对于此版本的规范,记录文件中每个事件的大小相同。固定大小为24字节(如下表所示)。由于文件头的大小和每个事件的大小是固定的,通常可通过文件大小确定事件的数量。

在随后的文本中,读取网络接口函数指网络接口的NI-CAN帧API读取函数的引用。根据所用的应用程序开发环境,可在NI-CAN硬件和软件手册中找到:

  • 第10章,LabVIEW帧API,ncReadNetMult
  • 第11章,用于C、ncRead、CAN网络接口对象的帧API

强烈建议记录文件的第一帧包含NI-CAN开始触发帧(类型4)。开始触发包含CAN测量开始的绝对时间标识(日期/时间),以及后续CAN帧(绝对或相对)的时间标识格式。如记录文件中缺少开始触发,则假定CAN测量的开始时间与第一个CAN帧的时间标识相同。关于开始触发帧的详细信息,见读取网络接口函数

 

 现场

类型

说明

 时间标识

 U64

64位时间标识,以100纳秒递增。时间标识格式可以是绝对(日期/时间)或相对(从零开始)。

对于LabVIEW中的NI-CAN开发,NI-CAN帧内的时间标识为浮点(DBL)秒。如需访问日志文件,必须将该浮动时间标识转换为两个U32字段(见范例)。LabVIEW的二进制文件I/O函数使用big-endian,因此只需访问最高有效U32,然后访问最低有效U32。

对于C/C++或其他语言的NI-CAN开发,NI-CAN帧中的时间标识为两个U32字段。由于NI-CAN中的每个U32存储为little-endian(先存储最低有效字节),访问记录文件前必须交换字节顺序。

对于LabVIEW FPGA开发,时间标识为两个U32字段。LabVIEW的二进制文件I/O函数使用big-endian,因此只需访问最高有效U32,然后访问最低有效U32。

标识符

U32

CAN帧的标识符。

位29 (十六进制 0x20000000 )表示CAN标识符的格式:设置为扩展,清除为标准。

字节交换的规范与时间标识的每个U32部分描述的方法一致。

类型

U8

事件类型(帧)。

该字段的值为0时表示CAN数据帧,值为1时表示CAN远程帧。NI-CAN支持其他值。

对于LabVIEW中的NI-CAN开发,对应于CAN帧中的IsRemote字段。关于CAN帧以外的类型,见读取网络接口函数

对于C/C++(或其他语言)的NI-CAN开发,对应于CAN帧中的FrameType字段。关于CAN帧以外的类型,见读取网络接口函数

对于LabVIEW FPGA开发,对应于CAN帧的类型字段。LabVIEW FPGA仅支持CAN数据帧和CAN远程帧。

信息A

U8

限定类型的信息。

NI-CAN不存在该信息。

LabVIEW FPGA中存在该信息,但当前未使用(保留用于后续)。

读取记录文件时应忽略该字段。写入记录文件时,必须将该字段设置为0。

信息B

U8

限定类型的信息。

该字段的含义应与信息A相同(忽略)。

数据长度

U8

对于CAN数据帧,数据长度表示数据中的有效字节数。对于CAN远程帧,数据长度表示请求的字节数,而不是数据中的有效字节数。对于所有其他帧类型值,数据长度表示数据中的有效字节数。

数据

U8

该字段在记录文件中始终包含8个字节,但有效字节数通常由数据长度决定。

表2:  NI-CAN日志文件事件信息
 

Was this information helpful?

Yes

No