一、Simulink / Simscape 中的三种端口体系详解
——电气端口、物理信号端口与数值信号端口的本质区别
一句话总结:
在 Simulink + Simscape 中,线不是线,端口不是端口。
不同端口代表的是不同“物理世界”,混接一定会报错。
本文用于系统性梳理 Simulink 中三类端口的本质区别、连接规则和典型模块,适合作为长期复习用的技术笔记。
一、为什么 Simulink 里要分三种端口?
如果你只用过纯 Simulink,可能会觉得:
“信号就是一根线,接上就行了。”
但一旦你进入 Simscape(物理建模),Simulink 的世界会被严格划分为 多个“物理域”:
- 电压 ≠ 一个数字
- 电流 ≠ 一个数字
- 功率守恒 ≠ 随便算
👉 端口类型的存在,是为了保证物理一致性(Physical Consistency)。
二、三种端口的总览对比
| 端口类型 | 所属世界 | 是否守恒 | 是否有单位 | 能否进 Scope |
|---|---|---|---|---|
| 电气端口(Electrical Conserving Port) | 物理建模 | ✅ | ✅ | ❌ |
| 物理信号端口(Physical Signal, PS) | 物理信号 | ❌ | ✅ | ❌ |
| 数值信号端口(Simulink Signal) | 数值计算 | ❌ | ❌ | ✅ |
三、电气端口(Electrical Conserving Port)
1️⃣ 它是什么?
真实的电气连接端口,代表一个电气节点。
- 满足 基尔霍夫电流定律
- 满足 能量守恒
- 端口本身 不携带“数值信号”
📌 本质:“物理连接点”
2️⃣ 常见模块
- Resistor(电阻)
- Capacitor(电容)
- Inductor(电感)
- Voltage Source / Current Source
- Electrical Reference(地)
- Voltage Sensor / Current Sensor(其 ± 端)
3️⃣ 端口特征
- 在 MATLAB Engine 里体现为:
LConnRConn
- 不能直接接:
- Scope
- Gain
- Sum
- PS-Simulink Converter
4️⃣ 示例
Vdc ── R ── C ── GND
这里每一根线都是 电气端口之间的连接。
四、物理信号端口(Physical Signal, PS)
1️⃣ 它是什么?
物理量的“数值表达”,但仍然属于 Simscape 世界。
- 有明确物理意义
- 有单位(V、A、N、Pa)
- 不参与守恒计算
📌 本质:“带单位的物理量信号”
2️⃣ 它从哪里来?
通常来自 传感器模块:
- Voltage Sensor → 输出电压(V)
- Current Sensor → 输出电流(A)
- Force Sensor / Torque Sensor 等
3️⃣ 常见模块
- Voltage Sensor(V 端)
- Current Sensor(I 端)
- PS-Simulink Converter(输入端)
- PS Gain / PS Sum(Simscape 内部处理)
4️⃣ 示例
[Voltage Sensor] -> Physical Signal (V)
五、数值信号端口(Simulink Signal)
1️⃣ 它是什么?
普通的 Simulink 数值信号。
- 没有物理单位
- 只是 double / array
- 用于控制、算法、显示
📌 本质:“纯数值”
2️⃣ 常见模块
- Scope
- Gain
- Sum
- PID Controller
- MATLAB Function
3️⃣ 示例
PS-Simulink Converter ──▶ Scope
六、域转换:三种端口如何“合法交互”
✅ 合法的转换路径(唯一正确方式)
Electrical Domain
↓(Sensor)
Physical Signal (PS)
↓(PS-Simulink Converter)
Simulink Signal
❌ 非法连接(必报错)
| 错误连接 | 原因 |
|---|---|
| 电气端口 → Scope | 域不匹配 |
| 电气端口 → PS-SL | 缺少传感器 |
| PS 端口 → 电气端口 | 方向错误 |
| 电气端口 → Simulink 模块 | 物理规则被破坏 |
七、以 RC 电路测量电容电压为完整示例
正确结构
Vdc ── R ── C ── GND
│
├─ Voltage Sensor (+)
└─ Voltage Sensor (−)
Voltage Sensor (V)
│
PS-Simulink Converter
│
Scope
核心原则
任何物理量想“被看到”,都必须经过:
Sensor → PS → PS-Simulink Converter
八、对自动建模 / LLM 生成 Simulink 的启示
如果你在做:
自然语言 → LLM → Simulink 模型
那么模型必须理解:
- 哪些模块是 物理模块
- 哪些是 传感器
- 哪些是 信号处理模块
- 哪些连接 绝对不能出现
否则就会生成:
❌ “画得出来,但跑不起来”的模型
九、可以写进系统 Prompt 的硬规则
1 | Rules: |
二、simulink获取某模块的路径
simulink中某个模块在库浏览器中的路径不是它真实的在simulink引擎中的路径,当我们使用.m代码或者pythpn matlab.engine去添加模块的时候,我们需要知道该模块的simulink引擎中的真实路径
方法一:使用gcb
- 找到模块所属的上一级库,比如scope所属的上一级是sink库,右键sink库,选择
打开sink库,打开后,用鼠标点击scope模块 - 回到matlab命令行,输入
gcb运行,即可看到输出的该模块的路径
方法二、使用get_param
- 把你想要知道路径的模块拖到sinmulink界面中,用鼠标点击选中它
- 回到matlab命令行,依次运行
h = get_param(gcb, 'Handle'),get_param(h, 'ReferenceBlock') - 输出的路径就是我们要的路径
知道路径,我们就可以使用add_block将模块添加到模型中,以下是一个RC电路的python代码,使用matlab.engine驱动
1 | import matlab.engine |
Author: 武丢丢
Link: http://example.com/2025/12/30/AI-Simulink%E5%AD%A6%E4%B9%A0/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.
