1. 概述

我为什么做了这个软件?

说起来也挺简单的——就是被逼的

之前做 DAB ,要优化效率,需要跑几十组参数。每次都是:打开 PLECS → 改一个参数 → 跑仿真 → 盯着波形看几秒 → 记个数 → 再改下一个参数……一整天下来,脖子酸了,眼睛花了,结果还没跑完几组。

我就想,这事儿能不能自动化?查了一圈,发现 PLECS 支持 XML-RPC 远程控制,完全可以写脚本让它自己去跑。但问题来了——写 Python 脚本的门槛,对很多做硬件的同事来说,实在不低。你得懂 XML-RPC 的接口、Optuna 的用法、怎么设早停、怎么写罚函数……这些不是每个人都想学的东西,也不该是。

所以我决定做一件事:把所有这些复杂度封装起来,变成一个填表就能用的 GUI 工具。

这就是 PlecsSuite 的起点——一个代码生成器,你在界面上勾勾选选,它帮你生成高质量的自动化脚本。

但光生成脚本还不够。仿真跑完了,数据散在几十个 CSV 文件里,你怎么看?怎么对比?怎么知道哪个参数对效率影响最大?你总不能又回到 Excel 里拉表画图吧——那不白自动化了嘛。

于是我又把数据分析整进去了:示波器级别的波形查看、2D/3D 可视化、参数敏感度分析、一键 HTML 报告生成……所有你以前要在 PLECS 和 Excel 之间切来切去干的活,现在一个软件里全搞定。

如果说前两篇教程(核心原理篇场景教程篇)教的是"手写脚本"的底层方法,那 PlecsSuite 就是你手写了几次之后,发现"这些代码能不能自动生成?"时,会爱上的一款工具。

核心工作流程

┌────────────┐     ┌──────────────┐     ┌──────────────┐     ┌────────────┐
│  配置参数   │ ──▶ │  生成脚本     │ ──▶ │  运行脚本     │ ──▶ │  分析结果   │
│  (GUI 表单) │     │  (.py 文件)   │     │  (仿真执行)   │     │  (CSV+图表) │
└────────────┘     └──────────────┘     └──────────────┘     └────────────┘

2. 主界面与三大功能区

启动 PlecsSuite 后,顶部有三个标签页:

标签页

功能

内部脚本生成器

生成 PLECS 内部脚本(.m 格式),在 PLECS 内部直接执行

外部脚本生成器

生成独立 Python 脚本(.py 格式),通过 XML-RPC 远程控制 PLECS

结果分析器

加载仿真结果 CSV,进行 2D/3D 可视化和报告生成


3. 外部脚本生成器(推荐使用)

这是 PlecsSuite 最核心的功能模块。通过 4 个子面板完成配置:

3.1 连接配置(Connection)

设置与 PLECS 的通信参数:

Server URL  : http://localhost     ← PLECS RPC 服务地址
Port        : 1080                 ← 端口号(与 PLECS Preferences 一致)
模型路径    : D:\models\xxx.plecs  ← 点击"浏览"选择 .plecs 文件

点击 "测试连接" 按钮验证 PLECS 是否可达。连接成功后,模型名会自动从文件路径中提取。

3.2 参数空间(Parameters)

定义扫描或优化的参数及取值范围。支持四种参数类型:

类型

说明

示例

Linear (Linspace)

线性等间距

L1: start=50e-6, stop=200e-6, num=10

Log (Logspace)

对数等间距,适合跨数量级参数

fsw: start=10e3, stop=200e3, num=10

Integer

整数参数(优化模式)

N_turns: min=1, max=20

List

自定义值列表

duty: 0.3, 0.4, 0.5, 0.6

参数名必须与 PLECS 模型中的变量名一致。

3.3 KPI 定义(KPIs)

定义要从仿真结果中提取的关键性能指标。两种来源:

来源 A:Outport

如果模型中用 Output Port 暴露了信号,直接指定端口索引和处理函数:

名称: efficiency
来源: Outport
索引: 0
处理函数: lambda arr: arr[-1]      ← 取稳态值

常用处理函数速查:

函数

含义

lambda arr: arr[-1]

取最后一个值(稳态值)

np.max

取最大值

np.min

取最小值

np.mean

取平均值

lambda arr: np.sqrt(np.mean(arr**2))

有效值(RMS)

来源 B:Scope (CSV)

如果信号在 Scope 中,通过导出 CSV 并执行自定义处理函数:

名称: THD
来源: Scope (CSV)
Scope 路径: Scope: MyScope
处理函数: data.iloc[:,1].iloc[-1]   ← 取 CSV 第二列最后一个值

3.4 运行配置(Run)

核心配置区域,决定生成什么类型的脚本。

扫描模式(Sweep)
  • 执行模式:选择 Serial(串行)或 Parallel(并行)

    • 串行:逐个执行,可查看实时进度

    • 并行:一次提交,PLECS 内部利用多核算力

  • 输出路径:结果 CSV 的保存位置

优化模式(Optimize)
  • 优化算法

    • Optuna_TPE(推荐):树结构 Parzen 估计器,适合 30~500 次试验

    • SKOptimize_GP:高斯过程代理模型,收敛更快但参数更多

    • Random Search:随机搜索,作为基线对比

  • 目标类型

    • Single:单个 KPI 最小化/最大化

    • Multi_WeightedSum:多个目标加权求和

    • Multi_Pareto:Pareto 多目标前沿搜索

  • 试验次数(n_trials):优化迭代总次数

  • 高级设置(可折叠)

    • 断点续传(Checkpoint):保存中间状态,中断后可恢复

    • 热启动(Hot Start):用已知好参数作为初始猜测

    • 早停(Early Stopping):连续 N 次无改善自动停止

    • 约束条件:输入 g(x) <= 0 形式的约束函数

    • 实时可视化(Live Dashboard):优化过程中实时绘制收敛曲线

波形导出模式(Export Full Waveform)

单次仿真,将 Outport 的完整时域波形导出为 CSV。

3.5 生成与运行

  1. 配置完成后点击 "生成脚本"

  2. 选择保存路径,脚本会自动附带 plecs_helper.py 到同一目录

  3. 在终端中运行生成的脚本:python 生成脚本.py

  4. 等待执行完成,CSV 结果保存到指定路径


4. 内部脚本生成器

内部脚本生成器生成的是 PLECS 内部脚本.m 文件),使用 Octave/MATLAB 语法。这些脚本在 PLECS 内部直接执行,无需 Python 环境,适合以下场景:

  • 不想安装 Python 的用户

  • PLECS 本身支持多核并行仿真时

  • 需要 Scope 示波器导出(PNG/CSV)功能

配置项

区域

说明

输出配置

结果文件夹命名、时间戳

参数扫描

扫参变量名和取值范围,和外部脚本类似

数值输出

从 Outport 提取数值,支持 RMS 转换

示波器导出

导出 Scope 内容为 CSV/PNG,支持时间范围裁剪、分辨率/尺寸设置

多核设置

启用后 PLECS 内部并行执行

生成的脚本结构

SECTION 1: CONFIGURATION     ← 路径、命名等可调配置
SECTION 2: INITIALIZATION    ← 创建文件夹、连接 PLECS
SECTION 3: MAIN LOOP         ← 循环遍历参数组合、运行仿真、提取结果
SECTION 4: CLEANUP           ← 汇总结果、写入 CSV、关闭模型

5. 结果分析器

完成仿真后,用结果分析器处理输出的 CSV 文件。

5.1 加载数据

  • 加载文件夹:加载一个目录下所有 CSV 结果文件

  • 运行记录:勾选需要分析的具体文件

  • 支持合并多次运行的结果

5.2 可视化分析

  • 2D 折线图:一个参数对多个 KPI 的趋势(如 L1 → efficiency, ripple

  • 3D 曲面图:两个参数对一个 KPI 的响应面(如 L1 × C_out → efficiency

  • Pareto 散点图:多目标优化结果中标注 Pareto 前沿

  • 参数敏感度分析:排序各参数对目标的影响程度

5.3 报告生成

  • 一键生成 HTML 报告,包含所有图表和数值表格

  • 适合团队分享和文档归档


6. 配置的保存与加载

所有配置都可以保存为 JSON 文件,方便复用:

  1. 配置完成后点击 "保存配置" → 选择路径 → 生成 .json 文件

  2. 下次使用时点击 "加载配置" → 选择之前的 JSON → 所有配置自动恢复

这一功能特别适合:

  • 同一个模型反复跑不同参数配置

  • 团队协作时共享配置模板

  • 版本管理(JSON 文件可以放入 Git 仓库追踪变更)


7. 生成的脚本文件说明

每次生成脚本后,会得到以下文件:

results/
├── 扫描_模型名_KPI名_时间戳.py      ← 主脚本
└── plecs_helper.py                    ← 自动复制的运行时依赖

plecs_helper.py 包含四个核心工具类:

类名

功能

PLECSConnector

XML-RPC 连接管理 + 仿真重试机制

OptimizationUtils

自适应罚函数 + Pareto 前沿提取

EarlyStopper

早停机制

LivePlotter

实时优化曲线可视化

生成的脚本是独立的,将整个 results/ 文件夹拷贝到任何装有 Python 的电脑上都可以直接运行。


8. 典型使用场景对照

你想做什么

用哪个标签页

关键配置

探索 L、C 对效率的影响

内部脚本生成器 / 外部脚本生成器 → Sweep

Parameters 设 Linspace, Run 选 Serial

找到使 THD 最小的参数

外部脚本生成器 → Optimize(也可用内部/外部脚本生成器的 Sweep 模式遍历最优)

选 Optuna_TPE, 单目标, minimize

同时优化效率和成本

外部脚本生成器 → Optimize

选 Multi_Pareto 或 WeightedSum

导出完整波形做 FFT

内部脚本生成器 / 外部脚本生成器 → Export

KPIs 选所有 Outport 信号

导出 Scope 波形图

内部脚本生成器 → 示波器导出

勾选 Export PNG

分析之前的扫描结果

结果分析器

加载 CSV 文件 → 选图表类型

复用之前的配置再跑一次

内部脚本生成器 / 外部脚本生成器 → 加载配置

选择 .json 文件


9. 常见问题

Q: 点击"测试连接"失败?

A: 检查三点:

  1. PLECS 是否已打开。

  2. PLECS 是否启用了 Server Mode(Preferences → General → Enable server mode)。

  3. 端口号是否正确(默认 1080,检查是否有其他程序占用)。

Q: 脚本提示 "ModelVars" 参数不存在?

A: 参数名必须与 PLECS 模型中定义的变量名完全一致(区分大小写)。可以在 PLECS 的 Model Initialization 中查看定义的所有变量。

Q: 扫描脚本的并行模式(Parallel)为什么没加速?

A: 并行模式的速度取决于你的 CPU 核心数、模型复杂度以及 PLECS 的并行授权。串行模式虽然慢但兼容性最好。

Q: 优化结果很差怎么办?

A: 常见原因和解决方法:

  • 试验次数太少:增加 n_trials(建议至少 50)

  • 参数范围太宽:缩小参数搜索空间

  • 局部最优:尝试用 Random Search 做基线,或开启热启动

  • 仿真不收敛:检查参数边界值是否导致模型不收敛,不收敛时返回惩罚值


10. 与手写脚本的关系

PlecsSuite 本质上是一个代码生成器,它所生成的代码和本教程前面两篇文章中手写的代码原理完全一致。理解底层原理后:

  • 快速入门:用 PlecsSuite 的 GUI 配置生成脚本,立即可用

  • 定制需求:参考生成出的脚本结构,手写修改以满足特殊需求

  • 学习提高:对照生成的脚本理解前两篇教程的架构设计

11. 软件界面

内部脚本生成器界面:

外部脚本生成器界面:

结果分析界面:

建议的学习路径:

阅读核心原理篇 → 阅读场景教程篇 → 用 PlecsSuite 生成脚本 → 对照生成的代码加深理解 → 按需手写定制

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐