虽然为了兼容,支持NCL记录文件格式,但建议新应用程序使用TDMS记录文件格式。详细信息见TDMS嵌入式网络数据。
根据NI-XNET记录文件规范创建的记录文件无法用于为NI-CAN记录文件规范设计的应用程序。
NI-CAN日志文件可用于符合NI-XNET日志文件规范的应用程序。
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硬件和软件手册中找到:
强烈建议记录文件的第一帧包含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日志文件事件信息