TMS BOOK · ACADEMY 讲义

模式表/场景表与仲裁规则的静态体检:可达性、死锁与切换质量

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

K3-13 模式表/场景表与仲裁规则的静态体检:可达性、死锁与切换质量

课程代码 K3-13 | 板块 K 控制、软件与标定 / K3 控制策略与算法 时长 约 3.5~4.0 学时 | 难度 L3 专家 适合对象 控制策略工程师与热管理域控策略负责人(本课的直接执行者);模式表 / 仲裁规则表 / 切换序列表的评审人;整车热管理标定负责人(本课交付的验收页是标定放行的输入);负责签署「策略层可以进环境舱、可以进整车」这道闸的人。控制方向必修,标定与耐久方向选修。 前置 K3-01 整车热管理控制策略总览与模式管理 整车热管理控制策略总览与模式管理;K4-05 模式状态机的完备性核对与可验证性设计 模式状态机的完备性核对与可验证性设计;B3-04 热泵型整车热管理架构(多通阀一体化方案) 热泵型整车热管理架构(多通阀一体化方案);G8-06 冷却液侧集成模块(CIM):阀岛/泵/膨胀壶一体化架构 冷却液侧集成模块(CIM):阀岛/泵/膨胀壶一体化架构。体系外前置(需自备):有向图与环检测的基本概念(可达集、有向环、上三角矩阵),以及二维矩阵型规格表的评审经验。 本讲义定位 本课只做一件事:把状态机完备性核对那套方法,用到策略层那一叠具体的表上——模式表、迁移矩阵、需求合成表、执行器优先级表、切换序列表、权限矩阵、场景表。它不是算法课(可达性遍历、等待图查环、模型检验工具边界的方法本体归 K4-05 模式状态机的完备性核对与可验证性设计),不是仲裁机制课(优先级式、按权分摊、迟滞带与最小驻留的取法归 K3-01 整车热管理控制策略总览与模式管理),也不给任何合格阈值——本课交付的是判据的形状、取数的口径与一页可签署的验收页。

引言:一叠已经评审通过的表,为什么还要再体检一遍

策略层的交付物长得很朴素:几张 Excel 表。模式表一张、迁移矩阵一张、需求合成表一张、执行器优先级表一张、请求源权限矩阵一张、切换序列表一张、场景清单一张。每一张都被逐行评审过,每一张都有属主签字。然后它们被交给软件、交给标定、交给试验。

问题是,这些表是一张一张评审的,而缺陷长在它们之间。

一张模式表自己看没有毛病:八行模式,每行的进入条件、退出条件、执行器目标都填满了。一张优先级表自己看也没有毛病:每个请求源都有一个优先级数字。可是把两张表叠在一起看,会发现第五行那个模式,在任何工况组合下都拿不到执行器——它的请求源优先级恒低于另一路,而另一路的置位条件是那一路的超集。于是这一行是一个死格:写在表上、写进代码、写进测试用例、写进标定清单,占了所有人的工时,而车上永远走不到它。

这类缺陷有三个共同特征,正是本课存在的理由:

第一,它们在单张表的评审里查不出来。评审是逐行看的,而这类缺陷的证据分布在两张甚至三张表上。人眼把两张表在脑子里做一次连接运算,做八行还行,做四十行必漏——K3-01 整车热管理控制策略总览与模式管理 已就三表核对立过同一条:人眼逐格看必漏,而且两次走查漏的格子还不一样。

第二,它们在功能测试里也查不出来。功能测试验的是「走到这个模式时行为对不对」,而一个走不到的模式不会产生任何失败用例。它安静地通过一切,直到某一天有人改了一个门限,它突然可达了,带着一段从未被验证过的行为上路。

第三,它们的排查代价随发现时刻指数上升。在表阶段发现,改一格;在状态机建好之后发现,要连带改模型、改用例、改标定三处;带进环境舱才发现,花的是舱时——K6-07 热泵与多模式切换标定 已经写死了这条拦截要求:不可达模式、死锁与无出口迁移应在这一层拦掉,⛔ 别带进环境舱花舱时才发现。

本课的入口动作是一道翻译,不是一次分析。这一点必须先说清,因为它决定了本课与 K4-05 模式状态机的完备性核对与可验证性设计 的分工。K4-05 模式状态机的完备性核对与可验证性设计 的输入已经是一台成型的状态机——节点、边、guard 都是显式的,遍历算法可以直接跑。策略层不是这样:策略层的输入是一叠二维表,行是模式、列是请求或工况,格子里写的是条件表达式和执行器目标。要跑任何图算法,先得把这叠表逐格翻成「状态—事件—迁移」三元组。而翻译本身就会产出第一批缺陷:那些翻不出来的格——表里写了条件却找不到对应的状态、写了目标却说不清由哪个事件触发——是拿不到算法输入的,它们在翻译台上就掉出来了。

会做错的第一个动作:等状态机建好了再做可达性分析。这个念头很自然——图算法要图,图在状态机里。但策略层在表阶段就该做一遍:表里已经有「行=模式、列=请求/工况」的全部信息,等进了模型再查,一次改动的代价是表阶段的三倍以上(模型、用例、标定三处联动)。⇒ 表阶段那一遍不是「提前做一次」,是成本最低的那一次。

会做错的第二个动作:把不可达模式一律删掉。「查出来不可达 → 删格」听起来干净利落,实际上三类成因的处置完全不同,删错了会把一条真需求删掉:门限写反了要改门限;优先级恒被压过要改优先级或者承认它是死格;工况谱里根本没有落进这个模式的区间,那是需求侧的问题,要退回需求与架构,不是在仲裁里继续加分支——O3-07 FCEV 系统级热管理模式管理与功率—热仲裁 已就此写死一条:有解不上的区间是需求不合理或自由度不足。

会做错的第三个动作:把「温度全合格」当成切换质量合格。这是本领域最常见的假通过。一台车在环境舱里所有温度点都在窗口内、无任何故障码,而它的主动进气格栅在山区路段上反复对开对关,跑到三万公里已经吃掉寿命配额的一大半。温度是被控量,切换质量是另外四个独立的验收量——切换频次、执行器动作次数、驻留时长分布、切换瞬间的输出跳变幅度。四个量里任何一个超限,那台车都不该签字放行。

本课的射程与它答不了的问题。本课的体检对象被钉死为热管理策略层的规则表与场景表。它答不了四类问题:① 方法本体——可达性遍历怎么写、等待图查环用什么算法、模型检验工具能证什么不能证什么、「未证明 ≠ 通过」这条边界,全部归 K4-05 模式状态机的完备性核对与可验证性设计,本课只讲这套方法作用在具体规则表上时输入怎么准备、结论怎么判读、报告怎么签,两门必须互链,不许各写一遍;② 仲裁机制本体——优先级式与按权分摊、紧急度折算、迟滞带的三项下界、最小驻留的两条下界与计时起点、饥饿防护三件套、可用功率四段握手,全部归 K3-01 整车热管理控制策略总览与模式管理,本课一个阈值也不定;③ 模式层与执行器层的穷举——模式表五列填法与四条校核规则、过渡阀位逐格校核归 B3-04 热泵型整车热管理架构(多通阀一体化方案) 与 B3-01 冷却液回路拓扑:串/并联、多回路耦合与模式切换,阀位组合真值表与状态数上限归 G8-06 冷却液侧集成模块(CIM):阀岛/泵/膨胀壶一体化架构,本课的对偶表只做场景层;④ 逐场景的判定判据——暴晒归 C6-05 暴晒后快速降温专项设计,拖挂爬坡与长下坡回收归 K7-01 预测性热管理(导航/云端/驾驶意图协同),快充预约归 D4-03 充电过程温控策略与充电功率协同 与 D3-04 低温预热与出行预约热管理,露营归 C6-04 智能座舱:人员感知与按需送风(露营/休息模式),热浸续跑归 K3-11 热管理域的上下电时序、run-on 编排与休眠期能耗预算 与 K3-08 冷却侧执行器需求生成与协同仲裁:电子水泵/冷却风扇/AGS。本课只回答「这两个场景能不能同时成立」,⛔ 不回答「这个场景现在成不成立」。

⚠ 本课不引任何「静态体检」或「场景标志位」专用标准号。可达性核对、死锁排查、场景表与标志位接口的要求散落在各主机厂软件开发规范、整车电子电气架构接口规范与项目适用矩阵中,具体条款与适用性按现行版本确认,讲义不得自造编号。本课借用而不重讲的两条体系口径(静态分析属软件单元验证的可选方法之一、结构覆盖类型按功能安全等级分档选取而非越高越好)只写去向:本体与分档表见 K4-02 基于模型开发(MBD):Simulink 建模与代码生成 与 K4-03 MIL/SIL/HIL 验证流程,功能安全方法本体见 K2-03 功能安全(ISO 26262)在热管理中的应用,版次以现行目录为准、引用前须核。

五讲的走法。第 1 讲立体检对象与翻译规则,做出可达模式集,并说清它为什么是下游三处覆盖率的分母;第 2 讲把请求-资源图建起来,讲策略层死锁的四类成因与它们在表上的表面形式;第 3 讲做场景层的互斥/并存对偶表与「场景→模式请求」映射,并守住「映射表不许自带第二套仲裁」这条线;第 4 讲把场景标志位的接口约定写足——九个必填字段、编号规则、版本演进三种改动的处置;第 5 讲把切换质量四个验收量的取数窗口、分布判读与验收页落到一页纸上。其后是典型案例、一次完整的动手做、关键公式详解、常见误区速查与按任务导航。

第 1 讲 策略层规则表的迁移可达性核对:从表到可达集

本讲要交出三样东西:一份翻译台账(表格 → 三元组,含翻不出来的格)、一份带版本号的可达模式集清单、一份不可达/陷阱项清单(每项标注成因类别与处置)。这三样合起来就是静态体检报告的前半页,它是两道下游闸的输入。

1.1 体检对象先点名:六张表,属主一律引用不重讲

体检不能从「所有相关文档」开始,那是没有边界的活。本课把体检对象钉死为六张策略层交付表:

# 表名 属主 本课要从它取什么
① 模式表(含互斥/并存表与非法组合排除表)与迁移矩阵 K3-01 整车热管理控制策略总览与模式管理 模式全集、每行的进入/退出条件、迁移矩阵每一格
② 需求合成表、执行器稳态出力优先级表 K3-08 冷却侧执行器需求生成与协同仲裁:电子水泵/冷却风扇/AGS 每一行「谁赢、要不要回执」——这是请求-资源图的边
③ 切换序列表 K3-09 冷却液回路模式切换的执行时序:泵—阀联动、断流窗口与切换序列表 每条迁移在执行层展开成几步、有没有中间态
④ 请求源权限矩阵 K3-16 座舱 HVAC 请求源仲裁与人机接管:安全强制、AUTO 退出/恢复与设定记忆 每一格「压过之后怎么办」——同样是图的边
⑤ 整车级门限表 K6-08 电驱与前端散热回路标定(BEV) 进入/退出门限的实际取值方向(不取具体数)
⑥ 状态—仲裁表 O3-07 FCEV 系统级热管理模式管理与功率—热仲裁 含不可支配热源架构下的授权关系

这六张表的内容一律引用不重讲。本课不重新定义模式、不重新划优先级、不重新整定门限——本课只做「体检」这一道工序。⇒ 体检报告里出现的每一个模式名、每一条迁移、每一个请求源,都必须能反查到上面某一张表的某一行;反查不到的,就是体检员自己加进去的东西,一律划掉。这条听起来像形式主义,实际上是本课最容易被违反的一条:体检做到一半,发现某条迁移「显然应该有」,顺手就补上了——于是体检报告与被体检的表分了岔,而两边都以为自己是对的。

横向三段式流程图。左段「输入」竖排六个表框,自上而下依次标注:①模式表与迁移矩阵(属主 K3-01)、②需求合成表与执行器优先级表(属主 K3-08)、③切换序列表(属主 K3-09)、④请求源权限矩阵(属主 K3-16)、⑤整车级门限表(属主 K6-08)、⑥状态—仲裁表(属主 O3-07);六个框右侧各引一条箭头汇入中段。中段是一个大矩形「策略层静态体检(本课的唯一工序)」,框内竖排四个子步骤方块:翻译成状态—事件—迁移三元组 → 可达性遍历 → 请求-资源图查环 → 切换质量口径核对。中段右侧引出两条箭头到右段「出口两道闸」:上一条指向「接进 K4-03 的出口判据,与需求覆盖率、结构覆盖率并列」,下一条指向「K6-07 进环境舱前的拦截项」。中段下方另有一条虚线回指箭头标注「反查不到属主表的条目一律划掉」。全图不含任何数值。⛔ 本图为流程示意,框的大小与位置不代表任何比例或工作量,不得据图取值。
图1 六张表进来、一道工序、两道闸出去。该从图上读出的结论是:体检是一道有明确输入清单与明确出口的工序,⛔ 不是一次开放式评审——输入之外的东西不许进来(下方虚线那条),出口之外的地方不承接(右侧两道闸就是全部去处)。⛔ 本图为流程示意,框的大小与位置不代表工作量或时间顺序之外的任何含义,不得据图取值。

1.2 入口是一道翻译:把二维表逐格翻成「状态—事件—迁移」三元组

策略层的表和状态机之间隔着一次格式转换,而这次转换不是机械的。

翻译规则四条。

① 行 → 状态。模式表每一行是一个状态,状态名取模式表上的模式名,⛔ 不许改写、不许合并同类项。合并会让后面的可达集数不对——两个被合并的模式,可能一个可达一个不可达。

② 列头 + 格内条件 → 事件。列头是请求源或工况维度,格内写的是条件表达式。事件名的构造法是「列头 + 条件跨越方向」,例如列头是「座舱制冷请求」、格内条件是某温度高于进入门限,事件就是「座舱制冷请求置位(该温度上穿进入门限)」。⚠ 一个格子可能产出两个事件——上穿一个、下穿一个,方向不同的两个事件不许写成一个。

③ 格内的目标模式 → 迁移。三元组 = (源状态, 事件, 目标状态)。迁移矩阵那张表是这一步的交叉校核:从模式表逐格翻出来的迁移集合,与迁移矩阵上写着的边集合,必须逐条对上。对不上的两个方向都要记账——矩阵有而表翻不出的、表翻得出而矩阵没有的。

④ 翻不出来的格,就地立缺陷单。四种典型形态:

  • 写了条件没有目标状态——格子里写着「若某温度超限」,然后没有下文,或者写的是一句执行器动作而不是模式名。这类格子在实车上的行为取决于代码作者当时怎么理解,而不同的人理解不同。
  • 写了目标状态说不清触发事件——格子里只写「进入某模式」,条件那一栏空着或者写「视工况」。它派生不出用例,因为用例要的是一个可注入的触发。
  • 条件里引用了一个不在信号清单里的量——例如引用了一个「预计到达时间」,而这个量的属主、更新周期、失效值都没人认领。
  • 同一个 (源状态, 事件) 对出现两个不同的目标状态——这是非确定性,在表上长得像「两行都写着从 A 出发」,在实车上表现为结果取决于代码里 if 的书写顺序。

⚠ 这四类里,第一类和第四类是最危险的,因为它们不会在任何评审里显形:第一类看起来只是「这一格写得简略了些」,第四类看起来是「两条规则各自都对」。

左右对照图。左侧画一张三行四列的二维表示意:表头行标注「列=请求源/工况维度」,最左列标注「行=模式」,三行模式框内分别写「模式 A」「模式 B」「模式 C」,格子里用占位符号写条件表达式与目标模式名,其中两个格子被红色虚线框住并打叉,标注「翻不出来的格」。右侧画三元组产物:三个横排的圆角框,分别是「状态集 S」「事件集 E」「迁移集 T=(源状态, 事件, 目标状态)」,三框之间用箭头串联。左表到右侧三元组之间画三条实线箭头,分别标注「行→状态」「列头+格内条件跨越方向→事件」「格内目标模式→迁移」。右侧下方另有一个独立矩形框,标题「第一批缺陷(翻译台上就掉出来的)」,框内竖排四条:写了条件没有目标状态、写了目标状态说不清触发事件、条件引用了无属主的量、同一(源状态,事件)对出现两个目标状态;两个被打叉的格子各引一条虚线箭头指向这个框。图上不含任何具体温度值或阈值。
图2 翻译不是格式转换,是第一道体检工序本身。该读出的结论:翻不出来的格不是「资料不全,等补齐再说」,它就是缺陷——四类形态里第一类与第四类不会在任何逐行评审里显形。⛔ 本图为结构示意,表格内容为占位符号、不代表任何真实模式表,不得据图取值。

1.3 可达模式集:本课钉死的符号是 M_reach,⛔ 与两门邻课的 S_reach 不是一个东西

翻译完成后跑一次前向可达性遍历(算法本体归 K4-05 模式状态机的完备性核对与可验证性设计 第 3 讲,本课不重讲),从上电初始模式出发,得到可达模式集。本课把它记作 M_reach,元素是模式表上的模式(表的行);模式全集条目数记作 N_mode。

⚠⚠ 这里有一处必须先钉死的跨课撞名。K4-05 模式状态机的完备性核对与可验证性设计 用 S_reach 指「状态机的可达状态集」,元素是状态机的状态;G8-06 冷却液侧集成模块(CIM):阀岛/泵/膨胀壶一体化架构 也用 S_reach,指「可达回路连接状态集」,元素是阀位组合表达出的连接关系。两者元素类型已经不同、不可互算。本课的 M_reach 是第三个东西:元素是策略层规则表上的行。三者的关系是:

⇒ 写法口径:凡在正文里出现,本课一律写 M_reach 并在每一节首次出现时写足「可达模式集」四个字;引用邻课的量时一律写足「状态机的可达状态集」或「可达回路连接状态集」,⛔ 不许裸写 S_reach。读到一个不带限定语、身边也没有定义行的 S_reach(在别人的报告里也一样),先停下来确认它数的是模式、状态还是回路连接关系。

M_reach 的补集就是不可达模式清单:N_mode 减去 |M_reach| 那些行。同理,翻译出来的迁移集合减去可达迁移,就是不可达迁移清单。这两份清单必须带版本号——版本号取被体检那六张表的版本号组合,⛔ 不许只写体检日期。理由在 1.6 节。

1.4 不可达模式的三类策略侧成因:判别不同,处置也不同

查出一行不可达,下一步不是删,是分类。三类成因的判别特征与处置如下。

成因① 进入门限严于退出门限(门限写反)。判别特征:该模式的进入条件与退出条件同时引用同一个被控量,而进入门限落在退出门限的「里面」——于是任何时刻只要满足进入条件就同时满足退出条件,模式进去的瞬间就被弹出,遍历上表现为该状态入边可达而驻留长度恒为零,或者干脆连入边都不可达。处置=改门限,改法归 K3-01 整车热管理控制策略总览与模式管理 的迟滞带三项下界。⚠ 这一类最容易在两个人分别填「进入」列与「退出」列时产生,且两人各自都填对了自己那一列。

成因② 优先级恒被压过。判别特征:该模式的请求源在权限矩阵与优先级表上恒低于另一路,而另一路的置位条件是这一路的超集——于是无论工况怎么组合,这一路都拿不到执行器。判别动作是两步:先在优先级表上找出压过它的那一路,再核对两路置位条件的包含关系;包含关系成立才是本类,不成立只是「大部分时候拿不到」,那是饥饿不是不可达(两者的区别见 2.6 节,用错药会误诊)。处置=改优先级,或者承认它是死格并从表里删掉——删是合法处置之一,但必须写明「已确认它在本架构下无存在意义」,⛔ 不许静默删除。

成因③ 工况谱里没有落进该模式的区间。判别特征:门限没写反、优先级也拿得到,但把该模式的进入条件拿到目标市场的工况谱上去筛,落进这个区间的样本数为零或者接近零。⚠ 这一类不是策略缺陷,是需求或架构缺陷,处置是退回需求与架构:要么这条需求本来就不该有,要么系统自由度不足以到达那个工作点。⛔ 绝不是「继续加仲裁分支去够到它」——O3-07 FCEV 系统级热管理模式管理与功率—热仲裁 的工况谱点名法已经写死这条:有解不上的区间是需求不合理或自由度不足。(工况谱的来源与区间统计归 B1-01 整车热平衡与全工况热负荷谱分析,本课只用它的结论。)

三列并排的判别—处置对照图。顶部横贯一个入口框「查出一行不可达 → ⛔ 先别删,先分类」,向下分出三条支路。左列标题「成因① 门限写反」,下方竖排两格:判别特征格写「进入条件与退出条件引用同一被控量,进入门限落在退出门限内侧;遍历上表现为驻留长度恒为零」,处置格用绿色边框写「改门限(迟滞带下界归 K3-01)」。中列标题「成因② 优先级恒被压过」,判别特征格写「压过它的那一路,其置位条件是本路的超集;须两步核对:先找压过者、再核包含关系」,处置格写「改优先级,或承认死格并显式删除(须写明理由,⛔ 不许静默删)」,并在下方补一行小字「包含关系不成立时是饥饿,⛔ 不是不可达」。右列标题「成因③ 工况谱里无对应区间」,判别特征格写「门限没写反、优先级也拿得到,但进入条件拿到工况谱上筛,落入样本数为零」,处置格用橙色边框写「退回需求与架构,⛔ 不是继续加仲裁分支」。三列底部横贯一条横带,写「三类的处置互不通用:删错一格就删掉一条真需求」。图上不含任何温度值、门限值或样本数。⛔ 本图为判别流程示意,不代表任何真实平台的门限或样本数,不得据图取数。
图3 三类成因的判别路径与处置一一对应。该读出的结论:「不可达」是一个现象、不是一个诊断——三类的处置分别是改门限、改优先级、退回需求,互不通用;中列那条小字尤其要读到,包含关系不成立时它是饥饿而不是不可达,两者的药方相反。⛔ 本图为判别流程示意,不含任何取值,不得据图取数。

1.5 陷阱态(不可逃逸)在策略层的两种形态

陷阱态是「进得去、出不来」的状态。它在软件层的成因(迁移表漏了出边)归 K4-05 模式状态机的完备性核对与可验证性设计;在策略层,它有两种成因完全不同的典型形态,而且都不是「漏写了出边」——出边写得好好的,只是永远不成立。

形态一:进入条件写成「或」,退出条件写成「与」。进入条件是若干子条件的析取(任一成立即进入),退出条件却是同一批子条件的合取(全部反转才退出)。⚠ 这在写表的时候看不出任何问题,因为两列是分开填的,每一列自己都很合理:「任一路热请求超限就进保护模式」很合理,「所有热请求都回落才退出保护模式」也很合理。合在一起就是:只要有任何一路长期挂在门限上,这个模式就永远出不来。判别动作:逐模式把进入条件与退出条件的逻辑结构并排写出来,看析取/合取的方向是否匹配;不匹配的逐条追问「有没有一个子条件可能长期成立」。

形态二:退出条件依赖一个进入该模式后就不再有效或不再更新的量。典型例:进入除霜模式后,蒸发器温度不再反映结霜程度(表面已被加热,而霜层还在),却仍然拿它当退出判据;再如,进入某个保护模式后为省电关掉了某路传感器的采样,而退出条件恰恰引用那一路。判别动作是逐模式的一张小表:把退出条件依赖的每一个量列出来,逐个回答两问——在这个模式内它还有效吗?在这个模式内它还会变化吗?两问任一为「否」,这条退出边就是假的。

⚠ 形态二的危险在于它是有条件的。同一个量在别的模式里完全有效,只在这个模式里失效——所以按信号清单逐信号核对是查不出来的,必须逐模式核。

上下两块的对照图,共用左侧一个圆形状态节点「模式 X」,节点上方有一条粗箭头指入标注「进入」,右侧有一条箭头指出但被红叉截断标注「退出边写着,但永远不成立」。上块标题「形态一:进入用『或』、退出用『与』」,右侧画两个并排的逻辑框:左框写「进入条件 = 子条件 a 或 b 或 c」,右框写「退出条件 = 非a 且 非b 且 非c」,两框之间画一个不等号并标注「逻辑结构不匹配」,下方一行小字「只要任一子条件长期挂在门限上,就永远出不来;两列分开填时各自都合理」。下块标题「形态二:退出条件依赖模式内已失效或不再更新的量」,右侧画一张两列小表,表头「退出条件依赖的量 / 两问」,三行示意条目,每行右侧两个判定格分别标注「在本模式内还有效吗」「在本模式内还会变化吗」,其中一行两格都标红叉并连出一行小字「任一为否 ⇒ 这条退出边是假的」;下方另有一行小字「同一个量在别的模式里有效 ⇒ 按信号清单逐信号核查不出来,必须逐模式核」。图上不含任何具体信号名的取值或阈值。
图4 策略层的陷阱态不是漏写出边,是出边写了却永不成立。该读出的结论:两种形态需要两套完全不同的判别动作——形态一并排比对进入/退出的逻辑结构,形态二逐模式追问依赖量的「还有效吗、还会变吗」;形态二只能逐模式核,逐信号核对查不出来。⛔ 本图为结构示意,不含任何信号取值或门限,不得据图取值。

1.6 可达模式集是下游三处的分母:算错了三处一起虚高

体检报告里那份 M_reach(可达模式集)清单不是给自己看的,它是三处覆盖率的分母。

第一处:标定覆盖率。K6-07 热泵与多模式切换标定 的模式覆盖率是一个按工况谱权重加权的比值,分子是本版已实标或已合法继承的模式的权重和,分母是模式全集的权重和。⚠ 这里的「模式全集」必须取本课体检后的 M_reach,⛔ 不是模式表的行数。把不可达模式算进分母会发生什么:那些行永远标不了(因为走不到),于是它们的权重永远进不了分子,覆盖率被一个永远不可能补上的缺口压着——反过来,如果有人为了让数字好看而给不可达模式记了权重零,那覆盖率就虚高了,因为分母被人为缩小而缩小的理由没有写下来。⇒ 正确做法是先体检、后算覆盖率,并在报告上写明分母取的是哪一版 M_reach。

第二处:迁移覆盖率。K4-03 MIL/SIL/HIL 验证流程 与 K4-05 模式状态机的完备性核对与可验证性设计 的迁移覆盖率,分母取自迁移表上写着的边。本课的贡献是:这个分母必须先剔掉不可达迁移——一条永远走不到的边,会让迁移覆盖率永远达不到 100%,于是团队要么长期带着一个红项放行(久而久之这个红项就没人看了),要么给它写一条豁免论证(豁免论证的写法归 K4-05 模式状态机的完备性核对与可验证性设计)。两条路都比「先把它从分母里剔出去并说明为什么」贵。

第三处:场景覆盖率。K4-03 MIL/SIL/HIL 验证流程 的场景覆盖率,分子是已有至少一条回放用例的场景数,分母是场景全集条数。⚠ 这里的分母来自本课第 3 讲交付的场景全集与映射表,同理必须是体检后的版本。

⚠⚠ 三处共有一条硬要求:报比值必须同时给出分子分母的绝对条数与分母的版本号。只写百分比会掩盖分母口径的变化——表改了一版、体检重跑了一次、分母悄悄变了,而百分比看起来还很好。这条要求的本体在 K4-03 MIL/SIL/HIL 验证流程 与 K4-05 模式状态机的完备性核对与可验证性设计,本课把它落成体检报告的一条格式约束:M_reach 清单必须带版本号,版本号取被体检那六张表的版本号组合。

中心发散图。中心画一个圆角矩形「M_reach 可达模式集(带版本号,版本号=被体检六张表的版本号组合)」,其左侧有一个稍大的浅色矩形「模式表行数 N_mode」,两者之间用一条向右收缩的箭头连接并标注「体检剔除:不可达 + 陷阱项」。中心框向右引出三条箭头,指向三个并排的分母框:上框「K6-07 标定覆盖率——分母必须取体检后的 M_reach,⛔ 不是模式表行数」,中框「K4-03 / K4-05 迁移覆盖率——分母须先剔不可达迁移」,下框「K4-03 场景覆盖率——分母取本课第 3 讲交付的场景全集」。三个框右侧再汇聚到一个总结框,写「报比值必须同时给出分子分母的绝对条数与分母的版本号;只写百分比会掩盖分母口径的变化」。中心框下方另引一条虚线到一个警示框,写「不体检就算覆盖率:三处一起失真,且失真方向可以相反——分母含不可达则永远补不满,人为记零权重则虚高」。图上不含任何覆盖率数值或目标值。⛔ 本图为关系示意,框的大小不代表任何覆盖率取值或目标值,不得据图取数。
图5 一份可达模式集清单,同时是三处覆盖率的分母。该读出的结论:体检不是评审文档,它是三条度量链的上游;下方警示框那句尤其重要——不体检就算覆盖率,失真的方向可以相反(永远补不满 vs 虚高),所以「数字看起来正常」不能当成没问题的证据。⛔ 本图为关系示意,不含任何覆盖率取值或目标值,不得据图取数。

1.7 出口有两处闸口:报告怎么签,交给谁

体检报告不是评审用的文档,它是两道闸的输入。这一点决定了它的格式。

闸一:接进验证流程的出口判据。K4-03 MIL/SIL/HIL 验证流程 的出口判据里,静态体检报告与需求覆盖率、结构覆盖率并列——三项都不达标就不放行。⇒ 报告上必须有一栏是「本次体检的结论:放行 / 有条件放行 / 不放行」,以及有条件放行时那些条件的兑付时刻。

闸二:进环境舱前的拦截项。K6-07 热泵与多模式切换标定 已写死:不可达模式、死锁与无出口迁移应在这一层拦掉。⚠ 这一条的经济性很清楚:一次舱时的代价远高于一次逐格核对,而不可达模式在舱里表现为「怎么也标不到那个工况点」,工程师会先怀疑舱、怀疑车、怀疑标定参数,最后才怀疑表——排查顺序本身就把成本推高了。

报告的签署栏至少四行:体检对象的六张表各自的版本号;本次遍历工具与版本(工具本体归 K4-05 模式状态机的完备性核对与可验证性设计,本课只要求记录);结论与未闭项清单;体检人与日期。⚠ 缺版本号的体检报告等于没做——因为它无法回答「表改了之后这份结论还算不算数」,而表一定会改。

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

会员专属

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

查看会员方案