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   <stdio.h>
#include  "Matlab_RTW.h"
#include  "Matlab_RTW_private.h"
#include  "Matlab_RTW_types.h"
#include  "rt_nonfinite.h"
#include  "rtmodel.h"
#include  "rtwtypes.h"

void  RTWInitialize(void);
double  RTWOutput(void); 
void  RTWTerminate(void);
int  main( )
{
	int i ;
	double t=0;
	double model_out;
	FILE* pData = fopen("data.txt","w");	//data.txt存储仿真结果
	if(pData==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;
}
void  RTWInitialize(void)
{
	Matlab_RTW();	//模型注册
	MdlInitializeSizes();	//初始化大小
	MdlInitializeSampleTimes();	//初始化采样次数
	MdlStart();	//启动模型
	Matlab_RTW_U.In1 = 1;	//给定输入
}
double  RTWOutput(void)
{
	double Yout;
	MdlOutputs();	//计算系统输出
	MdlUpdate();	//更新离散状态向量
	Matlab_RTW_derivatives();	//计算连续模型导数
	Yout = Matlab_RTW_Y.Out1;	//记录输出结果
	return Yout;
}
void  RTWTerminate(void)
{
	MdlTerminate();	//模型停止
}

 

 

上面的程序中,本人用TXT文件来存储仿真数据,因为在DOS界面直接输出仿真数据时,只有299个,本该是1000个,所以本人猜测是显示问题(这是第二个问题),所以用TXT文件较好,另外也比较容易将数据导入Matlab中绘制曲线观看仿真效果。

至此整个仿真结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值