PLECS中DLL模块的使用

news2024/9/30 1:37:18

之前发布了一篇文章,介绍如何使用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”文档中其实介绍了很多东西,包括输入输出,一些接口函数的写法等等,有兴趣的可以去看看。比如
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Java多线程你了解多少

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 目录多线程多线程的创建继承Thread类实现R…

主板EC程序烧写异常致无法点亮修复经验

主板型号&#xff1a;Gigabyte AB350M-Gaming3 官网上明确写着支持R5 5500&#xff0c;但按照如下步骤实践下来实际是不支持的 升级biosF31到F40版本的注意事项&#xff1a; 步骤&#xff1a; 1 使用Q-Flash先将bios升级到f31版本&#xff1b;2 然后下载提示中的ECFW Update To…

常见排序算法——冒泡排序和选择排序

常用算法 一、排序算法 1.1、冒泡排序 冒泡排序(Bubble Sorting)的基本思想是&#xff1a;通过对待排序序列从前向后&#xff08;从下标较小的元素开始&#xff09;&#xff0c;依次比较相邻元素的值&#xff0c;若发现逆序则交换&#xff0c;使值较大的元素逐渐从前移向后部…

Fiddler 模拟弱网环境测试

为什么要进行弱网环境测试&#xff1f; 由于用户自身的网络环境波动&#xff0c;或者是本身网络环境就较为恶劣&#xff0c;导致会出现一些意想不到的非功能性bug&#xff0c;影响用户体检。比如 利用Fiddler&#xff0c;Charles等具有代理服务器功能的网络流量分析软件来实现…

操作留痕功能实现与探讨

操作留痕功能实现与探讨 背景 接手了一个单体应用项目&#xff0c;看系统介绍&#xff0c;说实现了【高性能的操作日志留痕】功能&#xff0c;就有点好奇它是怎么设计的&#xff0c;是阻塞队列还是怎样的线程池。结果我打开代码一看&#xff0c;真的是笑洗个人了。它是做了一…

Mysql全解[基础篇]

目录MySQL概述数据库相关概念MySQL数据库版本docker部署单机节点sqlmode说明连接mysql数据模型关系型数据库&#xff08;RDBMS&#xff09;数据模型mysql版本对比MySQL 5.5MySQL 5.6MySQL 5.7MySQL 8.0SQLSQL通用语法SQL分类DDL数据库操作表操作数据类型数值类型字符串类型日期…

操作系统——12.处理机调度的概念、层次

这篇文章我们来讲一下处理机调度的概念和层次 目录 1.概述 2.调度的基本概念 3.调度的三个层次 3.1高级调度 3.2中级调度 3.3.低级调度 3.4三种调度的对比 4.挂起状态与七状态模型 5.小结 1.概述 首先&#xff0c;我们来看一下本节的知识框架图&#xff1a; 2.调度的…

连接Oracle数据库失败(ORA-12514)故障排除

文章目录症状产生原因解决办法欢迎加下方我的微信&#x1f447;&#xff0c;拉你入学习群点击试看博主的专著《MySQL 8.0运维与优化》&#xff08;清华大学出版社&#xff09;ORA-12514的故障是很多新手在连接Oracle数据库时经常遇到故障&#xff0c;它通常表示无法连接到数据库…

python+pytest接口自动化框架(5)-requests发送post请求

在HTTP协议中&#xff0c;与get请求把请求参数直接放在url中不同&#xff0c;post请求的请求数据需通过消息主体(request body)中传递。且协议中并没有规定post请求的请求数据必须使用什么样的编码方式&#xff0c;所以其请求数据可以有不同的编码方式&#xff0c;服务端通过请…

专访阮健丨压力就是动力,危机也是转机

48岁的阮健加入酷雷曼已经三个年头&#xff0c;从最初的孤身一人至今&#xff0c;他已经拥有了一个五六人的VR全景团队。 阮健团队的拍摄设备 “人的一生真的是充满不确定性的&#xff0c;那些年我辗转好几个行业的时候&#xff0c;也会一边抱怨行业不景气一边又想着怎么多干点…

Vue3 企业级项目实战:全新优化升级

Vue3 企业级项目实战 - 程序员十三 - 掘金小册Vue3 Element Plus Spring Boot 企业级项目开发&#xff0c;升职加薪&#xff0c;快人一步。。「Vue3 企业级项目实战」由程序员十三撰写&#xff0c;2744人购买https://s.juejin.cn/ds/S2RkR9F/ 写下这些文字的时候是2022年9月…

无需公网IP,安全稳定实现U8C异地访问

用友是全球领先的企业云服务与软件提供商&#xff0c;在财务、人力、供应链、采购、制造、营销、研发、项目、资产、协同等领域为客户提供数字化、智能化、社会化的企业云服务产品与解决方案。 U8C是用友针对成长型、创新型企业&#xff0c;提供企业级ERP整体解决方案。在系统…

ChunJun 1.16 Release版本即将发布,bug 捉虫活动邀您参与!

亲爱的社区小伙伴们&#xff0c;历时数月&#xff0c;我们很高兴地宣布&#xff0c;ChunJun 即将迎来 1.16 Release 版本的正式发布。在新版本中&#xff0c;ChunJun 新增了一批常用功能&#xff0c;进行了多项功能优化和问题修复&#xff0c;并在用户使用体验上进行了极大地改…

systemctl 启动/停止/重新加载 nginx

systemctl 启动/停止/重新加载 nginx 一、新建nginx.service脚本 sudo vim /usr/lib/systemd/system/nginx.service然后按iii进入编辑模式&#xff0c;粘贴如下内容&#xff0c;其中/usr/local/nginx/是进行make && make install之后的文件夹路径&#xff0c;需要根据…

虚拟地址空间

本节目录1.如何理解区域划分2.为什么一个变量可以存储两个不同的值&#xff1f;3.深入理解虚拟地址空间为什么要有地址空间&#xff1f;4.理解什么是挂起&#xff1f;1.虚拟地址空间究竟是什么&#xff1f;2.映射关系的维护是谁做的&#xff1f;1.如何理解区域划分 所谓的区域…

STM32F1,F4,L1系列禁止JTAG和SW引脚方法

STM32F1系列 程序中在使用到JTAG、SWD的某个IO 时&#xff0c;需要禁用掉相关调试方法后&#xff0c;再配置相应的IO方式。在需要相应的接口配置前使用这些代码。 对于F1系列&#xff0c;调用函数进行专门的禁止。 标准库配置方式&#xff1a; RCC_APB2PeriphClockCmd(RCC_A…

【蓝桥杯嵌入式】LCD屏的原理图解析与代码实现(第十三届省赛为例)——STM32

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…

智能家居Homekit系列一智能触摸开关

触摸开关&#xff0c;即通过触摸方式控制的墙壁开关&#xff0c;其感官场景如同我们的触屏手机&#xff0c;只需手指轻轻一点即可达到控制电器的目的&#xff0c;随着人们生活品质的提高&#xff0c;触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

HNU工训中心: 三人表决器及八人抢答器实验报告

工训中心的牛马实验 三人表决器&#xff1a; 实验目的 1) 辨识数字IC功能说明。 2) 测试数字集成门电路&#xff0c;掌握输出故障排除、使用注意事项。 3) 掌握逻辑函数搭建三人表决器。 2.实验资源 HBE硬件基础电路实验箱、万用表 74LS00与非门、74LS10 三个3输入与非门…

JS 的同步异步、事件循环

js 执行过程&#xff1a;先执行同步代码在执行异步代码案例1: 以下就是 同步代码异步代码&#xff0c;同步代码先执行&#xff0c;异步代码后执行console.log(1); //1 setTimeout(()>{ console.log(3) //2 },10)案例2: 执行顺序console.log(1) //1 setTimeout(()>{ conso…