Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 工业软件 / Industrial Software

基础与架构 / Foundations & Architecture

1. 工业软件基础与架构 / Industrial Software Fundamentals and Architecture

2. 工业软件概述 - 认识现代制造业的"大脑" / Industrial Software as the Brain of Modern Manufacturing

3. CAD 计算机辅助设计 - 工业设计的起点 / Computer-Aided Design as the Starting Point of Industrial Design

4. CAE 计算机辅助工程 - 工业仿真的核心 / Computer-Aided Engineering as the Core of Industrial Simulation

5. 前处理与后处理 - CAE 仿真的两端 / Pre-Processing and Post-Processing in CAE Simulation

6. 求解器基础 - CAE 软件的"引擎" / Solvers as the Computational Engine of CAE Software

7. 主流工业软件介绍 - 江湖门派一览 / An Overview of Major Industrial Software Platforms

8. 工业软件文件格式 - 数据流转的"通行证" / Industrial Software File Formats for Data Interoperability

9. 技术栈与开发语言 - 工业软件开发的技术基础 / Technology Stacks and Programming Languages for Industrial Software

10. 软件架构详解 - 工业软件的"骨骼" / Software Architecture as the Skeleton of Industrial Applications

11. CAE 前处理-求解流水线 — 架构设想 / An Architectural Design for a CAE Preprocessing-to-Solver Pipeline

12. 基于 OCC、VTK、Gmsh 与 CalculiX 的前处理到求解闭环程序初步架构设想 / A Preliminary FEA Architecture with OCC, VTK, Gmsh, and CalculiX

本页目录

工业软件基础与架构 / Industrial Software Fundamentals and Architecture ​

本模块先回答“工业软件解决什么问题”,再沿数据流拆解 CAD/CAE 平台,而不是从界面或某个商业产品入手。

基础架构的核心问题是如何让同一份工程语义安全地穿过多个表示。设计人员操作几何和参数,网格器生成离散拓扑,求解器消费矩阵或控制体,后处理读取场数据;如果模块只交换裸数组而没有单位、坐标系、实体身份和版本,错误就会在边界处悄悄扩散。

1. 领域模型是架构起点 ​

工业软件首先描述领域对象,而不是按钮和数据库表。

典型对象包括:

  • 几何体与拓扑实体;
  • 网格节点、单元和集合;
  • 材料与属性;
  • 载荷、约束和工况;
  • 分析步和求解配置;
  • 场变量和历史结果;
  • 文档版本和派生缓存。

每种对象需要定义身份、所有权、生命周期和不变量。

text
Domain Object
├─ stable identity
├─ semantic attributes
├─ ownership
├─ revision
├─ validation rules
└─ references to other objects
1
2
3
4
5
6
7

如果对象只有数组下标作为身份,插入、删除和重排后引用会失效。 稳定 ID 用于跨模块、保存、撤销和后台任务关联。

2. 源数据与派生数据 ​

源数据表达用户或外部系统确认的事实。 派生数据可以从源数据和算法重新生成。

常见派生数据包括:

  • 空间索引;
  • 邻接表;
  • 网格质量指标;
  • 求解矩阵;
  • 后处理统计;
  • 渲染 Buffer;
  • 缩略图;
  • 搜索索引。
text
source revision
  -> algorithm version + parameters
  -> derived artifact
1
2
3

派生对象必须记录输入版本。 上游变化后,应失效或重新生成,不能继续冒充当前状态。

缓存丢失不应破坏工程文件。 如果一个对象无法重建,它就不只是缓存,需要进入正式数据模型。

3. 单位、坐标系与精度 ​

数值缺少单位和坐标系时没有完整工程含义。

字段至少需要:

  • 物理量类型;
  • 单位;
  • 坐标系;
  • 分量顺序;
  • 标量精度;
  • 位置;
  • 时间或分析步。

单位转换应发生在明确边界,并记录来源。 不能由界面显示字符串暗示内部单位。

局部坐标系需要原点、基向量和手性。 转换前要检查基向量是否有效、正交和可逆。

浮点比较使用领域容差。 容差不能在各模块中散落硬编码。

4. 文档与事务 ​

Document 是工程状态的权威所有者。 View 只展示状态并发送用户意图。

text
User Intent
  -> Command validation
  -> transactional model change
  -> revision increment
  -> change notification
  -> derived views rebuild
1
2
3
4
5
6

Command 封装一次可理解的业务操作。 它保存执行和撤销所需的数据,而不是直接保存临时 UI 对象。

事务保证修改全部成功或完全不生效。 导入或参数化建模失败时,不能留下半个 Part 或部分集合。

Dirty 状态绑定具体 Document revision。 后台保存旧 revision 成功,不能清除用户后续编辑产生的 dirty。

5. 文件读取 ​

读取流程应先构造候选文档,成功后再切换当前文档。

text
open file
  -> bounded parse
  -> schema migration
  -> semantic validation
  -> build candidate Document
  -> commit as current Document
1
2
3
4
5
6

解析器防御:

  • 超大数量;
  • 整数溢出;
  • 越界索引;
  • 循环引用;
  • 过深递归;
  • 压缩炸弹;
  • 非法编码;
  • 截断数据。

错误应包含文件位置、对象 ID、字段和原因。 只返回“打开失败”会让用户和开发者都无法行动。

6. 文件保存 ​

可靠保存使用临时文件和原子替换。

text
serialize revision N
  -> temporary file
  -> flush and validate
  -> atomic replace
  -> confirm revision N saved
1
2
3
4
5

磁盘写满、权限失败或进程崩溃时,旧文件应保持可用。

格式需要 Schema 版本和迁移策略。 未知扩展数据应按协议保留或明确拒绝,不能静默丢失。

7. 长任务架构 ​

导入、网格、求解和结果处理必须离开 GUI 主线程。

任务输入在启动时形成不可变快照,并携带 Document ID 和 revision。

text
submit task(revision N)
  -> queued
  -> running
  -> progress / checkpoint
  -> candidate result
  -> revision check
  -> commit or reject
1
2
3
4
5
6
7

任务状态包括排队、运行、取消中、成功、失败和已取消。

取消是协作式协议。 任务在安全点检查请求并释放资源,不能粗暴终止线程。

关闭文档时先禁止新任务,再取消、等待和销毁。 第三方代码仍在运行时卸载模块会产生悬空代码引用。

8. GUI 与领域模型 ​

GUI 控件不是领域数据所有者。 属性面板编辑的是 Command 草稿,确认后才进入 Document 事务。

Model/View 适合大表格和树。 View 通过索引访问 Model,不能复制百万行到独立 Widget 对象。

Selection 应使用稳定领域 ID。 排序、过滤或模型重置后,临时行号不能继续代表同一实体。

后台结果通过队列回到 GUI 线程提交。 Worker 不能直接访问 QWidget 或渲染 Context。

9. 渲染资源 ​

Scene 和 GPU 资源是 Document 的派生表示。

text
Document revision
  -> Scene generation
  -> CPU render data
  -> GPU buffers and textures
  -> frame
1
2
3
4
5

后台生成完成时检查 Scene generation。 旧场景结果不能覆盖用户已经切换的新文档或新显示模式。

GPU 资源通常必须在拥有 Context 的线程创建和释放。 关闭顺序需要先停止上传和绘制,再释放 Buffer,最后销毁 Context。

设备丢失后应能从 Document 重建场景。

10. 插件边界 ​

插件适合独立格式、算法、求解器和后处理能力。 宿主与插件之间需要稳定接口和版本协商。

边界必须说明:

  • ABI 和调用约定;
  • 对象所有权;
  • 字符串和容器编码;
  • 错误传播;
  • 线程与回调;
  • 注册和卸载;
  • 权限和隔离;
  • 项目私有数据迁移。

领域数据由宿主持有。 插件卸载后不能留下函数指针、虚对象或活动任务。

11. Verification 与 Validation ​

Verification 检查软件是否正确实现模型和算法。 Validation 检查模型是否代表真实问题。

Verification 证据包括:

  • 单元与属性测试;
  • 解析解和制造解;
  • 网格收敛;
  • 守恒与残差;
  • 串并行对照;
  • 可信软件比较;
  • Checkpoint 重启一致性。

Validation 需要实验、现场数据、适用域和不确定性。 求解器报告收敛不能替代 Validation。

12. 性能与规模 ​

性能从数据流和端到端目标分析。

需要分项测量:

  • 文件解析;
  • 几何与网格;
  • 组装与求解;
  • 结果读取;
  • CPU/GPU 数据上传;
  • 交互帧时间;
  • 保存与恢复;
  • 峰值内存。

减少数据移动通常比微调少量算术指令更稳定。 局部加速必须回到完整工作流验证。

13. 测试分层 ​

基础架构应具备:

  1. 领域规则单元测试;
  2. 文件格式往返测试;
  3. 坏文件与边界测试;
  4. 文档事务和撤销测试;
  5. 任务取消和关闭测试;
  6. 插件兼容测试;
  7. 数值 Verification;
  8. 大规模性能基准;
  9. 部署升级与回滚测试;
  10. 真实工程端到端测试。

测试产物记录软件、数据和环境版本。

文章地图 ​

  1. 什么是工业软件
  2. CAD 与几何建模基础
  3. CAE 与仿真基础
  4. 前处理与后处理
  5. 求解器基础
  6. 主流工业软件与产品边界
  7. 几何、网格与结果文件格式
  8. 工业软件技术栈
  9. 工业软件总体架构
  10. 课程项目架构设计
  11. 基础 FEA 软件架构

核心数据链 ​

text
几何拓扑
  → 网格与集合
  → 材料 / 属性 / 载荷 / 约束
  → 求解输入与运行状态
  → 节点场 / 单元场 / 历史曲线
  → 可视化对象与报告
1
2
3
4
5
6

每个环节都要同时考虑单位、坐标系、标识稳定性、版本兼容和错误诊断。工业软件的大量复杂度来自数据语义跨模块流动,而不只是数值算法本身。

数据对象与派生关系 ​

text
参数与几何拓扑
   -> 网格策略 -> Mesh revision
   -> 工况映射 -> Analysis Model revision
   -> 求解输入 -> Result revision
   -> 表示缓存 -> Scene generation
1
2
3
4
5

箭头后的对象通常是派生数据。上游变化后,下游不能继续被当作最新结果:几何面被删除时,绑定其上的压力载荷需要报告悬空引用;网格变化时,旧节点场不能按数组下标直接套用;模型已经编辑到 revision 8 时,后台 revision 7 的求解结果不能覆盖当前文档。显式版本和稳定领域 ID 是正确提交的基础。

模块边界应传递语义 ​

文件格式模块负责语法、版本迁移和诊断,不应决定求解流程。文档模型拥有工程状态和撤销事务,视图只观察并发出用户意图。网格与求解 Kernel 适合使用紧凑 POD 数据,不应为百万节点创建 QObject。后处理维护字段位置、分量、精度和时间步,而不是只保存一块无类型浮点数组。

长任务通过任务服务或 Worker 执行,输入应在启动时形成不可变快照。取消是协作协议:任务在安全点检查停止请求、释放临时资源并报告终态。强行终止线程可能破坏文件、锁和第三方库状态。

从原型走向产品 ​

原型可以把导入、计算和显示写在一个函数中,产品则需要应对坏文件、版本升级、超大模型、插件异常、磁盘不足和设备丢失。保存操作应先写临时文件、刷新并原子替换,失败时保留旧文件和 dirty 状态;加载操作应先校验并建立新文档,成功后再替换当前文档。

架构评审时应沿一条真实工作流追踪对象出生、所有权、版本和失败恢复,而不是只检查类图是否分层。能够回答“这个对象何时失效、谁能修改、后台结果如何提交”,才说明边界真正可执行。

完成标准 ​

  • 能解释 CAD、CAE、CAM、PLM 的职责边界;
  • 能描述一次仿真的前处理—求解—后处理链路;
  • 能区分几何、网格、模型、工况和结果数据;
  • 能为模块选择稳定的数据接口和文件格式;
  • 能画出桌面端、服务层、任务系统、求解器和存储的边界。

完成标准还包括:能为一次失败导入或取消求解描述恢复路径,能区分源数据和缓存,能说明 V&V 证据如何关联到软件版本与输入模型。

最后更新于:

Pager
上一篇← 工业软件 / Industrial Software
下一篇2. 工业软件概述 - 认识现代制造业的"大脑" / Industrial Software as the Brain of Modern Manufacturing

持续记录,持续成长

Copyright © Tidenflow