4. 一致性检查的规则化基础

一致性检查之所以能从“人工评审”走向“自动判定”,根本原因在于把模糊的工程意图转化成了机器可读、可推理、可复用的规则化表达。在MBSE中,这一转化并不是单一技术,而是一条由浅入深的谱系:约束(Constraint)限定取值与关系,规则(Rule)规定“什么情况算违规”,模式(Pattern)固化可复用的结构模板,契约(Contract)约定接口双方的责任与保证,本体(Ontology)提供概念与关系的公共语义,形式化表达(Formal Expression)则让上述内容具备可判定、可证明的数学基础。理解这条谱系,才能为后续的检查引擎选型、规则库建设和治理流程设计打下基础。

一、六类规则化手段的定位与分工

这六者不是互相替代,而是分层协作。约束回答“值域和关系是否合法”,规则回答“模型是否违反工程约定”,模式回答“结构是否按标准模板搭建”,契约回答“接口双方是否互相满足”,本体回答“不同模型说的概念是不是同一个”,形式化表达回答“判定是否严密、可验证”。

规则化表达谱系:从取值约束到形式化语义 越靠上越贴近具体模型元素,越靠下越贴近公共语义与数学基础 约束 Constraint 取值域、基数、单位、唯一性、类型匹配 —— 例:质量 m > 0 kg,端口基数 1..4 OCL / SysML Constraint Block 规则 Rule 违规判定条件 + 严重度 + 修复建议 —— 例:需求必须被至少一个用例追溯 检查引擎规则条目 模式 Pattern 可复用结构模板与角色绑定 —— 例:传感器-控制器-执行器闭环模式 模式库 / 模板匹配 契约 Contract 前置条件 / 后置条件 / 不变式 —— 例:供电接口保证 28V±2V,负载侧承诺电流 ≤ 5A 接口契约 / Design by Contract 本体 Ontology 概念、属性、关系与公理的公共定义 —— 例:系统、组件、接口、信号、工况的统一定义 OWL / RDF / 元模型 形式化表达 Formal Expression 一阶逻辑、时序逻辑、集合论、类型论 —— 例:∀s∈System: hasInterface(s) → ∃c∈Contract: satisfies(s,c) SMT / 定理证明 / 模型检测 抽象层级递增 → ← 可判定性增强 上层规则可引用下层语义;下层为上层提供判定基础,形成可追溯的规则化链条

二、约束与规则:从“值域”到“违规判定”

约束是最贴近模型元素的规则化手段。在SysML中,约束通常以约束块(Constraint Block)或OCL表达式承载。例如,一个电池组件的质量属性约束可写为:

context Battery
inv massPositive: self.mass > 0.0
inv voltageRange: self.nominalVoltage >= 20.0 and self.nominalVoltage <= 30.0
inv cellCountMatch: self.cellCount = self.seriesCount * self.parallelCount

这三条不变式分别检查质量为正、标称电压在20~30V之间、电芯总数等于串并联乘积。检查引擎在遍历模型时,对每个Battery实例求值,返回true/false。若为false,则记录违规元素、违反的约束名和当前实际值。

规则则比约束更进一步,它包含“判定条件 + 严重度 + 修复建议”。例如一条追溯性规则:

规则ID: TRC-001
适用对象: Requirement
判定条件: 不存在任何 Satisfy 关系指向该需求
严重度: Major
修复建议: 为该需求建立至少一条来自设计元素的 Satisfy 链接

约束和规则的区别在于:约束是模型自身的数学性质,规则是工程治理层面的检查条目。约束可以嵌入模型,规则通常放在外部规则库中,通过模型查询接口读取模型元素后判定。

三、模式与契约:结构复用与接口责任

模式解决的是“结构是否按标准模板搭建”。例如在无人机飞控模型中,一个典型的“传感器-控制器-执行器”闭环模式要求:传感器输出端口必须连接到控制器输入端口,控制器输出端口必须连接到执行器输入端口,且三者处于同一工况上下文。检查时,引擎在模型中搜索该模式的三元组实例,若存在传感器未连接控制器的情况,则判定模式违规。

契约则聚焦接口双方的责任与保证。以供电接口为例,契约可表达为:

契约: PowerInterfaceContract
参与方: 供电方 PowerSource, 负载方 PowerLoad
前置条件: PowerSource.outputVoltage ∈ [26V, 30V]
后置条件: PowerLoad.inputCurrent ≤ 5A
不变式: PowerSource.outputPower ≥ PowerLoad.requiredPower

一致性检查时,引擎分别读取供电方和负载方的属性值,代入契约条件求值。若供电方输出28V、负载方要求6A,则后置条件不满足,判定契约违规。契约的价值在于把接口一致性从“人工核对”变成“条件求值”。

四、本体与形式化表达:公共语义与可判定基础

当多个团队、多个工具、多个模型协同工作时,最大的障碍往往不是语法错误,而是“同一个词指不同东西”。本体通过定义概念、属性、关系和公理,为一致性检查提供公共语义。例如,本体中定义“接口”必须至少连接两个“端口”,“信号”必须属于某个“接口”,“工况”必须关联至少一个“系统状态”。这些公理本身就是可检查的规则。

形式化表达则让规则具备数学上的可判定性。一阶逻辑适合表达“所有需求都必须被追溯”这类全称命题;时序逻辑适合表达“在制动信号发出后,制动力必须在200ms内建立”这类时间约束;集合论适合表达“所有安全关键功能必须属于ASIL-D集合”。形式化表达的落地方式通常有两种:一是将模型元素映射为逻辑原子,用SMT求解器判定可满足性;二是将模型转换为状态机,用模型检测工具遍历状态空间。

五、落地方式:从规则条目到检查引擎

在实际项目中,这六类手段需要统一落到一个可执行的规则库中。规则库的每条记录至少包含:规则ID、规则类型(约束/规则/模式/契约/本体公理/形式化公式)、适用元模型元素、判定表达式、严重度、修复建议、版本号。检查引擎读取规则库,遍历模型元素,逐条求值,输出违规清单。

以某型无人机飞控模型为例,假设规则库中有以下三条规则:

规则ID类型判定表达式(示例)严重度
CON-012约束Battery.mass > 0Minor
TRC-001规则∀r∈Requirement: ∃s∈Satisfy: s.target = rMajor
CTR-005契约PowerSource.outputVoltage ∈ [26,30] ∧ PowerLoad.inputCurrent ≤ 5Critical

检查引擎执行后,若发现某电池质量属性缺失(返回unknown而非false),应记录为“无法判定”而非“通过”,这是规则化检查中容易被忽视的边界情况。对于契约类规则,若供电方电压为25V,则CTR-005判定为违规,严重度Critical,需立即修复。

规则化表达的核心不是“写更多规则”,而是让每条规则都有明确的适用对象、可求值的判定条件和可追溯的修复路径。约束、规则、模式、契约、本体、形式化表达六者协作,才能覆盖从取值到语义、从结构到接口、从局部到全局的一致性检查需求。

最后需要强调:规则化基础的建设应与模型治理同步推进。规则库需要版本管理,规则变更需要影响分析,规则执行结果需要与模型基线关联。只有这样,一致性检查才能从一次性脚本演化为可持续的工程能力。