之前发布了一篇文章,介绍如何使用PSIM中的DLL模块。而本篇文章的内容与之类似,不过主角换成了PLECS。
PLECS和PSIM类似,也属于电力电子仿真软件,使用方便,仿真速度快,和Matlab也有一定的联系,有兴趣的可以去试试。PLECS可以利用外部动态链接库(DLL)来调用外部的代码参与仿真,方便复杂控制算法的实现,也有利于后期直接将代码移植到硬件控制器上。
本篇文章主要参考B站UP主“_zgj”老师的视频,算是他视频的一个文本化,便于自己学习。
PLECS视频教程43(DLL模块的使用说明)
顺带提一嘴,“_zgj”老师水平真的超高,在他的这期视频里,竟然是用Windows的命令行处理窗口来进行代码的编译等操作,实在是太帅了。本人水平有限,就总结了一种比较简单的方法来使用。除此之外,“_zgj”老师还有不少丰富知识和高级操作,欢迎大家前去关注学习。
闲话少叙,进入正题:
本次用到的软件主要是Visual Studio 2022 (VS 2022)和PLECS 4.68。
目录
- 一、总体思路
- 二、具体实现
- 1 找寻DLL模块
- 2 在VS中新建项目
- 3 在VS里面编写相应的接口函数
- 4 联系PLECS和VS
- 5 最后
- 写在后面
一、总体思路
与PSIM中DLL模块的使用类似,在PLECS中要找到DLL模块,在VS中编写需要的代码并生成“.dll”文件,最后通过某种方式将两者联系起来即可
二、具体实现
1 找寻DLL模块
PLECS的运行界面如下:包含两个部分,左边是库,右边是新建的一个Model
要使用DDL,可以在“Library”中搜索DLL,或者直接在新建的model主界面上打“DLL”,便可以找到该模块
双击“DLL”,弹出模块的参数设置窗口
(1) Filename:这里需要填入最后生成的“.dll”文件路径以及文件名,后面会提到;
(2) Sample time:顾名思义就是采样时间,可以填入实际需要的时间。如果填了“-1”,表明所采用的采样时间是继承于上一级模块的设置;
(3) Output delay 和 Parameters:这个暂且不管。
假设我们现在希望通过DLL将两个输入信号分别进行放大10倍和加上10的操作,那么在输入端可以先简单这样给定
2 在VS中新建项目
创建新项目,选择Windows桌面向导
给项目命名并选择合适的保存路径
选择动态链接库(.dll),空项目
3 在VS里面编写相应的接口函数
先新建一个“.c”文件。和PSIM那一篇文章类似,要注意把“.c”后缀名写好。
要准备的内容主要可以分成四个部分:头文件,输入以及输出接口,还有要实现的功能部分。这里直接给上代码,在使用的时候基于此进行修改即可
#include <math.h>"
#include "DllHeader.h"
void plecsSetSizes(struct SimulationSizes* aSizes) {
aSizes->numInputs = 2; // 输入个数
aSizes->numOutputs = 2; // 输出个数
aSizes->numStates = 0; // 状态个数
aSizes->numParameters = 0; // 参数个数
}
void plecsOutput(struct SimulationState* aState) {
float a1 = 0;
float a2 = 0;
/* 输入 */
a1 = aState->inputs[0];
a2 = aState->inputs[1];
/* 功能实现 */
a1 = a1 * 10;
a2 = a2 + 10;
/* 输出 */
aState->outputs[0] = a1;
aState->outputs[1] = a2;
}
保存文件后,点击菜单中的“生成”,再选择“生成解决方案“。
一般来说,这里会报错,显示找不到“Dllheader.h”,这时我们需要对左侧栏中的项目进行右击,选择属性,再进行如下操作
具体的路径为:(每个人的PLECS安装路径会各有不同)
虽然这里显示“没有与搜索条件匹配的项”,但是没有关系,因为在VS里看不到相关的文件,直接选择该文件夹即可。
这时再进行编译操作就不会有错了。
4 联系PLECS和VS
为了将生成的“.dll”文件和PLECS连接起来,我们需要找到文件的路径和文件名,就在我们建立的项目里
而后将该信息填写进DLL的 “Filename”一栏中
5 最后
设置好相关的仿真参数,见证结果吧!
很显然,仿真和我们期望的一致!
写在后面
DLL模块的“help”文档中其实介绍了很多东西,包括输入输出,一些接口函数的写法等等,有兴趣的可以去看看。比如