MDF 文件二进制格式解析手册
(版本 V3.0/3.3.1 混编)
(中文翻译校核版)
安徽省水科院翻译整编
2020 年 11 月 22 日
手册文件修订历史说明
修订历史
文件
版本
日期
编辑
1.0
2006-09-25
Osr
说明
转换旧文档并升级到 MDF 3.1 版:缺少块(CE、CD)和缺
少转换公式的说明。
1.1
2006-10-31
Osr 不同元素的起始偏移、更改和添加的示例。
1.2
2006-11-02
Osr 添加 MDF 修订历史,更改布局
1.3
2006-11-09
Osr 增加 TR 块
1.4
2008-04-09
Osr
1.5
2008-09-23
Osr
MDF 3.2 的扩展:
- HDBLOCK 的精确时间戳
- 已将链接从有符号整数更改为无符号整数
修正了 HBLOCK 中的错误
添加了以 ns/UTC 偏移量表示的开始时间示例
1.6
2009-01-07
Osr MDF 3.3 的扩展-添加了 SRBLOCK
1.7
2009-04-21
Osr
为 IDBLOCK 添加了代码页
SRBLOCK 的改进描述
删除了对 10 字节双(扩展精度)通道数据类型的支持,因
为 IEEE 754 未指定。添加了与 HDBLOCK 相关的时间戳备
注
1.8
2013-05-07
Osr 固定数量的 CDBUG 尺寸
1.9
2013-06-25
Osr
添加了 CGBLOCK 的最后一个成员仅对 mdf3.30 或更高版
本有效的提示。
1.10
2014-03-11
Osr 增加了未定形 MDF(IDBLOCK)的说明
1.11
2020-11-22
1.12
2020-11-24
Shiqi
(CN)
Shiqi
(CN)
对英文手册进行翻译校核
整合 V3.0 和 V3.3.1 版手册
目 录
1 简介 ............................................................... 1
1.1 概述 ............................................................1
1.2 缩略语 ..........................................................1
1.3 内容提要 ......................................................... 1
2 MDF 版本 ............................................................ 1
2.1 版本历史 ........................................................1
2.2 版本处理 ........................................................1
2.3 确保版本间 MDF 兼容性的规则 ......................................2
3 MDF 通用块格式 ...................................................... 3
3.1 所用数据类型的定义 ...............................................3
3.2 使用的块类型概述 .................................................5
3.3 文件标识块 IDBLOCK ...............................................5
3.3.1 IDBLOCK 的块结构 .......................................................................................................... 5
3.3.2 未定稿 MDF .................................................................................................................... 7
3.3.3 IDBLOCK 示例 .................................................................................................................. 7
3.4.1 HDBLOCK 的块结构 ........................................................................................................ 8
3.4.2 HDBLOCK 示例 ................................................................................................................ 9
3.5 文本块 TXBLOCK ..................................................10
3.5.1 TXBLOCK 块体结构 ....................................................................................................... 10
3.5.2. TXBLOCK 示例 .............................................................................................................. 10
3.6 程序块 PRBLOCK ..................................................11
3.6.1 PRBLOCK 的块结构 ....................................................................................................... 11
3.6.2. PRBLOCK 示例 .............................................................................................................. 11
3.7 触发块 TRBLOCK ..................................................11
3.7.1 TRBLOCK 的块结构 ....................................................................................................... 11
3.7.2 DGBLOCK 示例 .............................................................................................................. 12
3.8 采样缩减块 SRBLOCK ..............................................12
3.8.1 SRBLOCK 的块结构 ....................................................................................................... 13
3.8.2 采样缩减的动机 ........................................................................................................... 13
3.8.3 采样缩减布置 ............................................................................................................... 13
3.9 数据组块 DGBLOCK ................................................14
3.9.1 DGBLOCK 块体结构 ...................................................................................................... 14
3.10 通道组块 CGBLOCK ...............................................15
3.10.1 CGBLOCK 的块结构 .................................................................................................... 15
3.10.2 CGBLOCK 示例 ............................................................................................................ 15
I
3.11 通道块 CNBLOCK .................................................15
3.11.1 CNBLOCK 区块结构 .................................................................................................... 16
3.11.2 CNBLOCK 示例 ............................................................................................................ 17
3.12 通道转换块 CCBLOCK .............................................22
3.12.1 CCBLOCK 块体结构 ..................................................................................................... 22
3.12.2 CCBLOCK——2 参数线性函数 .................................................................................... 23
3.12.3 CCBLOCK——6 参数的多项式函数 ............................................................................ 23
3.12.4 CCBLOCK——带插值表格 ........................................................................................... 24
3.12.5 CCBLOCK——表格 ....................................................................................................... 24
3.12.6 CCBLOCK——指数 ....................................................................................................... 24
3.12.7 CCBLOCK——对数 ....................................................................................................... 25
3.12.8 CCBLOCK——有理转换公式 ....................................................................................... 26
3.12.9 CCBLOCK——ASAM-MCD2 文本公式 ........................................................................ 26
3.12.10 CCBLOCK——ASAM-MCD2 文本表格 ...................................................................... 26
3.12.11 CCBLOCK——ASAM-MCD2 文本范围表 .................................................................. 27
3.12.12 CCBLOCK——数据结构日期 ..................................................................................... 27
3.12.13 CCBLOCK——数据结构时间 ..................................................................................... 28
3.12.14 CCBLOCK 示例 ........................................................................................................... 28
3.13 通道相关块 CDBLOCK .............................................30
3.13.1 CDBLOCK 的块体结构 ................................................................................................ 30
3.14 通道扩展块 CEBLOCK .............................................31
3.14.1 CEBLOCK 块体结构 ..................................................................................................... 32
3.14.2 DIM 块补充 ................................................................................................................. 32
3.14.3 Vector CAN 块补充 ..................................................................................................... 32
4 MDF 数据格式 ...................................................... 33
4.1 已排序 MDF 文件的数据格式 ......................................33
4.2 数据块示例 1 ....................................................34
4.3 数据块示例 2 ....................................................36
4.4 未排序 MDF 文件的数据格式 ......................................37
4.5 从数据记录中读取信号值 ........................................37
4.5.1 例 1——Little Endian(Intel)字节顺序 ..................................................................... 38
4.5.2 例 2——Big-Endian(摩托罗拉)字节顺序 ............................................................... 39
5 附录 .............................................................. 41
II
1 简介
MDF(测量数据格式)是一种二进制文件格式,可用于测量数据的记录、交
换和测量后分析。MDF 文在汽车工业中有着广泛的应用。MDF 格式提供:
汽车工业中多种工具之间的交换;
数据的简洁描述;
独立于文件长度快速访问一般文件信息 。
本文档用于指定 MDF 版本 3.3。
1.1 概述
第 2 章介绍了 MDF 格式的历史,并描述了扩展和更新格式的约定。第 3 章详
细说明了 MDF 文件的结构和各种块类型。第 4 章描述了数据块的结构,并说明了
如何读取信号值。
1.2 缩略语
ASAM——自动化和测量系统标准化协会
CCBLOCK——通道转换块
CGBLOCK——通道组块
CNBLOCK——通道块
DGBLOCK——数据组块
HDBLOCK——文件头块
IDBLOCK——标识块
LSB——最低有效位
MDF——测量数据格式
MSB——最高有效位
NIL—— NIL 指针(0x00000000)
PRBLOCK——程序块
SRBLOCK——采样缩减块
TRBLOCK——触发块
TXBLOCK——文本块
UTC——世界协调时
1.3 内容提要
第 2 章描述了扩展和更新格式的约定。第 3 章描述了 MDF 文件的结构和各种
块类型。第 4 章描述了如何编写数据,即排序或未排序。第 5 章(附录)展示了一
个实际的 MDF 文件的十六进制转储。
本手册糅合了 3.3.1 版和 3.0 版的内容。文中所附十六进制 MDF 文件片段内
容取自 3.0 版手册,MDF 文件数据为 V2.0 格式。其余描述均 3.3.1 版内容。
1
2 MDF 版本
自 1991 年创建以来,MDF 格式已经扩展了好几次。本章简要介绍了 MDF 格
式的主要更改,以及如何处理将来的更新。
2.1 版本历史
MDF 于 1991 年由 Vector Informatik GmbH 与 Robert Bosch GmbH 合作开
发。自那时起,该格式仅扩展到更小的细节,例如支持字符串的新数据类型、
ASAM 兼容信号名称的字段或新的转换规则。同时,MDF 格式已成为汽车领域测
量数据的标准。
主要修订:
年
版本
说明
1991
2.03 MDF 的首次正式发布
1996
2.11 新转换类型(CCBLOCK):ASAM-MCD2 文本
2000
2.12
新转换类型(CCBLOCK):ASAM-MCD2 文本表格;新字段
(CNBLOCK):“长信号名”
2000
2.13 新扩展类型(CEBLOCK):Vector CAN block
2001
2.15
2002
3.00
新数据类型(CNBLOCK):“String”和“Byte Array”;
新的转换类型(CCBLOCK):“日期”和“时间”
新转换类型(CCBLOCK):ASAM-MCD2 文本范围表;
新字段(CNBLOCK):“显示名称”和“附加字节偏移量”
2005
3.01
CDBLOCK 中的 N 维依赖
2006
3.10
2008
3.20
2009
3.30
新的信号数据类型(CNBLOCK),用于定义整数和浮点信号值的特定字节
顺序(可以不同于默认字节顺序);
允许位偏移量大于 0 的整数信号跨越字节边界
准确的开始时间和时间质量信息(HDBLOCK);
链接已从有符号整数更改为无符号整数(因此,MDF 文件的最大文件大小从
(大约)2 GB 扩展到 4 GB)
通道组(SRBLOCK)规范的字符串代码页规范(IDBLOCK)通道数据类型
10 字节双精度(扩展精度)过时
2014
3.31
IDBLOCK 中“未定稿”MDF 的标识和标志(独立于版本的特性)
2.2 版本处理
MDF 版本号由三位数字组成,主要版本号、次要版本号和修订号。通常仅仅
表示主要版本号和次要版本号例如 V3.2,其中主要版本号是 3,次要版本号是 2。
在 IDBLOCK 中,附加了一个修订号。例如,对于当前版本,版本字符串为
“3.20”,它必须解释为 V3.2,修订版“0”(而不是次要版本号“20”!)。三位数的限
制意味着次要版本号和修订号都不能超过 9。
MDF 文件格式的每一次更改都必须导致更高的版本号,即由主版本号、次版
本号和修订号组成的三位数字号必须大于上一个版本号(例如,对于版本 3.10 和
3.01,310>301)。
以下是一些关于何时增加哪个数字的一般准则:
1
元素
主要版本号
次要版本号
说明
MDF 文件格式的更改可能导致某些旧工具评估时对数据的误解,因此需要更
改主版本号。如果某个 MDF 文件的主版本号高于该工具所支持的版本号,则
该工具应拒绝读取该文件并生成警告或错误消息。
如果 MDF 文件格式的更改在某些旧工具评估时可能不会导致对数据的误解,
则只需更改次要版本号。但是旧的工具可能会丢失新 MDF 版本中存储的新特
性/信息。通常它会忽略它们并生成警告消息。
修订号
MDF 文件格式的更改不影响旧工具的解释,只需更改修订号即可。
2.3 确保版本间 MDF 兼容性的规则
为了确保高度的兼容性,新的条目只附加到块中。这意味着评估工具的以下后
果:
1)如果工具检测到块的长度小于工具支持的版本预期的块长度,则其他字段
将设置为其默认值。如果工具支持的 MDF 版本比文件编码的版本更高,则会出现
这种情况。
2) 如果工具检测到块长度大于工具支持的版本预期的块长度,则忽略其他字
段。如果工具支持先前的 MDF 版本,而不是文件编码时的 MDF 版本,则会出现
这种情况。在这种情况下,工具可能会错误地解释文件中的测量数据;因此,在引
入此类更改时,必须增加 MDF 主版本号。
2
3 MDF 通用块格式
MDF 文件由一系列块组成。每个块由若干连续字节组成,可以看作是数据字段的一个
记录或结构。有不同类型的块,块可以包括指向存储在 LINK 类型的数据字段中的其他块的
指针。链接是文件中从文件开头开始的绝对字节位置。这样就形成了一个通常树状的块层
次结构。
文件始终以文件标识符块 IDBLOCK 开头。文件头块 HDBLOCK 位于字节位置 64。
所有其他块都是通过链接位置进行定位和连接,可以任意顺序存储在文件中。
除了 IDBLOCK 和数据块,“Block Size”字段指示每个块的大小。为确保向上兼容,本
文件中规定的块尺寸应视为每种情况下的最小块尺寸。
下图概述了 MDF 文件的一般块结构:
3.1 所用数据类型的定义
数据类型
CHAR
1 字节表示字符(C 数据类型:char)。字符串的存储可以以零字节结束,
也可以不终止。
格式
UINT8
8 位无符号整数
UINT16
16 位无符号整数
INT16
16 位带符号整数
UINT32
32 位无符号整数
UINT64
64 位无符号整数
BOOL
布尔变量,存储为 16 位值
如果内容!=0 则为真,如果内容==0,则为假
REAL
浮点符合 IEEE 754,双精度(64 位)
32 位无符号整数,用作文件中的字节位置。如果链接为空 NIL
(对应于 0),这意味着对应的块不存在,并且链接不能取消引用。请记
住,除 IDBLOCK 和 HDBLOCK 之外的所有块都是可选的。
LINK
3