Commit 22002153 authored by fenghen777's avatar fenghen777

docs: 添加仿真数据变量命名与处理规则文档

parent 51d18ad1
# 仿真数据变量命名与处理规则
## 1. 后端数据生成(OpenModelica 默认规则)
后端使用 **OpenModelica 编译器默认的 CSV 导出**,前端 `exportToModelica()` 未声明 `output` 变量,因此 OpenModelica 导出所有非 `protected` 变量。
### 变量命名格式
| 格式 | 含义 | 示例 |
|------|------|------|
| `实例名.v` | 组件级压降 | `resistor_1.v` |
| `实例名.i` | 组件级电流 | `resistor_1.i` |
| `实例名.p.v` | 正极端口电位 | `ground_1.p.v` |
| `实例名.p.i` | 正极端口电流 | `ground_1.p.i` |
| `实例名.n.v` | 负极端口电位 | `resistor_1.n.v` |
| `实例名.n.i` | 负极端口电流 | `resistor_1.n.i` |
| `time` | 仿真时间轴 | `time` |
### 实例名生成规则
`modelicaExporter.js``exportToModelica()` 决定:
1. 取映射表的 `modelName` 首字母小写作为 `baseName`(如 `Resistor``resistor`
2.`baseName` 分组计数,附加序号:`resistor_1`, `resistor_2`, ...
3. 无映射时用符号 label 转 camelCase + 序号
### 各元件输出变量
| 元件 | 端口数 | 组件级变量 | 端口级变量 |
|------|--------|-----------|-----------|
| Resistor | 双端口 (p, n) | `.v` `.i` | `.p.v` `.p.i` `.n.v` `.n.i` |
| Capacitor | 双端口 (p, n) | `.v` `.i` | `.p.v` `.p.i` `.n.v` `.n.i` |
| VoltageSource | 双端口 (p, n) | `.v` `.i` | `.p.v` `.p.i` `.n.v` `.n.i` |
| IdealSwitch | 双端口 (p, n) | `.v` `.i` | `.p.v` `.p.i` `.n.v` `.n.i` |
| Ground | 单端口 (p) | 无 | `.p.v` `.p.i` |
> **注意**:OpenModelica 的 alias elimination 优化可能会移除冗余变量(如 `n.v == p.v` 时只保留一个)。
---
## 2. 前端数据传递(无修改)
数据流: `后端 CSV``api.js``useProjectStore``SimResultsModal`
- 后端响应字段:`resp.data.csv_data`(原始 CSV 字符串)
- Store 保存:`csvData: resp.data?.csv_data || ''`
- 前端 **不修改数据值**,仅解析 CSV 为列式数组
---
## 3. 前端显示处理
### 3.1 变量过滤
`SimResultsModal.jsx` 第 100 行,隐藏包含 `.p.``.n.` 的中间端口变量:
```js
.filter((v, i) => i !== xIdx && !/\.\b[pn]\b\./.test(v.name))
```
- ✅ 保留:`resistor_1.v`, `resistor_1.i`(组件级)
- ❌ 隐藏:`resistor_1.p.v`, `resistor_1.n.i`(端口级)
- ⚠️ 例外:`ground_1.p.i` 仍然显示(Ground 无组件级变量,且正则需要两段 `.p.` 才匹配)
### 3.2 中文翻译 (`toChinese()`)
变量名自动翻译为中文显示,原始数据不变。
**组件名映射** (`COMP_CN`):
| 英文 | 中文 |
|------|------|
| `resistor` | 电阻 |
| `capacitor` | 电容 |
| `inductor` | 电感 |
| `voltagesource` | 电压源 |
| `currentsource` | 电流源 |
| `ground` | 接地 |
| `diode` | 二极管 |
| `switch` / `idealswitch` | 开关 |
| `transformer` | 变压器 |
| `opamp` | 运放 |
**物理量映射** (`QTY_CN`):
| 缩写 | 中文 |
|------|------|
| `v` | 电压(V) |
| `i` | 电流(A) |
**端口映射** (`PORT_CN`):
| 缩写 | 中文 |
|------|------|
| `p` | 正极 |
| `n` | 负极 |
### 3.3 翻译示例
| 原始变量名 | 显示名称 |
|-----------|---------|
| `time` | 时间(s) |
| `resistor_1.v` | 电阻1 电压(V) |
| `resistor_1.i` | 电阻1 电流(A) |
| `ground_1.p.v` | 接地1 正极电压(V) |
| `ground_1.p.i` | 接地1 正极电流(A) |
| `idealSwitch_1.v` | idealSwitch1 电压(V) |
| `voltageSource_1.i` | 电压源1 电流(A) |
| `der(capacitor_1.v)` | d/dt 电容1 电压(V) |
> `idealSwitch` 未命中 `COMP_CN`(key 为 `switch` 而非 `idealswitch`),故保留英文原名。
---
## 4. 涉及源文件
| 文件 | 职责 |
|------|------|
| `src/utils/modelicaExporter.js` | 生成 .mo 模型,决定实例名 |
| `src/utils/modelMapping.js` | 符号类型 → Modelica 模型/端口映射 |
| `src/hooks/useProjectStore.js` | 接收后端 CSV 并存储 |
| `src/components/SimResults/SimResultsModal.jsx` | CSV 解析、变量过滤、中文翻译、图表渲染 |
| `src/components/SimResults/LiveChart.jsx` | 实时数据同样使用 `toChinese()` 翻译 |
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment