TMS BOOK · ACADEMY 讲义

标定量规格定义:轴点、插值/外插保护、上下限与不可标量

大纲的完整展开版——讲师授课蓝本 / 学员自学材料

K6-10 标定量规格定义:轴点、插值/外插保护、上下限与不可标量

课程代码 K6-10 · 板块 K 控制、软件与标定 / K6 标定与匹配 时长 约 3.0~3.5 小时(5 讲 + 1 次实操) 适合对象 标定工程师与控制软件工程师联席(本模块必修)——即在参数层签同一份接口约定的两方;MBD 建模工程师与 Tier1 标定对接人选修第 1、4、5 讲(对应模型侧标定量/常量划分与交接时的可标性开放清单);诊断工程师选修第 3 讲边界外标志一段 前置 K6-01 热管理标定流程与工具(INCA/CANape) 热管理标定流程与工具(INCA/CANape);K4-02 基于模型开发(MBD):Simulink 建模与代码生成 基于模型开发(MBD):Simulink 建模与代码生成。体系外前置需自备:嵌入式软件里「只读数据段」与「运行时变量」的基本区别、查表运算的基本概念 本讲义定位 讲师授课蓝本 / 学员自学讲义


引言:类型只是分类,真正要交付的是一张规格表

一个标定量被建出来的那一刻,通常只被说清了一件事:它是什么类型——是一个单值、一条曲线,还是一张二维表。K6-01 热管理标定流程与工具(INCA/CANape) 已经把这一层讲到位:四个类型关键字(VALUE / CURVE / MAP / VAL_BLK)、轴点是独立的顶层对象 AXIS_PTS 而表内以 AXIS_DESCR 引用它、以及三种轴形态(STD_AXIS / FIX_AXIS / COM_AXIS)各自的连带范围。那一讲的结论是一句可执行的话:判「可标」不靠经验,去描述文件里找那一个 CHARACTERISTIC。

本课从那句话的下一步开始。找到了那个对象、也确认了它是一张 MAP 之后,真正决定这个量在车上怎么表现的,是另外一整组事情,而它们没有一件写在类型里:

  • 这两条轴各取几个点、点取在哪、依据是什么?
  • 输入落在两个轴点之间怎么算,落在轴之外怎么办?
  • 上下限是多少,这个限是给标定工程师看的建议,还是代码里真会去钳的数?
  • 从来没人写过这个量时,控制器执行的是哪一组值?
  • 这个量允许谁改、在什么条件下改,还是根本不许改?
  • 它放在标定页还是常量区,在线改完不做别的动作,下电还在不在?
  • 这个量增大时,被控量往哪个方向走?它和旁边那个量之间有没有必须成立的序关系?

这七问的答案合起来才是一个标定量的定义。把它们逐列写下来,就是一张标定量规格表——本课的产出物本体,也是标定工程师与软件工程师在参数层唯一的书面接口。

为什么这件事值得单独一门课。因为这七问里的每一问,留空之后都不会报错。类型写错,代码生成会失败;而边界外行为留空,代码照样能生成、车照样能跑——只不过超出轴范围时执行的是代码生成器或者手写实现的某个默认行为,而这个默认行为不出现在描述文件里,标定工程师在上位机上根本看不见。⇒ 规格层的缺失有一个共同的性质:它在开发链的每一道关口都表现为「正常」,只在某一个具体工况上表现为一个说不清来路的现象。

本课的一根钉子(全文下面反复回到它):一个标定量的规格,判据是「有没有未定义分支」,不是「写得详不详细」。规格表的每一格都对应控制器里一个真实存在的分支:输入落在轴内、落在轴外、校验失败、从未写过、有人试图在线改它。这些分支必然存在——你不写,实现者就替你写;实现者写的那一版不进描述文件,于是它对标定侧不可见、对评审不可见、对下一个平台的复用不可见。⇒ 规格表的作用不是「说明」,是把这些分支从隐式变成显式。

射程先划死。本课只管参数对象本身的规格怎么写这一层,下面各项一律只作引用,⛔ 一条不重讲:

不在本课 属主
类型枚举、三种轴形态的定义、标定工具与流程、DoE 与统计标定 K6-01 热管理标定流程与工具(INCA/CANape)
建模与代码生成、模型侧标定量/常量划分、定点标度与 Q 格式、量化误差、ROM/RAM 与执行时间预算 K4-02 基于模型开发(MBD):Simulink 建模与代码生成
标定数据的版本与分支、基线继承与车型差分、责任矩阵、标定量数量治理与命名、变更评审与追溯、对外 A2L 裁剪的版本对应 K6-05 标定数据管理与版本控制
车端自产数据一侧的一切:学习值与标定量的区分、掉电写一致性、上电有效性校验链、触发重学、存储布局版本迁移、出厂默认值的载体实现 K4-06 控制器非易失存储设计:学习值、诊断数据与累计量的持久化
产线下线写入工位项、售后重学清单、换件复位路径与工位权限 K6-09 产线下线与售后标定:工位项清单、配置写入与学习值管理
标定改动要不要走功能安全评审的流程判据、电池侧阈值整定 K6-03 电池热管理标定
把公差、传感器误差与老化衰减折进阈值的裕量算法 K6-06 面向量产散差与老化的鲁棒标定:把公差、传感器误差与衰减折进阈值
换热 map 外插为什么不可信的机理、通用关联式严禁外插的纪律 A3-01 换热器传热基础:ε-NTU 法与 LMTD 法 / A3-02 翅片管/扁管/微通道换热形式与传热强化
invalid 语义与信号置信度分级 / 故障码置位与消抖 / 边界外触发的降级动作与仲裁 K1-01 热管理传感器信号处理与故障诊断 / K5-01 OBD/UDS 诊断与故障码(DTC)设计 / K5-02 热管理故障处理与降级策略
增益调度变量的选取与整定 K3-05 PID/前馈/增益调度控制实战
标定量爆炸的降维收敛(先骨架表、再叠工况修正) C6-01 双区/四区自动空调控制逻辑
自学习输出的护栏、学习使能与写入频次判定 K7-03 数据驱动的能效自学习控制
对外 A2L 裁剪与权限分级的机制本体 / 交接谈判的组织与证据包 K4-09 热管理控制软件的跨企业交付边界:交付物形态、DIA/SEooC、权限分级与联合验证签署 / K4-07 热管理控制功能规格(软件需求)的编写、评审与向 Tier1 交接

⚠ 这张表是导航,不是免责声明:本课不判的每一件事,都写明了由谁判。

来源分级先说在前面。本课出现的全部描述文件对象名称与关键字(CHARACTERISTIC / AXIS_PTS / AXIS_DESCR / RECORD_LAYOUT / COMPU_METHOD,VALUE / CURVE / MAP / VAL_BLK,STD_AXIS / FIX_AXIS / COM_AXIS)沿用本课程体系的口径,其标准原文本课未独立核对 ⇒ 本课 ⛔ 不引条款号、⛔ 不写版次、⛔ 不给任何数值型限值,对象语义与版次须按现行 ASAM 目录核。全课出现的一切具体数值,除算术恒等式的演算结果外,一律是教学假设值或带口径的典型量级参考,两者都在出现处逐个标明。


第 1 讲 接口约定层:一张表的边框,由 RECORD_LAYOUT 与 COMPU_METHOD 定

这一讲立三件事:本课站在哪一层、规格表长什么样(九列)、以及规格表的两条边框——数据在内存里怎么排、内存里的整数与你在工具里看到的物理值怎么换算。这两条边框之所以先讲,是因为后四讲的每一格都得先落在它们上面:不知道值怎么排,就说不清「改一个格子动的是哪几个字节」;不知道换算口径,就说不清「上下限那两个数是物理值还是整数」。

1.1 起点与终点:本课接在哪一句话后面

K6-01 热管理标定流程与工具(INCA/CANape) 第 2 讲的一条易错点原话是这样收口的:列完四个类型不等于标定量定义完了;类型只是分类,每个量真正要交付的是一张规格。那一讲把线画在这里就停了。本课就从这条线的另一侧开始。

两门课的分界可以用一句话记住:

K6-01 热管理标定流程与工具(INCA/CANape) 回答「这个量在描述文件里长什么样」;本课回答「这个量该被写成什么样」。 前者是读,后者是写。

⇒ 落到动作上:拿到一个已经存在的标定量,看不懂它、想知道改它会不会连带别人 ⇒ 走 K6-01 热管理标定流程与工具(INCA/CANape);要新建一个标定量、或者要把一个已有的量交出去给别人标 ⇒ 走本课。

易错点。两个方向相反。① 把本课当成 K6-01 热管理标定流程与工具(INCA/CANape) 的补充说明——于是只在描述文件已经生成之后才来看规格。⚠ 规格表的绝大部分内容必须在软件设计阶段就定:一个量是不是做成 CHARACTERISTIC、放不放标定页、可标性属哪一档,这三件在描述文件生成之后就已经是既成事实,改它们要走需求变更,不是标定动作。② 反过来,以为规格表是软件工程师单方面的文档——那样写出来的规格里,「轴点取值与依据」「调整方向」两列必然是空的,因为这两列的信息只在标定侧。⇒ 这张表是两方联署的,两侧各有几列只有对方填得出。

1.2 规格表九列:本课的产出物本体

是什么。本课把一个标定量要交付的内容归成九列(本课归纳的组织方式,⛔ 不是任何标准里的分栏,对外引用时须标明来源):

# 列 这一列回答什么 谁填得出 本课落点
① 名称、标识与对象类型 它叫什么、是哪一类对象 软件侧 第 1 讲(引用 K6-01 热管理标定流程与工具(INCA/CANape))
② 轴:轴点取值、取点依据、轴形态与共享者清单 点取在哪、为什么、改它会连带谁 两侧联署 第 2 讲
③ 数据类型、换算口径、布局要点 内存里怎么排、整数怎么变成物理值 软件侧 第 1 讲
④ 存储区与在线标定时从哪一份读 放标定页还是常量区 软件侧 第 5 讲
⑤ 插值实现约定 + 边界外行为三项 轴内怎么算、轴外怎么办 两侧联署 第 3 讲
⑥ min / max / default 三元组 允许范围、以及「没人写过」时执行什么 两侧联署 第 4 讲
⑦ 可标性等级 谁能改、在什么条件下改 软件侧 + 安全侧 第 4 讲
⑧ 调整方向 这个量增大,被控量往哪走 标定侧 第 4 讲
⑨ 参数间相互约束 它和旁边那个量之间必须成立什么 两侧联署 第 4 讲

⚠ 九列里 ⑧⑨ 是补料——多数项目的规格表写到 ⑦ 就停了,而现场最贵的两类返工恰好落在这两列上(第 4 讲展开)。

判据(本课的钉子在这一节的形态)。一张规格表够不够,判据不是「字够不够多」,是拿它去问那七个问题,有没有一个答不出来。答不出来的那一格,就是控制器里一个由实现者代你决定的分支。

工程量级/典型值。一个热管理域控里有多少个标定量、其中多少个是 MAP,是平台相关量,须在本项目自己的描述文件上实统计。⛔ 本课沿用 K6-01 热管理标定流程与工具(INCA/CANape) 的判定不给这个数——它随功能范围与软件设计而定,最典型的下场就是被当成上一代的经验直接抄走。→ 拿到它的路:在本项目描述文件里按对象类型分类统计;数量治理与命名规则归 K6-05 标定数据管理与版本控制。

易错点。① 把九列当成一张要一次填满的表——它是阶段性填的:①③④⑦ 在软件设计阶段定稿,② 的轴形态在设计阶段定、轴点取值在标定阶段定,⑤⑥ 在设计阶段给出规则、在标定阶段给出数,⑧⑨ 在标定过程中逐步补齐并随值一起冻结。② 把「暂时不填」和「判为不适用」写成同一个样子——两者在表上都是空格,而含义相反:前者是欠账,后者是结论。⇒ 不适用的格子要写出理由(例:VALUE 类型没有轴,② 整列写「不适用——无轴对象」),⛔ 不许留空白。

一张横向展开的九列规格表骨架示意图。最左侧一列是标定量的名称栏,向右依次排开九个列头方框,各列头内写列名与它回答的那一问:第一列名称标识与对象类型,第二列轴的轴点取值取点依据轴形态与共享者清单,第三列数据类型换算口径与布局要点,第四列存储区与在线标定读哪一份,第五列插值实现约定加边界外行为三项,第六列 min max default 三元组,第七列可标性等级,第八列调整方向,第九列参数间相互约束。九个列头下方各有一个空白单元格,其中第八第九两列的单元格用不同的填充样式画出并在上方标注补料两字。表格上方有一条横贯的分层带,把九列按填写阶段分成三段并各带独立文字标签:软件设计阶段定稿段覆盖第一第三第四第七列,设计给规则标定给数段覆盖第五第六列,标定阶段补齐并随值冻结段覆盖第二第八第九列。表格下方另有一行判据带,写着判够不够看有没有一格答不出来,答不出的那一格就是控制器里由实现者代你决定的一个分支。表右侧另画一个小方框,写不适用要写出理由不许留空白,并举例 VALUE 类型无轴对象时第二列整列写不适用。图内所有单元格一律不填任何具体数值。本图为结构示意,不含任何数值,不得据图取值。
图1 标定量规格表的九列骨架(本课归纳)。该读出三件事:一,类型只占第 ① 列,另外八列才是这个量在车上怎么表现的全部依据;二,九列不是一次填满的,上方分层带给出三个填写阶段,⑧⑨ 两列是本课点名要补的两格;三,判「够不够」看有没有一格答不出来,⛔ 不看写得详不详细,而「不适用」必须写出理由、⛔ 不许留成空白。本图为结构示意,⛔ 不得据图取值。

1.3 RECORD_LAYOUT:布局描述与实际内存不符时,现场表现不是报错,是值整体错位

是什么。一张二维表在内存里是一段连续的字节。RECORD_LAYOUT 描述的就是这段字节怎么排:值按行优先还是列优先展开、轴点与值是连在一起存还是分开存、每个数占几个字节、有没有对齐填充。它是 K6-05 标定数据管理与版本控制 那句「描述文件给结构与地址、数据文件给值」里「结构」二字的具体载体。

为什么它属于规格层而不是「实现细节」。因为标定工具是照着这份描述去解释那段字节的。描述说「行优先、值 2 字节」,工具就按行优先每 2 字节切一刀;如果编译出来的实际布局是列优先,工具切出来的每一个数单独看都是合法的数,只是它们被放在了错的格子里。⇒ 这类问题的现场表现有一个共同特征:不报错。没有校验会失败,没有故障码会置位,只是这张表标出来的行为与预期不一致——而人第一反应几乎总是「这个 MAP 还没标好」,于是继续标,占着台架一轮一轮地追一个不存在的标定问题。

规格表里这一格要写什么。三项:数据宽度(每个值几个字节)、展开顺序(行优先/列优先)、轴与值的相对位置(连排还是分离)。这三项写清之后,还要加一条维护判据:

换一版编译工具链、改一次数据宽度、或者改一次代码生成配置之后,规格表里这三项有没有跟着变?

⇒ 这条判据的价值在于它把一件不报错的事挂到了一个会发生的事件上:编译工具链换版是有记录的,数据宽度改动是有记录的,而布局漂移没有记录。⚠ 把不可见的东西挂到可见的事件上,是本课反复用的一个手法——第 3 讲的边界外行为、第 5 讲的存储区都会再用一次。

工程量级/典型值。标定表的值宽度常见取 1 / 2 / 4 字节(8 / 16 / 32 位),车用二维 MAP 的表值最常见是 2 字节——这是一条行业典型说法,⚠ 典型值、⛔ 不是验收依据,本项目须以链接产物与代码生成配置为准。→ 拿到它的路:向软件侧要本项目的数据类型规约与代码生成配置;宽度怎么由分辨率需求反推(定点标度与量化误差)归 K4-02 基于模型开发(MBD):Simulink 建模与代码生成,本课只管「规格表里把它写出来」。

易错点。三个。① 把布局当成软件侧的私事而不写进联署规格——于是它没有版本、没有变更记录,也就没有人负责在工具链换版时复核它。② 只写「2 字节」而不写有符号无符号——同一段字节按有符号和无符号解释出来的值,在高半区差一个固定的常数,而在低半区完全一致 ⇒ 常温工况全对、极端工况整片错。③ 发现值不对时先怀疑标定值——正确的排查顺序是先证伪布局:拿同一个原始整数在工具里和在代码里各回算一次,两边对不上就不是标定问题(第 1.4 节给出这个动作的完整形态)。

上下两块对照的内存排布示意图。上块标为规格里写的布局,画一条横向的字节带,带上按行优先顺序依次标注一张三乘三表的九个格子编号,格子编号写成行一列一到行三列三,每个格子占相同宽度并在带下方标注每格两字节;字节带左端另有一小段标注为轴点区并与值区之间画一条分隔线。下块标为实际编译出来的布局,同样一条横向字节带,但格子编号按列优先顺序排列,其余画法与上块相同。两块之间画若干条斜向的对应连线,把上块的格子编号连到下块中同一编号所在的位置,连线互相交叉形成错位图样,交叉区域旁标注同一段字节两种解释每个数单独看都合法只是放在了错的格子里。图右侧画一个上位机表格窗口示意,窗口里九个格子都填着看起来正常的数,窗口下方一行标注不报错没有校验失败没有故障码置位。图最下方一条判据带,写着维护判据为换一版编译工具链或改一次数据宽度之后规格表里的三项布局字段有没有跟着变,三项分别列为数据宽度展开顺序轴与值的相对位置。图上所有格子一律用编号表示,不填任何具体数值。本图为结构示意,不含任何数值,不得据图取值。
图2 布局描述与实际内存不符时会发生什么。该读出的判断:错位不会报错——每一个被切出来的数单独看都合法,只是落在了错的格子里,于是人会以为「这张表还没标好」而继续标。⇒ 规格表里这一格必须写全三项(数据宽度 / 展开顺序 / 轴与值的相对位置),并挂上那条可发生的维护判据:工具链换版或数据宽度改动之后,这三项有没有跟着变。本图为结构示意,⛔ 不得据图取值。

1.4 COMPU_METHOD:raw 值与物理值之间的唯一契约

是什么。控制器内存里存的是整数,工具窗口里显示的是带工程单位的物理值,两者之间隔着一条换算规则——COMPU_METHOD。K6-01 热管理标定流程与工具(INCA/CANape) 已经讲过它是什么、以及它翻译错了会出现什么现象。本课接的是另一句话:这条规则一旦写进描述文件并发出去,它就是一份契约。

契约的含义很具体:换算口径绑住了三个各自独立的东西——上位机上显示给人看的物理量、标定报告里被引用与评审的那个数、以及代码里真正参与运算的整数。三者之中任何一方单方面改口径,另外两方都不会报错。

口径不一致的典型表现,本课要写死。双方各自都「没错」,而值差一个固定系数(或固定偏移):

  • 标定侧说「我把它标到了 30」,软件侧说「我这里读到的是 3000」——各自单位口径不同,两句话都是真的;
  • 台架数据回放时曲线形状完全正确、只是整体高了或低了一档;
  • 换一版工具或换一台上位机之后,同一个数据文件显示出来的物理值变了,而数据文件一个字节都没改。

唯一查得出来的动作:拿同一个原始整数,在工具里读一次物理值,在代码里按规格表写的口径手算一次,两边对。⇒ 这个动作之所以是唯一的,是因为它绕过了双方各自的解释——两边都在解释同一个整数,而整数只有一个。⚠ ⛔ 不要用「两边显示的物理值对不对得上」来查:那正是被口径污染的那一层。

规格表里这一格要写什么。四项:物理单位、换算形式(线性还是查表式、系数与偏移是多少)、物理量的有效范围、显示分辨率。⚠ 第四项常被忽略,而它决定了「上位机上能不能把这个量调到规格允许的每一个值」——显示分辨率比实际标度粗时,中间那些值人根本输不进去。

与 K4-02 基于模型开发(MBD):Simulink 建模与代码生成 的分工,本节写死。定点标度怎么选、Q 格式怎么定、量化误差有多大、这条换算式怎么由分辨率需求反推出来——整块归 K4-02 基于模型开发(MBD):Simulink 建模与代码生成,本课一个字不重讲。本课只接一句话:换算口径写进接口之后不能单方面改。⇒ 两门课的分界是「怎么算出来的」(K4-02 基于模型开发(MBD):Simulink 建模与代码生成)与「算出来之后归谁管」(本课)。

工程量级/典型值。换算系数、偏移、物理有效范围与显示分辨率的具体取值全部是平台相关量,随该量的物理意义、传感器量程与定点方案而定,⛔ 本课不给数(理由是射程——它们由 K4-02 基于模型开发(MBD):Simulink 建模与代码生成 的定点方案与本项目的量程决定,不是「取决于平台」这种含糊说法)。→ 拿到它的路:向软件侧要本项目的定点方案与描述文件生成配置,逐量核对换算式;口径本身的推导归 K4-02 基于模型开发(MBD):Simulink 建模与代码生成。

易错点。三个。① 把规格表里的 min/max 写成整数——规格表面向的是两方联署,一律写物理值并带单位;整数侧的限值由换算式派生,⛔ 不作为规格表的主口径(第 4 讲会再说一次)。② 换算式改了却只改了一侧——改换算式是接口变更,必须与描述文件、代码、已有的数据文件一起走一次变更(变更评审与追溯归 K6-05 标定数据管理与版本控制)。③ 用「显示看着对」当作验证通过——见上,那一层已经被口径污染。

中央画一个方框标注为同一个原始整数,方框只写 raw 两字不写任何数值。从这个方框向外引出三条箭头,分别指向三个并列的方框:第一个方框标注为上位机显示的物理值带工程单位,第二个方框标注为标定报告里被引用与评审的数,第三个方框标注为代码里参与运算的值。三条箭头上都标注换算口径四字,并各画一个小锁形符号表示同一份契约。三个方框下方各有一行小字标注各自的使用者,依次为标定工程师看的、评审与存档看的、控制器执行的。图下半部分画一条对照带,左侧标为口径不一致时的表现,列出三条并各带独立文字标签:双方各自都没错而值差一个固定系数、曲线形状完全正确只是整体高了或低了一档、换一版工具后同一份数据文件显示的物理值变了而文件一字节没改。右侧标为唯一查得出来的动作,画一个原始整数分出两条路径,一条经工具读出物理值,另一条经手算按规格表口径算出物理值,两条路径末端画一个对比符号,旁注两边在比同一个整数,绕过了双方各自的解释。右侧另有一个被划掉的小框,写用两边显示的物理值互比,旁注这一层已被口径污染。图内一律不写任何具体数值与系数。本图为结构示意,不含任何数值,不得据图取值。
图3 换算口径是一份绑住三方的契约。该读出两件事:一,同一个原始整数被三方各自解释成物理值,任何一方单方面改口径,另外两方都不会报错;二,查这类问题唯一有效的动作是拿同一个原始整数两边回算——用「两边显示的物理值互比」查不出来,因为那一层正是被口径污染的那一层。本图为结构示意,⛔ 不得据图取值。

1.5 本讲小结

本讲把本课的位置钉死在 K6-01 热管理标定流程与工具(INCA/CANape) 的下一格:类型只是分类,产出物是一张九列规格表(图1)。规格表的两条边框先立起来——布局描述(图2)与换算口径(图3);两者的共同性质是出问题时不报错,所以两者在规格表里各挂了一条可发生的判据:布局挂在「工具链换版或数据宽度改动」这个事件上,换算口径挂在「拿同一个原始整数两边回算」这个动作上。⇒ 后四讲逐列展开 ②⑤⑥⑦⑧⑨。

带走一句自检问句:这一格留空之后,控制器里那个分支由谁决定?

后面还有 4 讲正文 · 关键公式 · 案例拆解 · 常见误区 · 动手做

会员专属

后续为会员深水区内容——四库数据与深度拆解。

查看会员方案