在这里插入图片描述

第一步:准备核心模块 (Block Library)

打开 Simulink,新建一个空白模型,从库浏览器(Library Browser)中找到并拖入以下模块:

  1. Battery (Table-Based):核心电池模型(路径:Simscape > Battery)。
  2. Controlled Current Source:受控电流源,作为负载(路径:Simscape > Foundation Library > Electrical > Electrical Sources)。
  3. Solver Configuration:物理网络求解器,必选(路径:Simscape > Utilities)。
  4. Electrical Reference:电学参考地,必选(路径:Simscape > Foundation Library > Electrical > Electrical Elements)。
  5. PS-Simulink Converter:物理信号转 Simulink 信号(路径:Simscape > Utilities)。
  6. Simulink-PS Converter:Simulink 信号转物理信号(路径:Simscape > Utilities)。
  7. Constant & Scope:常规数字源和示波器(路径:Simulink > Sources/Sinks)。

第二步:关键参数设置 (Parameters)

双击模块进入设置界面,按照任务要求修改:

  1. 电池设置 (Battery)
  • Nominal voltage, Vnom: 输入 800 (单位 V)。
  • Battery charge capacity: 从 Infinite 改为 Finite
  • Ampere-hour rating: 输入 100 (单位 A*hr)。
  • Expose charge measurement port: 改为 Yes(这会在图标上生成测量 SOC 的小三角端口)。
  1. 负载输入 (Constant)
  • Constant value: 输入 50(表示放电电流为 50A,用于测试)。

第三步:物理电路连接 (Power Circuit)

这是电池和负载的“真实”接线,线缆通常在 Simulink 里显示为蓝色/黑色深色线

  1. 正极连接:将 Battery+ 端连接到 Controlled Current Source+ 端。
  2. 负极连接:将 Battery- 端连接到 Controlled Current Source- 端。
  3. 接地:将 Electrical Reference 连接到负极这条回路上。
  4. 求解器配置:将 Solver Configuration 连接到电路中的任意位置(它只需要挂在电路网络上即可)。

第四步:控制与测量连接 (Signal Circuit)

这是信号流,负责控制放电大小和读出 SOC,这里是之前遇到困难的地方:

  1. 控制负载放电
  • 连接路径:Constant →\rightarrow Simulink-PS Converter →\rightarrow Controlled Current Source 的控制端口(通常在侧面)。
  1. 提取 SOC 数据(核心修正步)
  • 任务书要求提取 SOC,但你选用的 Table-Based Battery 导出的是物理信号,不是数字总线。
  • 正确连线:将 Battery 上的测量端口(那个带小三角的输出口)直接连到 PS-Simulink Converter
  • 然后再将 PS-Simulink Converter 的输出端连到 Scope
  • 注:这种接法直接输出的就是 SOC 的百分比数值(0 到 1 之间),不需要用 Bus Selector。

第五步:仿真与验证 (Run & Verify)

  1. 设置仿真时间:在 Simulink 顶部的运行时间框中,将 10.0 改为 3600(模拟放电一小时)。
  2. 开始仿真:点击绿色的 Run 按钮。
  3. 观察波形
  • 双击打开 Scope
  • 预期结果:你应该能看到一条从 1(代表 100% 电量)开始往下降的斜线。
  • 如果一小时(3600秒)放电 50A,对于 100Ah 的电池,电量应该刚好掉到 0.5(50%)。

学习要点总结(应付检查/考试):

  • 物理域 vs 信号域:Battery 到电流源的线是物理线(Simscape),Constant 到转换器的线是信号线(Simulink)。
  • 为什么不用 Bus Selector? 因为现代 Simscape 电池模块的测量端口直接输出 SOC 物理信号,而 Bus Selector 只能处理传统的打包总线信号。
  • 求解器(Solver)的作用:它是所有物理建模的“心脏”,不接它模型就无法进行数学计算。

在这里插入图片描述

  1. 转换器使用精准
  • 你成功在 Constant (50) 后面加了 Simulink-PS Converter(黑线转棕线),把数字信号变成了控制电流源的物理信号。
  • 你成功在电池 m 端口后面加了 PS-Simulink Converter(棕线转黑线),把物理测量的 SOC 信号成功翻译并接入了 Scope(示波器)。
  1. 物理网络闭环:蓝色的物理线连接正确,且 f(x)=0(Solver 求解器)和接地模块(Electrical Reference)都已经正确挂载到了回路上。

💡 唯一需要调整的物理小细节:充放电方向

如果你现在直接点击运行,你会发现 Scope 里的 SOC 可能不会下降,反而会上升(或者报错),原因是电流方向反了,目前是在充电

原因分析:
你看一下中间那个 Controlled Current Source(受控电流源)模块,它里面的箭头是向上的。在当前的接线图下(上方是正极),给它输入正数 50,意味着电流会顺着箭头从下往上流——也就是把电流强行灌入电池的正极。

如何调整为“放电”状态(二选一即可):

  • 方法一(最简单): 双击最左边的 Constant 模块,把里面的 50 改成 -50。输入负电流代表反向流动,也就是从电池往外抽电。
  • 方法二(改模型): 选中 Controlled Current Source 模块,按下快捷键 Ctrl + I(或者在顶部菜单 Format 中选择 Flip 上下翻转),让它里面的箭头朝下指,这样正数 50 就是放电了。

调整完这个小细节后,记得把顶部菜单栏里的仿真时间(目前没截全,通常默认是 10.0)改成 3600,然后点击绿色的运行按钮(Run)。双击打开右侧的 Scope,你就能看到一条完美的 SOC 下降曲线了!恭喜你完成了这项任务!


在 Simulink/Simscape 中搭建物理模型,本质上是在跨越两个截然不同的“世界”。理解了这两个世界,以后无论搭电机、液压还是热力学模型,你都不会再连错线。

1. 核心大前提:Simulink 的“两个世界”

在你的模型中,存在两种完全不同的运行机制:

  • 物理世界 (Simscape 物理域)

  • 特征:代表真实的物理组件(如电池、导线、电阻)。连线通常是蓝色或深色的双向线。

  • 原理:它遵循能量守恒基尔霍夫定律(KCL/KVL)。在物理连线中,没有绝对的“输入”或“输出”方向,电流和电压是相互影响的。你把电池和电流源连在一起,软件会在底层自动列出这个闭合电路的微分代数方程组 (DAE)。

  • 数学世界 (Simulink 信号域)

  • 特征:代表纯粹的数学计算、逻辑控制和数据监测。连线带有明显的箭头,通常是黑色或红色的单向线。

  • 原理:它传递的是纯粹的数值数组(例如数字 50)。信号具有明确的方向性,从源头(如 Constant)单向流向目标(如 Scope),不存在反向影响。

2. 电池模块 (Table-Based) 的内部数学原理

你选用的 Battery (Table-Based) 并不是一个简单的电源,而是一个基于实验数据查表的动态模型。它的核心输出——SOC(State of Charge,荷电状态)——是如何算出来的呢?

原理是安时积分法 (Coulomb Counting)。模型内部会实时监测流经电池的电流大小和方向,并通过对时间进行积分来更新当前的电量:

SOC(t)=SOC(t0)−13600⋅Cnom∫t0ti(τ)dτSOC(t) = SOC(t_0) - \frac{1}{3600 \cdot C_{nom}} \int_{t_0}^{t} i(\tau) d\tauSOC(t)=SOC(t0)3600Cnom1t0ti(τ)dτ

  • SOC(t0)SOC(t_0)SOC(t0) 是电池的初始电量(默认通常为 1,即 100%)。
  • CnomC_{nom}Cnom 就是你设置的 100 Ah 额定容量。
  • i(τ)i(\tau)i(τ) 是实时电流(放电为正,充电为负)。
  • 分母乘以 360036003600 是因为电流单位是安培 (A=C/s),而容量单位是安时 (Ah),需要进行秒到小时的时间单位换算。

当你勾选了 Expose charge measurement port,模型就会把这个实时计算出的 SOC(t)SOC(t)SOC(t) 作为一种物理状态量(就像真实世界里的温度、压力一样)通过那个小三角端口输出。

3. 为什么必须用 Converter(翻译官)?

这是很多初学者最困惑的地方。为什么不能把代表数字 50 的 Constant 直接连到电流源?为什么电池的 SOC 不能直接连到 Scope?

  • Simulink-PS Converter (数字 →\rightarrow 物理)
    你的 Constant 输出了一个纯数学概念 50。但是,物理世界里的“受控电流源”听不懂什么是纯数学的 50。它需要一个物理控制指令(比如某种模拟控制电压)。这个转换器的作用,就是把数学维度的数字 50,强制赋给一个物理信号,告诉电流源:“请在物理网络中强行抽取 50A 的电流”。
  • PS-Simulink Converter (物理 →\rightarrow 数字)
    同样,电池的 m 端口输出的 SOC,是一个附带着物理属性的“状态量”。而 Scope(示波器)是一个纯数字软件,只能绘制数学数组。这个转换器的作用相当于一个传感器(A/D 转换),它读取物理域的真实状态,剥离掉它的物理属性,变成一个纯数字(如 0.85),然后丢给示波器去画图。

4. 求解器 (Solver Configuration) 与接地的作用

  • Solver Configuration:因为蓝色的物理网络需要联合求解基尔霍夫方程组,而普通的 Simulink 步长求解器无法处理这种复杂的代数环。这个模块就是为这段物理电路专门配备的“数学引擎”,没有它,电路就无法进行运算。
  • Electrical Reference (接地):任何电压都是相对的。接地模块为整个物理电路定义了 0V 的参考电位,使得网络中的所有节点电压都可以被唯一计算出来。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐