VC与Matlab混合编程之基于MATLAB RTW 的建模仿真
本文章只是博主用来记录自己的学习过程以及期间遇到的一些问题及解决方案的总结
首先Matlab(Matlab7.0)仿真模型部分配置过程如下:
文章图片
文章图片
文章图片
文章图片
注:上面的图是在Matlab2014a中截的,只是说明一下怎么配置,整个工程是在Matlab7.0中做的。
模型中In1的输入实现:(本人一开始一直不知道In1该怎么用,蹭了一段时间,这算是第一个问题)
在命令行窗口执行以下命令即可
t=0:0.01:10;
u=stepfun(t,0);
t=t';
u=u';
完成以上配置后,在Simulink模型中点击Build,生成C代码。
然后,在VC++6.0中进行编程,本人创建的是控制台应用程序(Win32 console application)。
注:一定要在创建的VC工程中加入上面生成的C代码(所有.c和.h文件),以及在工程中设置包含Matlab的一些include文件和library文件的路径。
#include
#include"Matlab_RTW.h"
#include"Matlab_RTW_private.h"
#include"Matlab_RTW_types.h"
#include"rt_nonfinite.h"
#include"rtmodel.h"
#include"rtwtypes.h"voidRTWInitialize(void);
doubleRTWOutput(void);
voidRTWTerminate(void);
intmain( )
{
int i ;
double t=0;
double model_out;
FILE* pData = https://www.it610.com/article/fopen("data.txt","w");
//data.txt存储仿真结果
if(pData=https://www.it610.com/article/=NULL)
{
printf("Failed to open file\n");
return 0;
}
RTWInitialize();
for (i = 0;
i < 1000;
i++)
{
model_out = RTWOutput();
fprintf(pData,"%f\n",model_out);
// printf("%f\n",model_out);
//内存不足容易丢失数据
t = t + 0.01;
}
fclose(pData);
RTWTerminate();
return 0;
}
voidRTWInitialize(void)
{
Matlab_RTW();
//模型注册
MdlInitializeSizes();
//初始化大小
MdlInitializeSampleTimes();
//初始化采样次数
MdlStart();
//启动模型
Matlab_RTW_U.In1 = 1;
//给定输入
}
doubleRTWOutput(void)
{
double Yout;
MdlOutputs();
//计算系统输出
MdlUpdate();
//更新离散状态向量
Matlab_RTW_derivatives();
//计算连续模型导数
Yout = Matlab_RTW_Y.Out1;
//记录输出结果
return Yout;
}
voidRTWTerminate(void)
{
MdlTerminate();
//模型停止
}
【VC与Matlab混合编程之基于MATLAB RTW 的建模仿真】
上面的程序中,本人用TXT文件来存储仿真数据,因为在DOS界面直接输出仿真数据时,只有299个,本该是1000个,所以本人猜测是显示问题(这是第二个问题),所以用TXT文件较好,另外也比较容易将数据导入Matlab中绘制曲线观看仿真效果。
至此整个仿真结束。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 原生家庭之痛与超越