feat: integrate AMESim media models and editor UI
This commit is contained in:
1 parent
3e4f466114
commit
e7177ab03e
181 files changed
+7042
-25270
No files matched your search
+68
-1
@@ -5,6 +5,8 @@ System XML v2 是 ReactFlow 建模前端与 `app.simulation` 仿真层之间的
|
||||
## 基本约定
|
||||
|
||||
- 根元素 `System` 的 `schemaVersion` 固定为 `2`,`unitSystem` 固定为 `SI`。
|
||||
- 新导出的介质引用语义使用可选根属性
|
||||
`mediumReferenceVersion="1"`。缺少该属性的文档按旧版介质索引规则读取。
|
||||
- 子元素顺序固定为 `Simulation`、`Components`、`Connections`。
|
||||
- `Component.id` 是稳定实例 ID,`name` 是用户可编辑名称。
|
||||
- 参数以 SI 基准值保存;显示单位不改变 XML 中的数值含义。
|
||||
@@ -16,7 +18,7 @@ System XML v2 是 ReactFlow 建模前端与 `app.simulation` 仿真层之间的
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<System name="transfer-system" schemaVersion="2" unitSystem="SI">
|
||||
<System name="transfer-system" schemaVersion="2" unitSystem="SI" mediumReferenceVersion="1">
|
||||
<Simulation tStart="0" tStop="2" step="0.1" maxStep="0.005" method="BDF"/>
|
||||
<Components>
|
||||
<Component id="cylinder_1" name="cylinder_1" type="cylinder" componentType="cylinder" x="90" y="180" rotation="0" mirrored="false">
|
||||
@@ -80,6 +82,71 @@ System XML v2 是 ReactFlow 建模前端与 `app.simulation` 仿真层之间的
|
||||
|
||||
XSD 负责结构和基础枚举校验,端口注册、拓扑完整性与可求解性由模型校验层负责。
|
||||
|
||||
### AMESim 介质定义与索引兼容
|
||||
|
||||
AMESim 介质定义继续使用普通的零端口 `Component`,不增加新的 XML
|
||||
层级。其介质索引和物性选择仍以数值 `Parameter` 保存,例如:
|
||||
|
||||
```xml
|
||||
<Component id="air_1" name="Air 1"
|
||||
type="amesim_ideal_air_medium"
|
||||
componentType="amesim_ideal_air_medium"
|
||||
x="40" y="40">
|
||||
<Parameter name="gi" value="1"/>
|
||||
<Parameter name="property_model" value="0"/>
|
||||
</Component>
|
||||
```
|
||||
|
||||
氦气 Peng-Robinson 定义使用相同结构:
|
||||
|
||||
```xml
|
||||
<Component id="helium_1" name="Helium 1"
|
||||
type="amesim_helium_medium"
|
||||
componentType="amesim_helium_medium"
|
||||
x="40" y="140">
|
||||
<Parameter name="gi" value="2"/>
|
||||
<Parameter name="property_model" value="0"/>
|
||||
</Component>
|
||||
```
|
||||
|
||||
这里的 `property_model=0` 是氦气组件内部的 Peng-Robinson 选项编号;编译时
|
||||
同时保留源 AMESim `fluidType=12/eosType=6` 元数据,不能把两个编号体系混用。
|
||||
|
||||
气动组件的 `gi=0` 表示内置的空气理想气体;正整数引用画布中的显式介质
|
||||
定义。介质定义的 `property_model` 是该介质内部的物性计算模型编号,当前
|
||||
空气定义中的 `0` 表示理想气体。界面中的 `gi` 下拉栏只显示索引数值,
|
||||
`property_model` 下拉栏的名称和可选值则来自组件目录。
|
||||
|
||||
解析旧文档时,只有同时满足以下条件才执行旧 `gi` 兼容转换:
|
||||
|
||||
- 根元素没有 `mediumReferenceVersion`;
|
||||
- 所有组件类型均可由当前注册表识别;
|
||||
- 画布中不存在目录角色为 `amesimGasMediumDefinition` 的组件。
|
||||
|
||||
在这种可证明没有显式介质定义的旧文档中,缺失的 `gi` 会补为 `0`,旧
|
||||
`gi=1` 会映射为 `0`,并返回语义层警告。带有
|
||||
`mediumReferenceVersion="1"` 的新文档不会重解释正整数索引。
|
||||
|
||||
在物性计算模型下拉接口加入之前保存的介质定义可能只有 `gi`。无论是否存在
|
||||
`mediumReferenceVersion`,解析器都会为缺失的 `property_model` 注入组件目录
|
||||
声明的默认值,并返回 `AMESIM_GAS_PROPERTY_MODEL_DEFAULTED` 警告;重新保存后
|
||||
该参数会显式写入 XML。
|
||||
|
||||
完成兼容转换后,解析器统一按介质引用版本 1 执行以下语义校验:
|
||||
|
||||
- 介质定义组件的 `gi` 必须是 `1..99` 的整数,且工程内不得重复。
|
||||
- 气动组件的介质引用必须是 `0..99` 的整数。
|
||||
- `gi=0` 始终引用内置空气理想气体;所有正索引必须存在对应介质定义。
|
||||
- 同一个气动连通分量内只能使用一个 `gi`,不同的独立气动网络可以选择不同
|
||||
介质。
|
||||
|
||||
相应错误码为 `AMESIM_GAS_MEDIUM_INDEX_INVALID`、
|
||||
`AMESIM_GAS_MEDIUM_INDEX_DUPLICATE`、
|
||||
`AMESIM_GAS_REFERENCE_INDEX_INVALID`、`AMESIM_GAS_REFERENCE_UNDEFINED` 和
|
||||
`AMESIM_GAS_REFERENCE_CONFLICT`。XML 解析得到的规范化工程 JSON 总是输出
|
||||
数值字段 `"mediumReferenceVersion": 1`;因此旧文档一经解析并重新保存,便
|
||||
不再依赖旧版启发式迁移。
|
||||
|
||||
## 仿真模型编译接口
|
||||
|
||||
`POST /api/reactflow/compile-model` 接收与工程保存、XML 导出相同的 ReactFlow 工程 JSON。它会执行以下操作:
|
||||
|
||||
Reference in new issue
Block a user