我最初接触SimAuto API,是因为一个特别枯燥的活儿:手上有几十台风机的参数要调,风力机型号、切入风速、额定功率、无功上限、参与调压的开关状态,每一项都要改。如果按照老办法,打开PowerWorld Simulator,一台一台双击风机、翻选项卡、改数值、保存,然后再打开下一台,光这一轮下来,一个下午就没了,而且人一疲劳,很容易漏改、错改。
后来我改用SimAuto API写脚本,把整个流程压缩成了几十行代码加一个参数表,运行完自动生成校验日志。今天就把这套做法完整拆开讲,包括API调用的核心机制、批量修改风机参数时最容易踩的坑、以及如何确认改完的结果真的被仿真引擎正确接受了。
1. 为什么风机参数需要批量操作
风电在电力系统仿真里是一个很特殊的存在。它不像常规火电、水电那样只有一个稳定的有功出力和机组模型,风机参数涉及机械侧、电气侧、控制侧三层。机械侧有风轮直径、切入风速、额定风速、切出风速;电气侧有额定容量、机端电压、功率因数范围、无功出力上下限;控制侧更麻烦,有参与调频/调压的标志位、有功备用比例、低电压穿越策略等。
在做稳态潮流计算时,我们通常关心的是电气侧参数,因为潮流计算只认节点的有功注入、无功注入和电压约束。但一旦做动态仿真,机械侧和控制侧参数全都会发挥作用。比如你要评估一片风电基地在电网故障后的低压穿越表现,就必须保证每台风机模型里的切出风速、桨距角控制参数、无功补偿能力都一致,否则仿真结果会出现“同一批风机,有的能撑住、有的直接脱网”的情况,而这种差异往往不是电网故障造成的,而是参数表不统一导致的。
我遇到的场景更具体。当时我们要对整个风电场群的模型参数做一次全面升级,新的风机参数表有二十多个字段需要更新。项目方给出的要求是:所有风机的电气参数必须严格按新表执行,原来风机模型中的老参数全部作废。如果人工改,哪怕只改三五十台,也大概率会出现漏项。而且这种参数更新不是改一次就完事,不同运行方式下还要切换风机参数方案,比如夏季高峰方式和冬季大风方式,风机无功出力上限可能不一样。
所以,批量修改风机参数不是“图省事”的偷懒方案,而是保证模型一致性和仿真可信度的必要手段。手动改一百个同类型元件,出错的概率几乎是必然的,而脚本方式能够保证每次修改都可追溯、可验证。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SimAuto API的核心机制与实际操作逻辑
SimAuto API是PowerWorld Simulator对外提供的自动化接口,运行在COM/DCOM体系下。利用它,你可以把PowerWorld仿真引擎当成一个后台服务来调用——通过编程语言连接到仿真引擎,读取元件参数,修改元件参数,执行潮流计算,导出结果。
说句实话,这个API的写法很“老派”。它不像现在很多云服务SDK那样有清晰的对象模型和链式调用,它更多是围绕“动作字符串”来展开的。最常用的调用形式是这样的:
python复制import win32com.client
# 连接到已经打开的PowerWorld仿真界面/引擎
sim = win32com.client.Dispatch("pwrworld.SimulatorAuto")
# 修改某个母线电压
sim.ChangeParametersSingleElement("Bus", ["Name", "PUVolt"], ["Bus1", "1.05"])
上面这段代码里,ChangeParametersSingleElement就是最核心的修改接口,它的参数依次是:元件类型、属性名列表、属性值列表。这个接口一次只能修改一个元件,如果我们要批量修改一百台风机,就需要循环调用。
批量操作背后还
