K4-05 · 控制、软件与标定 / 嵌入式软件与开发
待认领listed
→
众筹中recruiting
→
已开课open · Course 售卖
一课题可并存多讲师版本
课程大纲
学完能做什么
- 能填出一张行=状态、列=事件的迁移表并把完备率做到 100%(含「保持不动」显式填写与 else 兜底),并对同一状态的两条出边给出 guard 互斥判据或显式且稳定的优先序
- 能把 B3-04 的模式表与 G8-06 的阀位组合真值表翻译成软件层可执行的 guard 清单,并说清每条 guard 该落在迁移前置、下发前校验还是运行期不变式这三个落点的哪一个
- 能用静态可达性分析找出不可达状态与陷阱(不可逃逸)态,用请求-资源图查出死锁环,并按单向全序/超时兜底/全局仲裁者三条手段给出破除方案
- 能为每一个过渡态定出超时时长与三选一去向,并识别事件竞态、报文乱序与丢帧造成的状态不一致并给出结构性对策
- 能写出上电初模式的判定规则表与异常复位后的恢复路径,含「信任 NVM 存值」的与条件,以及寻零期间临时模式的合法阀位子集表(须同时满足 B3-01 的每条回路闭合、有泵、有定压点)
- 能说清状态覆盖/迁移覆盖与 K4-02 的判定/条件/MC-DC 覆盖、K4-03 的需求覆盖率三者的分工与各自的原理性上限,并写出迁移覆盖率的分母口径与豁免论证
- 能说清模型检验工具(Simulink Design Verifier 一类)能证什么、不能证什么,并把完备性核对报告、静态核对报告、覆盖准则声明三件证据接进 K4-03 的用例矩阵与出口判据
内容大纲
- 状态×事件迁移表的完备性自检
- 交付物先定形:一张行=状态、列=事件的二维表,格数=N_状态 × N_事件。完备的判据不是「箭头画全了」,而是每一格都有确定去向——包括「保持不动」必须显式写进格里;空格在代码里等价于事件被静默丢弃,现场表现是「按了没反应但没有故障码」,最难归因。
- 状态一列必须先收全再谈完备率,否则算出来是假的 100%:热功能模式 × 车辆使用态这张二维模式空间、三个端点态 Init/Shutdown/Sleep、以及产线 EOL/售后服务/运输存放/诊断激励这类非用户模式——三类都由 K3-01 要求进模式集,本讲只负责把它们摆进表的行头。
- 事件一列的粒度必须先冻结再算数:同一连续量的多个阈值拆成多个事件会让表膨胀,不同来源的事件并成一个又丢掉「谁触发的」。建议按五类分列——温度/压力门限越界、用户或场景请求、故障置位与撤销、超时、外部授权回执;第五类只在含不可支配热源(发动机/增程器)的架构里出现,分类依据见 K3-01 的直辖/可请求执行器划分。
- else 兜底是每个状态的必填项:必须有一条「上述条件均不成立」的默认分支,且它的动作是安全侧的显式动作,不是「什么都不做」的隐式落空。Stateflow 里未画 else 的判定节点是本课机检的第一条规则。
- 转移条件互斥性:同一状态任意两条出边的 guard 之交须恒假;不恒假就必须显式给优先序,且优先序不得依赖工具的绘制顺序——把行为绑在绘图顺序上,改一次图或换一次工具版本行为就变,这是二义性最常见的藏身处。
- 二义性消解只有三种合法写法,评审要求写明选了哪种及理由:把 guard 改成互斥(加互补条件)、显式定优先序、或把两条出边合成一条并在目标状态内部再分流。三者在可读性与可机检性上代价不同,不能混着用还不留记录。
- 本讲只做结构性检查,一个阈值也不定:迟滞带 ΔT_hys、最小驻留 t_dwell_min、去抖时间的取法与整定次序归 K3-01 与 K1-01。本讲只加一条结构规则——guard 里凡出现阈值,就必须有对应的迟滞或去抖伴生项,缺伴生项即打回。
- 非法构型的软件层排除:把架构表翻译成 guard
- 输入是两张已有的表,穷举方法一律引用不重讲:B3-04 的模式表(含 §5.1 逐格校核过的过渡阀位)与 G8-06 的阀位组合真值表(含 N_states ≤ N_valve_positions 上限与「某过渡工况无解」的翻车案例)。本讲要做的只是「架构层表 → 软件层约束」这道翻译。
- 翻译不是抄表:架构表是稳态枚举,软件层要拦的是稳态表里根本不出现的构型——事件竞态、指令乱序、中间阀位、以及「上一条指令还没执行完就来了下一条」组合出来的瞬时构型。K3-04 已给出结论「非法组合要写成 guard 而不是靠阀位表穷举」,本讲补上这道翻译的做法。
- guard 的三个落点必须分清并各给判据:①迁移前置——进入某模式前校验目标构型合法;②下发前校验——开阀前的合法性校验(K3-04 的冷媒侧高低压串通属这一类);③运行期不变式——任何时刻都不允许成立的构型,做成独立监视器,违反即进降级。只做第一类,乱序与竞态照样能穿过去。
- 冷却液侧的合法性底线直接来自 B3-01 的三条铁律(每条回路闭合、有泵、有膨胀定压点,且散热器不被完全旁通):本讲要求把它写成可判的布尔式而不是评审时的口头检查——给每个阀位组合预计算一张「回路闭合表」,guard 查表判定。
- 非法构型清单要标严重度,处置分档不同:能效损失类(高低压串通、散热器被完全旁通的闷罐)可只做迁移前置;部件不可逆损伤类(泵推死头、加热器干烧、冷板憋压)必须做成运行期不变式,且不能只靠状态机——部件层保护的归属与两层阈值排队见 K1-02、加热器侧落点见 G9-03。
- 这张 guard 清单是契约不是文档:G8-06 已明确「阀位表是控制策略的输入契约」,本讲要求 guard 清单与架构侧的模式表/真值表做版本对齐——谁改表谁通知谁、软件侧改后跑哪一档回归;基线与回归执行机制见 K4-04/K4-08,不在本课重讲。
- 切换的执行时序不在本课:水侧「泵降速→阀走行程→稳定延时→泵恢复」三段式、允许断流/憋压窗口上限、危险中间态绕行与水锤限速归 K3-09,冷媒侧三段式与换向压力冲击归 K3-04。本讲只管构型合不合法,不排时间轴。
- 不可达状态、陷阱状态、死锁与活锁,及过渡态超时与事件竞态
- 四个病名先分清,判据各不相同:不可达状态=无入边或所有入边 guard 恒假;陷阱(不可逃逸)态=有入边但无有效出边、或出边 guard 在该状态下恒假;死锁=两个及以上主体互相等待、谁都不满足前进条件;活锁=状态在变、条件在变,但系统永远不完成目标(两级都在限速的极限环、两方轮流让度是典型)。
- 静态可达性分析怎么做:从初始状态出发,做 guard 可满足性的前向遍历,得到可达状态集与可达迁移集,与表里画出的全集取差即为不可达项。它还有一个下游用途——讲 5 的迁移覆盖率分母必须先剔掉这些不可达迁移,否则覆盖率永远不满分,团队就会去编凑分用例。
- 请求-资源图(等待图)法:节点=主体(子系统/模式/资源持有者),有向边=「A 在等 B 先释放或先动作」;图中存在有向环即死锁的必要条件。K5-02 的误区「两个子系统互相等待对方先降级」只给了病名,本讲给药方:三条破除手段——把降级/让度依赖定成单向全序(任一时刻只允许序号更高者主动降级)、超时兜底强制单方先降、设全局仲裁者打破环;三者可叠加,但只有单向全序能在设计期就证明无环。
- 饥饿与死锁不是一回事,别用同一套药:饥饿在等待图上表现为无环而某节点长期拿不到资源,其识别指标(连续未满足时长、服务率下限)与老化/保底配额三件套归 K3-01,长时序定向用例归 K4-03;本讲只负责给出它在图上的识别形式。
- 过渡态必须配超时与回退去向:阀在走行程、压缩机在升速、寻零在进行——这些都是有时长的过渡态;不给超时,一次丢帧或一次执行器不到位就能让状态机永久等待一个不会到来的完成事件,这正是陷阱态最常见的量产形态。超时去向只有三选一:重试(限次+退避,语义引 K5-02 的「重试—放弃—降级」)、放行并标降级、回退到进入前的状态。K3-11 已对电源模式机提出同一要求,本讲把它推广到全部过渡态。
- 事件竞态与总线乱序/丢帧造成的状态不一致:同一拍内到达的多个事件按什么次序消费、跨 ECU 的「请求」与「回执」错序时双方会不会各自认为对方已就绪。结构性对策三条——事件序列化(同一拍内定序消费,而不是各自触发迁移)、状态一致性校验(周期比对本域状态与对方状态字,不一致时以更保守一侧为准)、跨节点迁移带握手与超时。新鲜度 age、逐信号 timeout 取值、SNA 编码与丢帧区间斜率作废归 K2-02/K1-01,本讲只消费其标志位。
- 本讲的方法是四门存量课明确前指本课的那一项(K4-02 的形式化性质检查、K4-03 的死迁移判断、K5-02 的死锁破除与静态可达性、I7-02 的降级态可达/能返回/无孤立态);但同批登记的 K3-13 与已结构化的 K3-16 把「可达性、死锁、切换质量」指向 K3-13——写讲义前必须先做 boundary ⑫ 的仲裁,避免两门各写一遍。
- 上电初模式与复位恢复(本课最具热管理特异性的一讲)
- 初始状态不是「随便挑一个模式」,而是一条要逐行写的判定规则:输入=上次是否正常下电(正常下电应留收尾完成标志)、断电时长、NVM 学习值的合法性校验结果、传感器有效性是否建立、执行器位置是否已知;输出=进 Init 的哪个子态,以及首个允许进入的可运行模式。规则表缺一行,就是一条上电路径没人定义。
- 「模式/阀位是否写 NVM」是权衡题不是对错题:存值只能把寻零从「每次上电必做」降级为条件触发并提供合法性校验基准,不能免除寻零(G4-01 已把「上电不做归零」列为误区);不存的代价是每次上电的顶止点撞击噪声与行程时间。载体选型、块类型、掉电写一致性与上电有效性校验归 K4-06,本讲只定「不信存值时状态机走哪条恢复路径」。
- 信任存值的判据写成一组与条件:正常下电标志成立 ∧ 校验有效 ∧ 断电时长未超门槛 ∧ 位置合法性校验通过;任一不成立即强制重寻零,且该期间执行器只允许下发保守缺省动作、不允许下发绝对位置(这条约束由 G12-03 的「上电恢复」档持有,本讲只做状态机侧的落法)。
- 异常复位(看门狗复位、掉电复位、总线复位)的恢复路径必须与冷启动分开定义:区别在于机械件可能仍在运动、冷却液温度场仍是热态、用户仍在车上。热态复位后直接执行「全执行器归零」可能比不归零更危险(例:正在制热的高压加热器已通电而泵被停下),故恢复路径必须先建立安全构型,再谈寻零次序。控制器自身的硬件上电/复位与看门狗时序归 K2-01,本讲只讲软件状态机怎么接。
- 寻零期间的临时模式是本讲的核心交付物:它在 K3-01 的模式集里只占 Init 一格、在 K3-11 的上电次序表里只占一段,但它的阀位约束全站从没人写过——寻零要顶到硬限位(G4-01:等于该支路短暂断冷/断热),多阀同时寻零的组合更可能落在架构表之外,而 B3-01 的三条铁律恰在这个窗口最容易被违背。判据:为寻零期单列一张合法阀位子集表,不在子集内的组合禁止出现,必要时把寻零串行化(串行化的代价与 12V 峰值预算见 K3-11/K2-06)。
- 寻零期到达的用户请求是挂起、丢弃还是降级执行,必须显式定义(K3-01 已把「执行器学习/找零期间如何挂起模式请求」列为同类问题);寻零超时/失败后的降级路径与 DTC 归 K5-02 第十类(初始化/学习类动作的超时与失败),本讲只交出「该执行器不可用时哪些模式禁止进入」这张表的状态机侧接口,并守住一条:多数场景应降级可用而不是拒绝启动。
- 执行器寻零本身一概引用不重讲:EXV 归零与运行期重同步 → G4-01;驱动层步数下发、步数限幅、保持扭矩与上电自学习排队错时 → K1-02;三档 fail-safe(带电失联/断电/上电恢复)语义与断电落点选型 → G12-03;风门止点自学习与开环失步判据 → C2-03;产线首次找零与 EOL 零位学习工位 → G8-05。本讲只讲「状态机里那个临时模式」怎么建。
- 域级次序不在本课:上电自检的四类动作调度次序、逐段超时预算与 t_ready、唤醒源清单、下电与 run-on 编排归 K3-11——该课已明确把「初始态判定与异常复位恢复路径的完备性核对」前指本课第 4 讲,两门以此分界,不要越线。
- 覆盖准则与工具边界
- 三档覆盖准则的分子分母先写清:状态覆盖=已进入状态数/可达状态数;迁移覆盖=已触发迁移数/可达迁移数(分母用讲 3 剔除不可达项后的集合);MC-DC 落在单条 guard 的复合布尔式内部,回答「每个条件能否独立改变这条迁移的成败」。
- 为什么 K4-02 的判定/条件覆盖对状态机不够用:判定覆盖只看每个判定的真假两侧都走过,而状态机的病长在「状态×事件」这张二维表上——一条迁移的 guard 真假都测过了,仍然不知道其它状态下同一事件该去哪。K4-02 现文已给出「判定/条件覆盖对状态机不充分」这个结论,本讲给出量化对照与分母口径。
- 为什么 K4-03 的需求覆盖率也不够用:它的分母是已条目化的需求条数,漏写的规则不在需求里,自然不在分母里。K4-03 已写明这条原理性上限(测不出「这个组合从来没被写进规则表」)并把静态核对前置到本课。三类证据互不替代——需求覆盖答「该测的测了没」,结构/迁移覆盖答「有没有从没跑到的地方」,静态核对答「有没有从没写下来的地方」;缺任一类都不算过出口。
- 模型检验(Simulink Design Verifier 一类)能证什么:给定模型与显式写下的性质,能在所有输入序列上证明性质不被违反,或给出一条反例路径;对不可达状态、死迁移、guard 交叠这类结构性质,它能自动检出,这也是本课把讲 1/讲 3 的判据都写成可机检形式的原因。
- 不能证什么——工具边界必须写清,不许含糊:①它只证你写下的性质,需求写漏或性质写得太弱,它一律不报;②被 stub 掉、含查表/外部 C 代码/强非线性的部分,结论要么退化要么给「无定论/超时」;③状态空间爆炸时它返回的是「未证明」而不是「通过」,把「未证明」读成「没问题」是本讲最要防的误用;④它证的是模型,不是生成代码、更不是 ECU 上的实现(代码侧证据归 K4-02 的 back-to-back 与 K4-03 的 PIL)。证明结论必须连同「证了哪条性质、以什么假设、结论是证明/反例/无定论」三项一起留档。
- 切换质量的量化指标(切换扰动幅度与回稳时长、抖动次数每小时并给单位里程口径、执行器动作次数)是状态机设计的验收侧证据:本讲只讲怎么从静态结构与仿真/HIL 日志里量出来、以及为什么两个口径必须并给(要求由 K3-01 持有);目标值与配额反推归 K3-01 的 N_life 配额,验收口径与 K3-13 的归属见 boundary ⑫。
- 证据如何接进 K4-03:交付三件进它的用例矩阵与出口判据——①完备性核对报告(完备率、二义性清单与已消解方式);②静态核对报告(不可达状态/死迁移清单及处置、等待图无环证明或破除方案);③覆盖准则声明(本项目取哪一档、分母口径、豁免项与论证)。K4-03 未覆盖项四条分流里的第四条(真死代码/死迁移须删除并回溯作废需求)正是本课的输出口。
- 本课自设禁区:不讲通用软件测试理论、不讲模型检验的算法原理(有界模型检验与 SMT 求解的内部机制),被测对象钉死为「热管理模式状态机」;离散组合场景的等价类划分与 pairwise 裁剪归 K4-03,本课不重讲。
关键公式
C_table = N_填格 / (N_状态 × N_事件),完备性判据 C_table = 100%(「保持不动」必须显式填写才计入分子)
把「这张迁移表完不完备」变成一个可机检、可当提交门禁的数:任何一格空着都是一处未定义行为,评审可据此直接打回,不必逐条争论
同状态出边互斥判据:∀ i≠j,g_i ∧ g_j ≡ 假;若不恒假,则必须存在显式且稳定的优先序 prio(i) ≠ prio(j)
把「同一状态两条迁移同时成立时谁赢」写成可机检的性质,是二义性消解这条要点的落地形式,也是本课交给模型检验工具的第一条自定义性质
死锁必要条件:等待图 G(V,E) 中存在有向环;单向全序破除判据:∀(u→v)∈E 均满足 rank(u) < rank(v)
给 K5-02 只留了病名的「两个子系统互相等待对方先降级」配上可执行的排查与破除判据,同时是 I7-02 前指本课的「降级态可达、能返回、无死锁与孤立态」那一项的做法
状态覆盖 = N_已进入状态 / N_可达状态;迁移覆盖 = N_已触发迁移 / N_可达迁移
回答「这台状态机测到没测到」,并把它与「该测的测了没」(需求覆盖率)、「有没有从没写下来的」(静态核对)三者的分工写清;是本课交给 K4-03 出口判据的第三件证据
f_chatter = N_switch / t_obs(次/h),须并给 N_switch / s_driven(次/百公里);判据 f_chatter ≤ f_allow
把「切换质量」从主观印象变成可验收的数,与温度达标并列作为状态机设计的出口证据——温度全合格而抖动率与动作次数超配额,是本领域最常见的假通过
关键概念
状态×事件迁移表完备率(每格有确定去向)显式「保持不动」else 兜底分支守卫条件 guardguard 互斥性与二义性消解迁移优先序(不依赖绘制顺序)非法构型与软件层合法性约束三个 guard 落点(迁移前置/下发前校验/运行期不变式)回路闭合表不可达状态陷阱态(不可逃逸态)死锁活锁请求-资源图(等待图)查环单向全序定序过渡态超时与三选一去向事件竞态事件序列化状态一致性校验上电初模式判定规则信任 NVM 存值的与条件正常下电标志异常复位恢复路径寻零期临时模式与合法阀位子集表状态覆盖迁移覆盖形式化性质检查/模型检验性质(不变式与可达性)无定论/超时(未证明 ≠ 通过)切换扰动幅度与回稳时长抖动率 f_chatter执行器动作次数
推荐工具与标准
Simulink / Stateflow(迁移表与层级/并行状态的载体;本课重点用其迁移表视图与迁移优先序显示,「行为依赖绘制顺序」是第一检查项) Simulink Design Verifier(形式化性质检查:不可达状态、死迁移、guard 交叠,以及本课自定义性质的证明;须同时记录「证明/反例/无定论或超时」三种结论) Simulink Coverage(状态覆盖与迁移覆盖度量;分母口径须与讲 3 剔除的不可达迁移对齐后再报数) Excel/Python 迁移表与真值表脚本(N_状态×N_事件 完备率机检、guard 两两交叠的布尔求解、把 B3-04 模式表与 G8-06 真值表批量翻译成 guard 清单与回路闭合表) 有向图与环检测脚本(networkx 一类:请求-资源图查环、单向全序 rank 校验) CANoe(事件竞态、报文乱序与丢帧的注入复现,用于验证结构性对策;注入能力本体与台架侧归 K4-03) 本站在线原理图工作室 /tools/diagram/(把寻零期合法阀位子集与非法构型画出来给评审看)
ISO 26262-6(软件层面的产品开发):本课只借两条口径——静态分析与半形式化/形式化验证属软件单元验证的可选方法之一,以及结构覆盖类型按 ASIL 分档选取而非越高越好;分档表与方法本体见 K4-02/K4-03,功能安全方法本体见 K2-03。版本按现行版本确认,本课不引条款号。 MAB 建模规范(MathWorks Advisory Board,体系名、非编号标准,旧称 MAAB,按版本号迭代):其中 Stateflow 的状态/迁移绘制、默认迁移与图形复杂度约束条款是本课迁移表可机检的落点;规范本体与 Model Advisor 检查集见 K4-02,版本按现行确认。 ⛔ 本课不引任何「状态机完备性」专用标准号:形式化性质检查、状态/迁移覆盖与静态核对的要求散落在上述体系文件与各主机厂软件开发规范中,具体条款与适用性按现行版本与项目适用矩阵确认,讲义不得自造编号。
工程案例
某平台热管理域控在一次软件迭代后出现偶发「空调按了没反应、也没有故障码」,低温冷启动时更容易复现。台架回放定位到两处结构缺陷,都不在功能逻辑里而在状态机的结构上:一是迁移表里「执行器寻零未完成」这一行对「用户开启制冷请求」这一列是空格——事件被静默丢弃,状态机停在 Init 的子态等一个寻零完成事件,而该次寻零因低温阻力偏大超时失败、超时又没有回退去向,于是形成一个陷阱态(进得去出不来,且不置码);二是「电池冷却」状态下「液温回落到关闭门限」与「故障置位」两条出边的 guard 可同时成立,此前一直靠 Stateflow 的迁移绘制顺序消解,本次迭代重排了迁移图,优先序随之翻转。整改四条:①按 N_状态 × N_事件 逐格补全,「保持不动」显式写进格里,把完备率 C_table 作为提交门禁;②所有过渡态补超时与三选一去向(重试限次+退避/放行并标降级/回退到进入前状态),寻零失败按 K5-02 第十类走「降级可用」而不是拒绝启动;③给同状态出边定显式优先序,禁止依赖绘制顺序,并把「同一状态任意两条出边 guard 不交叠」写成性质交给模型检验做机检;④把完备性核对报告与静态核对报告接进 K4-03 的出口判据,与需求覆盖率、结构覆盖率并列。(本案为教学用合成案例,现象组合取自本领域常见的结构性缺陷,不对应任何具体车型的实测记录。)
动手做
交付物 · 给定一台带热泵纯电车的三份既有输入(B3-04 口径的模式表 8 行以内、G8-06 口径的阀位组合真值表、K3-01 口径的模式集与仲裁优先级),完成一次状态机静态体检:① 列全状态(热功能模式 × 车辆使用态 + Init/Shutdown/Sleep + 至少 2 个非用户模式)与冻结后的五类事件,填出 N_状态 × N_事件 迁移表,算出 C_table,把「保持不动」显式写出,并逐条标注 guard、超时时长与超时去向;② 从模式表与真值表翻译出至少 6 条 guard,按迁移前置/下发前校验/运行期不变式三个落点分类,并把 B3-01 的三条铁律写成可判的布尔式(给出回路闭合表的一行样例);③ 做静态可达性分析,列出不可达状态与陷阱态及各自处置,画一张请求-资源图(至少含一个环)并在三条破除手段里选一条、写明理由;④ 写上电初模式判定规则表(含「信任 NVM 存值」的与条件)与异常复位恢复路径,并单列一张寻零期临时模式的合法阀位子集表;⑤ 声明本项目取哪一档覆盖准则、写出迁移覆盖率的分母口径与豁免项论证,并列出交给 K4-03 的三件证据清单。交付物:迁移表(带完备率与二义性列)+ guard 清单 + 可达性与等待图报告 + 上电/恢复路径规则表 + 覆盖准则声明页。
常见误区
- 以为迁移表把箭头画全了就完备,其实判据是「每状态对每事件都有确定去向」——「保持不动」不显式写进格里就是空格,运行期表现为事件被静默丢弃,看着像没坏、也不置码,最难归因。
- 以为 100% 迁移覆盖率就证明状态机没问题,其实覆盖率的分母只含已经写进表里的迁移;从没写进去的组合不会在任何一条用例里失败(K4-03 已把这条原理性上限写明并把静态核对前置到本课)。
- 以为两条 guard 同时成立时由 Stateflow 的迁移顺序决定就够了,其实那是把行为绑在绘图顺序上——改一次图或换一次工具版本,优先序就翻转,而功能代码一行都没改。
- 以为架构层的模式表与阀位真值表校核过了软件层就不会出非法构型,其实架构表是稳态枚举,软件层还要有 guard 拦住由事件竞态、指令乱序与中间阀位组合出来的瞬时构型(K3-04 已给结论,做法在本课)。
- 以为 guard 只要写在迁移前置就够,其实乱序与竞态能绕过它——部件不可逆损伤类的非法构型(泵推死头、加热器干烧、冷板憋压)必须做成运行期不变式加部件层兜底两级。
- 以为死锁是「逻辑写复杂了」的偶发问题,其实互相等待、互为前置、共享资源环形持有三类成因可以用请求-资源图静态查环查出来;K5-02 只给了病名,药方在本课,且只有单向全序能在设计期证明无环。
- 以为把饥饿和死锁一起用超时兜底就解决了,其实两者不同:饥饿在等待图上无环,靠老化与保底配额治(归 K3-01),超时兜底对它无效。
- 以为上电就是「初始化完了进正常模式」,其实寻零期是一个必须显式建模的临时模式——寻零要顶到硬限位,多阀同时寻零的组合最容易违背 B3-01 的「每条回路闭合、有泵、有定压点」,而这个窗口的阀位约束全站从没人写过。
- 以为异常复位后沿用 NVM 里的阀位/步数就能接着跑,其实存值只把归零降级为条件触发、不能免除(G4-01 已把「上电不做归零」列为误区);正常下电标志或合法性校验不过就必须强制重寻零。
- 以为热态复位后立刻全执行器归零最保险,其实归零期间该支路短暂断冷/断热,若加热器已通电而泵被停下会比不归零更危险——恢复路径必须先建立安全构型再排寻零次序。
- 以为过渡态卡住是执行器慢,其实过渡态没配超时与回退去向时,一次丢帧就能让状态机永久等待一个不会到来的完成事件;超时去向是迁移表的必填列(K3-11 已对电源模式机提出同一要求)。
- 以为 Simulink Design Verifier 报「无不可达状态」就等于状态机对了,其实它只证你写下的性质:需求写漏、性质写得太弱、模型被 stub 掉的部分,它一律不报;状态空间爆炸时它返回的是「未证明」而不是「通过」。
- 以为模型检验证过了就不用测代码,其实它证的是模型不是生成代码,更不是 ECU 上的实现——代码侧证据仍要靠 K4-02 的 back-to-back 与 K4-03 的 PIL。
- 以为切换质量只看温度达标,其实抖动次数与执行器动作次数是独立验收量,且必须同时给单位时间与单位里程两个口径;温度全合格而寿命配额被吃光是本领域常见的假通过。
相关课题