什么是 OPM?

OPM(Object-Process Methodology,对象-过程方法)是智绘采用的核心建模方法, 用于把复杂系统知识组织成统一、可评审、可复用的结构化表达。它通过同一套图形语言同时表达系统的结构(对象) 与行为(过程),并把状态、关系与约束纳入同一模型,帮助团队围绕同一份知识资产协作。

对象(Object)

表示系统中的实体,是行为的载体。例如:机器、工件、订单、用户等。

过程(Process)

表示系统的变化与活动,是模型中承载执行逻辑和流程演进的核心。例如:加工、传输、检验、生成订单等。

状态(State)

表示对象在行为执行过程中的状态变化。例如:空闲、忙碌、已完成、待处理等。

OPM 的价值: 智绘使用 OPM 在一张图中同时展示结构、行为、状态与约束, 让复杂知识不只“能被画出来”,还可以被团队共同理解、评审、推演和持续沉淀。

OPM 基本元素

1. 对象(Object)

对象用矩形表示,是系统中持续存在的实体。

对象的特征:

  • 持续性:在系统运行期间持续存在
  • 属性:可以具有多个属性值
  • 状态:可以有多个不同的状态

对象示例:

制造系统中的对象:

  • 机器:执行加工任务的设备
  • 工件:待加工的产品
  • 操作员:操作机器的人员
  • 订单:包含生产任务的订单
OPM对象

对象的图形表示(矩形)

2. 过程(Process)

过程用椭圆表示,是系统中的动态行为或转换。

过程的特征:

  • 瞬时性:在特定时间发生,然后结束
  • 转换:改变对象的状态或属性
  • 触发:可以被条件触发

过程示例:

制造系统中的过程:

  • 加工:将原材料加工成产品
  • 运输:将工件从一个位置移动到另一个位置
  • 检验:检查产品质量
  • 生成订单:创建新的生产订单
OPM过程

过程的图形表示(椭圆)

3. 状态(State)

状态用圆角矩形表示,描述对象在某一时刻的特定情况。

状态的特征:

  • 从属性:状态必须属于某个对象
  • 互斥性:对象在同一时刻只能处于一个状态
  • 转换:通过过程从一个状态转换到另一个状态

状态示例:

机器对象的状态:

  • 空闲:机器没有任务
  • 忙碌:机器正在加工
  • 故障:机器出现故障
  • 维护:机器正在维护
OPM状态

状态的图形表示(圆角矩形)

OPM 连线类型

连线用于表达对象和过程之间的关系。 支持多种连线类型:

Instrument Link(工具/手段链接)

语义:对象作为过程的工具或手段

示例:机器 → 加工(机器用于执行加工过程)

图形:实线箭头,从对象指向过程

Agent Link(代理/执行者链接)

语义:对象作为过程的执行者或代理

示例:操作员 → 操作(操作员执行操作过程)

图形:带圆圈的箭头,从对象指向过程

Result Link(结果链接)

语义:过程生成或产生对象

示例:加工 → 成品(加工过程生成成品)

图形:实线箭头,从过程指向对象

Consumption Link(消耗链接)

语义:过程消耗对象

示例:原材料 → 加工(加工过程消耗原材料)

图形:箭头末端为三角形,从对象指向过程

Effect Link(效果链接)

语义:过程改变对象的状态

示例:加工 → 工件(加工过程改变工件状态)

图形:虚线箭头,从过程指向对象

Invocation Link(调用链接)

语义:一个过程触发或调用另一个过程

示例:检验完成 → 包装(检验完成后触发包装过程)

图形:虚线箭头,从一个过程指向另一个过程

Event Link(事件链接)

语义:对象状态变化触发过程

示例:订单[新建] → 生产计划(新建订单触发生产计划)

图形:虚线箭头,从状态指向过程

Aggregation(聚合关系)

语义:对象由其他对象组成

示例:汽车包含引擎、车轮、车身

图形:三角形连接,表示"部分-整体"关系

Generalization(泛化关系)

语义:对象之间的继承关系

示例:车辆是汽车、卡车的父类

图形:空心三角形箭头

注意: 选择正确的连线类型非常重要,它直接影响仿真的逻辑。 例如,Instrument Link 表示对象可重复使用,而 Consumption Link 表示对象被消耗掉。

多视图建模

支持多视图分层建模,允许您将复杂系统分解为多个层次, 每个视图聚焦于系统的特定方面。

视图层次结构

  • 顶层视图(System View):展示系统的整体结构和主要组件
  • 中层视图(Component View):展开某个对象或过程的内部细节
  • 底层视图(Detail View):展示最细粒度的实现细节

创建子视图

  1. 右键点击对象或过程节点
  2. 选择 "展开到新视图"
  3. 系统自动创建子视图,并在视图树中显示
  4. 在子视图中可以添加更详细的元素

视图导航

  • 通过左侧的视图树切换不同视图
  • 双击已展开的节点可以进入其子视图
  • 使用面包屑导航返回上层视图
最佳实践: 顶层视图应该简洁明了,展示系统的主要组件和流程。 将详细的实现逻辑放在子视图中,这样可以保持模型的可读性。

建模最佳实践

1. 命名规范

  • 对象:使用名词,例如"机器"、"工件"、"订单"
  • 过程:使用动词,例如"加工"、"传输"、"检验"
  • 状态:使用形容词或状态描述,例如"空闲"、"忙碌"、"已完成"
  • 保持一致:在整个模型中使用统一的命名风格

2. 适当的抽象层次

  • 顶层视图:3-7 个主要元素
  • 中层视图:5-15 个元素
  • 避免在单个视图中放置过多元素(超过 20 个)
  • 使用子视图来组织复杂的逻辑

3. 清晰的布局

  • 使用网格对齐功能保持整齐
  • 遵循从左到右、从上到下的流程方向
  • 避免连线交叉,必要时使用中间节点
  • 使用自动布局功能快速整理

4. 合理使用连线

  • 确保每个过程至少有一个输入(Instrument 或 Agent)
  • 避免过程之间直接连线(除了 Invocation)
  • 使用状态来表达对象的变化
  • 为连线添加标签说明特殊关系

5. 文档和注释

  • 为每个节点添加描述信息
  • 在属性面板中记录设计决策
  • 使用注释节点添加额外说明
  • 定期进行合规性检查

实战示例:空中任务总控行为模型

本示例源自项目库中的“空中任务总控行为模型”,用于协调战斗机在巡逻、交战、规避和返航之间的行为切换。

场景描述

当任务被激活后,飞机首先进入空中巡逻流程;若雷达发现目标则评估交战条件并发起打击; 当探测到威胁或油量不足时,会切换到规避或返回基地,以保证飞机安全并完成任务。

建模步骤

步骤 1:识别核心对象

  • 通用任务执行条件:汇聚“油量充足”“健康良好”“任务未取消”等基础状态,为所有任务提供入口。
  • 交战任务执行条件:在通用条件基础上要求“目标存活”和“弹药未耗尽”,控制是否可以继续攻击。
  • 规避任务执行条件:当“威胁存在”时构成规避触发器。
  • 目标发现 / 威胁发现:感知对象,用于驱动交战或规避流程。
  • 目标已被摧毁、油量过低:决定后续流程,例如退出交战或转入返航。

步骤 2:识别关键过程

  • 空中巡逻:包含“获取下一个巡逻点”“飞向航点”等子过程,保持空域覆盖。
  • 执行交战:由“根据目标选择最佳武器”“机动以进入射程”“武器开火”等过程组成,直到“目标已被摧毁”。
  • 规避威胁:先“计算规避机动”,根据需要“执行规避机动”并“释放干扰弹/箔条”。
  • 返回基地:根据情况“计算飞往最近基地的航线”,执行“飞往基地”,并按油量选择“紧急降落”或“正常降落”。

步骤 3:定义状态与条件

  • 到达巡逻点、目标在武器射程内:作为过程结果的状态对象,用于判断是否进入下一步。
  • 有对抗措施可用:在规避流程中充当 Instrument,控制是否可以释放干扰弹。
  • 威胁存在、任务被激活:作为事件对象,通过 Event 或 Invocation Link 驱动流程转换。

步骤 4:组织多视图

  • 顶层视图“飞机任务总控”聚合巡逻、交战、规避、返航等主流程。
  • 子视图“1.4 空中巡逻”“1.5 执行交战”等分别展开内部步骤,使复杂逻辑分层呈现。
  • 条件类对象放在专门视图(如“1.1 通用任务执行条件”),便于复用和维护。
空中任务总控行为模型示意

空中任务总控行为模型的 OPM 示意

常见错误和解决方案

错误 1:过程没有输入

问题:过程节点没有任何 Instrument 或 Agent 连线。

解决:添加执行该过程所需的对象或代理。

错误 2:对象直接连接对象

问题:两个对象之间直接连线(非聚合或泛化)。

解决:使用过程作为中介,表达对象之间的转换关系。

错误 3:过程直接连接过程

问题:两个过程之间使用了错误的连线类型。

解决:使用 Invocation Link 或通过对象/状态间接连接。

错误 4:状态孤立存在

问题:状态节点没有附属于任何对象。

解决:将状态作为对象的子节点或使用状态转换连线。

合规性检查: 使用工具栏中的"合规性检查"按钮,自动发现模型中的错误和警告。