IBR 动态建模与仿真
系统边界与模型表示
C1-01 · 讲解 + 仿真 + 练习 · 建议 60 分钟
先确定保留的物理与研究目标,再写模型方程。
学习目标
- 区分状态、输入、输出与代数变量。
- 明确模型边界与研究目标。
从结构到模型
先确定问题和端口
逆变器型资源通过受控变流器连接电网。模型边界可以设在变流器平均电压端、滤波电容端、连接点(PoC),或整个场站母线。电容端测得的功率与 PoC 功率不同,因为两者之间的支路会储能和消耗功率。
本课程从这条链路开始:变流器 → L₁ → 电容 C → L₂ → PoC → 电网阻抗 → 无穷大母线。无穷大母线给定电压幅值和频率;直流供电理想化。正 P、Q 表示从声明的测量端口向网络注入。控制器接收指令和测量,并不能直接指定所有电气状态。
同一设备的三种表示
| 表示 | 保留内容 | 可研究的问题 |
|---|---|---|
| 开关模型 | 具体开关动作与对应的电气变化 | 某个开关策略产生多大的纹波? |
| 平均 dq 模型 | 平均电压指令、物理电路和控制器动态 | 电流环如何与 LCL 动态相互作用? |
| 正序 / 低频模型 | 选定的包络、同步和功率动态 | 小幅功率指令如何影响同步? |
模型表示与控制类别是两个独立选择。GFL 可以连接显式 LCL 电路,也可以用理想电流执行环节表示。低阶 GFM 电压源可以省略内部电压环和电流环;省略之后,模型能够回答的问题也改变了。
先写接口,再写方程
x 表示微分状态,z 表示代数网络变量,u 表示指令和电网条件,y 表示输出。网络约束必须与控制器一致求解。有储能或积分演化规律的量是状态;通过阻抗关系计算出的电流则是代数量。
分类示例:本课程 droop 实验中,x = [δ, P_f, Q_f]。PCC 电压与支路电流属于 z;P*、Q*、V_g、ω_g 属于输入。电容电压不在状态中,因此这个实验不能展示电容谐振。模块 3 会单独保留它。
第一个实验说明什么
下方四条曲线都从 PoC 总 P = 0.6 pu、Q = 0 出发,在 1 s 增加 0.03 pu 指令。保留的控制动态不同,轨迹也不同。终点接近不能证明模型可互换。每次展示结果,都应同时保留状态清单、测量端口、参数和扰动。
核心方程
\dot{x}=f(x,z,u),\qquad 0=g(x,z,u),\qquad y=h(x,z,u)仿真实验
- 运行默认比较,指出每条曲线保留了哪些动态。
- 改为电压阶跃,解释为什么这些轨迹不能检验开关纹波精度。
- 写出四行模型约定:边界、状态、输入、测量输出。
实验室 · Python 在浏览器内运行
预测 → 运行 → 检查
先预测响应,再修改参数并点击运行。初始曲线是由同一求解器生成的基准结果。首次计算需要联网加载 Python,之后无需重新下载。
正在读取基准结果…
数值检查与采样结果
低频教学模型:额定频率代数网络、理想电流 / 电压实现。50 Hz,10 kVA,400 V;PCC 初始总 P = 0.6、Q = 0;X/R = 10。τᵢ = 0.02 s,τₚ = 0.1 s,τq = 0.05 s,nq = 0.0325;GFM 源阻抗 0.00625 + j0.1 pu。未保留 LCL、内部 PI、直流动态或限流。
修改模型与复现实验
下方代码读取上方参数,但结果独立绘制。修改实验或展开模型源码,可检验自己的预测。下载实验可获得含参数、完整求解器和实验代码的单个 .py 文件;本地只需 Python 3。
case 是点击运行时的参数快照。调用 solve(case),将最终解赋给 result,即可绘制代码结果。
首次运行需联网下载 Python 环境。计算在浏览器内完成,求解器只用 Python 标准库。
准备运行。
输出将在这里显示。
Python 计算结果
查看并编辑模型源码(进阶)
源代码包含坐标变换、LCL、PLL、droop、VSM、共享 PCC 与显式模式重置。修改源码只影响下次 Python 实验;上方仿真实验继续使用原始教学方程。
检查理解
分别指出每种表示能够回答的一个问题。
继续学习:源仓库
本单元根据 PINN-IBR 本地材料整理(审阅日期 2026-10-03)。网页代码为单独编写的教学实现;以下路径对应完整模型、配置和研究案例。
Teaching/Tutorial-IBR/src/tutorial_en.texCoding/Modeling/Single-IBR-Infinite-Bus/README.md