Vestas 使用基于模型的设计和持续集成开发风力发电厂控制软件

“借助 Simulink 和 Embedded Coder,我们可以向客户和电网运营商展示仿真,其中包含将在我们的电厂控制器中运行的实际代码。这正是电网运营商所需要的,它让 Vestas 比仍在使用传统方法的竞争对手更有优势。”

挑战

根据不断变化、因地而异的电网规范开发可再生能源发电厂控制软件

解决方案

使用基于模型的设计与持续集成对控制器建模,自动执行基于仿真的测试,并为工业控制器生成产品级代码

结果

  • 生成无问题的可靠代码
  • 自动执行多站点 CI 工作流
  • 避免受制于硬件
Vestas 涡轮和发电厂控制。

Vestas 涡轮和发电厂控制。

Vestas Wind Systems A/S 在 80 个国家/地区安装了 6.6 万台以上的涡轮(总装机容量超过 100 GW),是风电装机量最多的公司。Vestas 的工程师使用基于模型的设计和持续集成 (CI) 来开发电厂控制软件,并向 Vestas 客户和电网运营商证明符合电网规范。

Vestas Wind Systems A/S 的控制系统软件架构师 Per Hagen Nielsen 说道:“电网运营商希望了解电厂运作情况的仿真,以及控制代码是否与仿真一一匹配。”目前,能够展示这一点的公司凤毛麟角,而 Vestas 就是其中之一。这是因为我们使用了基于模型的设计,通过 MATLAB 和 Simulink 对电厂控制系统进行建模和仿真,然后使用这些相同的模型生成 C++ 代码,用于系统级仿真和生产。”

挑战

在采用基于模型的设计进行电厂控制设计之前,Vestas 的工程师采用了一种传统方法,即将电力工程师撰写的纸质规范和设计文档交给软件工程师,再由软件工程师手动编写各个组件或功能的代码。电力工程师可以使用 PSCAD 软件运行仿真,但这些仿真侧重于电力而不是软件控制。也就是说,仿真并不包含控制代码。这意味着,一旦集成和部署了软件,就很难保证 PSCAD 仿真能反映系统性能。Vestas 希望消除手动编码带来的潜在人为错误,同时确保其电力系统仿真与控制软件保持一致。

此外,Vestas 希望能够让分布在欧亚五个国家/地区的工程团队就相同的工程(在某些情况下是相同的模型)展开协作。这支散布各地的团队需要对模型应用版本控制,管理频繁进行的合并,并自动执行基于仿真的测试。为了满足这些需求,Vestas 决定将 CI 与 Jenkins™ 结合使用,并将 CI 原则融入基于建模、仿真和代码生成的工程工作流中。

解决方案

在获得高级管理层的支持后,Vestas 电力系统工程师为电厂控制设计制定了新的工作流,将 CI 和基于模型的设计与 MATLAB® 和 Simulink® 相结合。

当电网规范变更提议出台或客户要求提供新的功能或组件时,Vestas 的工程师会创建一组形式化需求。根据这些需求,一个小组使用 Simulink 和 Simulink Test™ 开发测试用例以用于验证新功能,而另一个小组使用 Simulink 和 Stateflow® 设计新功能。

为了创建用于闭环仿真的系统模型,第二个小组的工程师将控制模型与 Simulink 模型相结合。该 Simulink 模型用于捕获电网在接入电厂处的阻抗和动态特性。使用 Simulink S-Function,他们集成了风力发电机模型。该模型是用专有工具开发的,由 Vestas 的另一个小组打包为 DLL。

在使用此系统模型运行闭环仿真,并运行检查以确保其符合基于 MathWorks 汽车咨询委员会 (MAAB) 规范的建模标准后,工程师会将控制模型签入一个 Git 仓库中。模型签入会触发一个 Jenkins 作业,运行之前使用 Simulink Test 开发的测试用例,以及电力工程师创建的其他基于仿真的测试和另一轮建模规范合规性检查。

如果控制模型通过了所有测试和检查,Jenkins 将调用 Embedded Coder® 1 从该模型中生成 C++ 代码。生成的 C++ 代码会被编译为一个 DLL 文件,而该文件会在 PSCAD 中用于运行整个电厂及其控制软件的仿真。

Vestas 使用这些仿真向输电系统运营商展示在正常情况下以及存在电压降、振荡和其他扰动的情况下电厂在接入电网时的运作情况。最后,在目标工业控制系统上对生成的代码进行测试,然后再将其部署到生产中。

结果

  • 生成无问题的可靠代码。“如果我们控制系统的性能未达到应有的标准,我们将面临处罚,”Nielsen 说道。“借助 Simulink 和 Embedded Coder,我们很快了解到,我们生成的代码值得信赖。事实上,我们迄今尚未发现任何问题。”
  • 自动执行多站点 CI 工作流。“我们在全球有数十名工程师在同一个模型上并行工作,需要进行大量代码合并,”Nielsen 说。“使用基于模型的设计和持续集成 (CI),我们缩短了迭代和自动化测试过程的时间。”
  • 避免受制于硬件。“过去,我们通过为 PLC 平台编写自定义结构化文本来开发控制器,这意味着我们被该平台牢牢掣肘,”Nielsen 说道。“如今,我们可从 Simulink 模型中生成可移植的 C++ 代码,这让我们能够灵活地使用替代的工业控制平台。”

1 在 Jenkins 或其他 CI 计算机上使用 Embedded Coder 可能需要客户端访问许可证。