您现在的位置是:主页 > 电压 > 正文

Matlab的simulink如何生成dll文件?

电压 2024-11-07 15:43

一、Matlab的simulink如何生成dll文件?

1.前言

由于本文章内容主要讲实操技能,无理论论述,故直接开讲!不啰嗦!

2.建立Simulink模型,并将输入、输出利用Simulink中的Input,Output代替。

图1 Simulink模型

2.为了让生成的代码文件更少,逻辑更清晰,将模型变为Subsystem子模块,暴露出输入输出接口就行。

图2 将Simulink模型变为Subsystem子模块

3.配置Smulink属性——设置算法运行为定步长等

图3 定步长设置
图4 允许生成动态链接库时包含连续模块
图5 设置为Visual C++工程 嵌入式代码
图6 设置目标文件类型以及语言
图7 点击"Build Model"

等待自动建立工程完成,弹出VS2015后会自动关闭,待关闭完成之后,即可对自动生成的工程进行配置。

4.添加生成外部接口功能语句,让其生成.dll和.lib文件

找到自动生成工程的文件路径,如模型自动生成的路径为:E:\...\...\...\TraceModel\TraceModel_ert_rtw\msvc\TraceModel.sln在TraceModel.h 这个头文件中找到模型的输入、输出类,在模型类的前面添加固定代码,生成外部接口。固定代码为:

#if defined(MODEL_LIBRARY)                   
#define SHARED_EXPORT __declspec(dllexport)
#else
#define SHARED_EXPORT __declspec(dllexport)
#endif

如图:

图8 生成外部接口

另外,在模型类的前面一定要添加

“SHARED_EXPORT”

该步骤很容易被忽视,切记!!!例如:

图9 生成外部接口位置(切记)
图10 生成外部接口语句(切记)

5.配置VS工程,让其生成.dll和.lib文件。

图11 配置VS工程
图11 配置VS工程类型为.dll
图12 预处理中输入“SHARED_EXPORT”
图13 生成工程即可同时生成动态链接库和静态链接库

生成动态链接库和静态链接库如下所示。

图14 生成动态链接库和静态链接库

6.生成一个空项目测试生成的算法(函数)动态链接库文件

图14可以发现已经成功的生成了dll和lib文件。接下来,新建工程调用测试即可。生成一个空项目:

图15 新建一个测试工程

添加新建项,.cpp文件。

图16 新建一个源文件

7.显示结果

图17 原Simulink仿真结果(跟踪算法)
图18 VS2015的仿真结果(跟踪算法)
图19 Simulink仿真结果-跟踪误差(跟踪算法)
图20 VS2015仿真结果-跟踪误差(跟踪算法)

乍一看跟踪效果还可以,仔细分析跟踪精度发现simulink跟踪误差峰峰值为0.03°,而VS的峰峰值为0.3°,差一个数量级,针对这个现象,需要进一步分析原因!!!


8.优化模型现在简化模型,对积分模块、延时模块等做了连续模块离散化的操作,离散步骤:

图21 离散化的操作
图21 离散化的操作(双性变换法离散)
图22 离散化的仿真模型

经过模型简化之后,需要重新生成新的链接库文件,并将原来测试算法的工程文件里的链接库文件和头文件重新替换!!!

图23 Simulink仿真结果-跟踪误差(跟踪算法)
图24 Simulink仿真结果-跟踪误差(跟踪算法)

综上计算结果:

Simulink : RMS(平稳段) = 0.0066°

VS 2015 : RMS(平稳段) = 0.0066°

结论:离散化Simulink模块的操作必须得有,不然实际效果确实达不到仿真效果,避免仿真效果好,实际数字样机效果不好的情况!

附 录

#include <stdio.h>
#include <iostream>
#include "TraceModel.h"
#define _CRT_SECURE_NO_WARNINGS 
#pragma comment (lib,"TraceModel.lib")
using namespace std;
float g_sine = 0;
//设置时间累加器
double g_uFreqScanTime = 0;
double g_uSineTime = 0;
int main()
{
double simtime = 0;
TraceModelModelClass CAL;
CAL.initialize();
CAL.TraceModel_U.Delay_Count = 1;                           //延时步数
//CAL.TraceModel_U.fImageError = 5;                         //脱靶量
CAL.TraceModel_U.SmithKp = 50;                              //SmithKp
CAL.TraceModel_U.Ts= 0.01;                                 //算法采样时间
FILE* log;
auto e = fopen_s(&log, "D:/1.txt", "w+");
while (simtime < 10)
{
simtime += 0.01;
g_uFreqScanTime++;
g_sine = 10 * sin(2 * 3.1415926 * 0.16 * g_uFreqScanTime * 0.01);     //30°0.16Hz的脱靶量
CAL.TraceModel_U.fImageError = g_sine;
CAL.step();
double out = CAL.TraceModel_Y.fTrackOut;
printf("%f %f\n", g_sine, out);
fprintf(log, "%f %f\n", g_sine, out);
CAL.terminate();
}
fclose(log);
}

二、matlab中电压测量模块怎么找?

可以在Matlab的Instrument Control Toolbox中找到电压测量模块。Instrument Control Toolbox是一个用于控制和测试硬件设备的Matlab工具箱,其中包含了许多支持各种硬件设备的仪器控制和数据采集API。其中就包含了用于电压测量模块的API。如果你发现Instrument Control Toolbox中没有你需要的电压测量模块,你可以考虑使用其他的Matlab工具箱或第三方库来进行电压测量。

三、MATLAB/Simulink中FFT分析?

matlab的fft以及不少信号处理教材上的fft是按照如下公式:变换后能量是会

扩大

的。若要能量不变,公式为:代码为:

-----------------Last but not least,功率谱不能这么简单粗暴的估计。FFT有截断效应,相当于把要分析的信号乘以一个矩形窗,频域相当于于一个sinc函数卷积,使真实频谱发生扩散。所以至少要加一个窗函数,再用幅度谱的平方估计功率谱。觉得麻烦就用pwelch(x)吧。

四、matlab simulink怎么开始仿真?

要开始在MATLAB Simulink中进行仿真,您需要按照以下步骤操作:

1. 打开MATLAB软件并创建一个新的模型文件。

2. 在模型文件中添加所需的模块和组件,例如信号发生器、作用力、控制器等。

3. 连接这些模块和组件以构建完整的系统。

4. 配置每个模块和组件的参数,例如信号发生器的频率和振幅,控制器的增益等。

5. 点击“运行”按钮以开始仿真。

6. 在仿真过程中,您可以监视系统的输出并调整参数以优化系统性能。

7. 一旦仿真完成,您可以查看和分析仿真结果,例如绘制系统响应曲线或计算系统的稳定性。

请注意,这只是一个基本的仿真流程,具体步骤可能会因您的具体应用而有所不同。

五、simulink能转matlab吗?

Simulink可以帮助用户快速地建立模型并进行仿真分析,而将Simulink模型转换为Matlab代码可以帮助用户进行更深入的分析和优化。

通过Simulink的代码生成器,用户可以轻松地将模型转换为Matlab代码,并进行必要的修改和优化。

六、matlab中simulink的编码?

这么简单的东西

y'''' = (y''')'

y''' = (y'')'

y'' = (y')'

y' = (y)'

Y = [y y' y'' y''']

Y' = [y' y'' y''' y'''']

Y' = [ 0 1 0 0; * Y +[0 * U

0 0 1 0; 0

0 0 0 1; 0

-5 -4 -3 -3] 1]

U = wxp(-3t) + [sin(4t-pi/3)]exp(-5t)

初值 [0.2 0.5 0.5 1]

如果要求的是y

z = [1 0 0 0]Y

系统的a = [ 0 1 0 0; b = [0 c =[1 0 0 0] d =0

0 0 1 0; 0

0 0 0 1; 0

-5 -4 -3 -3] 1]

自己写下程序很简单的。

simulink文件这里没法上传。

七、用Matlab的Simulink仿真电路如何测量交流电压的峰值(或有效值)?

可以用一个display器件,显示实时电流的数值。display在simulink->sinks->Display。MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB应用非常之广泛。

八、用Matlab的Simulink仿真电路如何测量交流电压的峰值(或有效值)?

版本2016a/b,voltagemeasurement(Real-Imag类型)接RMS(默认设置)接scope/display即可测得有效值。

九、simulink三相电压电流测量模块?

关于这个问题,在Simulink中,可以使用模拟信号源和测量块来模拟三相电压和电流的测量模块。

1. 首先,使用三个正弦波信号源模块来生成三相电压信号。每个信号源模块的频率、幅值和相位可以根据实际情况进行设置。

2. 接下来,使用三个测量块来测量三相电压信号。可以使用均方根测量模块(RMS Measurement)来测量电压的有效值。

3. 如果需要测量三相电流信号,可以使用电流传感器模块来模拟电流传感器的输出。电流传感器模块可以设置为根据电流信号生成相应的输出信号。

4. 最后,使用三个测量块来测量三相电流信号。同样可以使用均方根测量模块来测量电流的有效值。

这样,就可以模拟出三相电压和电流测量模块。根据实际需求,可以进一步添加数据处理和显示模块,以便对测量结果进行分析和显示。

十、matlab电流测量元件怎么接电压源?

1.matlab中电压测量模块和电流测量模块,是信号测量的模块,不能直接和电源相连2.你可以给电源接一个电阻负载,然后直接将电压测量模块连接到,负载电阻的两端,就可以了