MATLAB_RTW__Engine
VS2010调用Matlab引擎的简单例子

engClose(ep); //关闭Matlab引擎。
}
5
6
无法调试。
mxArray*xx =mxCreateDoubleMatrix(1,N,mxREAL);
mxArray*yy=mxCreateDoubleMatrix(1,N,mxREAL); //同上。
memcpy(mxGetPr(xx), x, N*sizeof(double)); //将数组x复制到mxarray数组xx中。
using namespacestd;
intmain()
{
constintN = 50;
double x[N],y[N];
intj = 1;
for (inti=0;i<N;i++) //计算数组x和y
{
x[i] = (i+1);
y[i] = sin(x[i]) + j * log(x[i]); //产生-之间的随机数赋给xx[i];
memcpy(mxGetPr(yy), y, N*sizeof(double)); //将数组x复制到mxarray数组yy中。
engPutVariable(ep, "xx",xx); //将mxArray数组xx写入到Matlab工作空间,命名为xx。
engPutVariable(ep, "yy",yy); //将mxArray数组yy写入到Matlab工作空间,命名为yy。
或者直接从工具栏平台的下拉箭头下进入:
(2)增加x64平台
确定,得到如下结果。
3
项目属性——》VC++目录,如图:
包含目录增加:C:\Program Files\MATLAB\R2012b\extern\include
RTW技术在轮机模拟器中的应用

RTW技术在轮机模拟器中的应用高德基;欧镇;卢森微【摘要】This paper introduce a method of using the code generation of MATLAB/Simulink to convert Matlab/Simulink to theC++ code in the process of constructing the mathematical model of the marine main engine in the turbine simulator. You can modify the module parameters in real time and put the data generated by the simulink into the SQL database through further development for the calling of other parts of the turbine simulator . And the virtual operating system of the marine main engine based on the virtools , for example, I introduce the concrete application of this technology.This can not only avoid the problem of writing the code ,but also meet the demand of real-time in the turbine simulator and provide the convenience for the development of the turbine simulator.%文中介绍了轮机模拟器中船舶主机数学模型的构建过程中,利用MATLAB/Simulink中代码转换工具,将Simulink中搭建的船舶主机模型转换为C++代码。
基于MATLAB RTW的实时控制系统开发

基于MATLAB/ RTW的实时控制系统开发2004-4-30 14:33:38 来源: 点击次数: 4次新疆大学电气工程学院张宏立摘要:本文简要介绍了MATLAB的RTW工具箱的功能和作用,并用一实例着重介绍了使用RTW中XPC 开发实时控制系统的方法和步骤,为快速,高效开发实时控制系统提供有效手段。
关键词:MATLAB RTW XPC 实时控制一引言MATLAB是Mathworks 公司80年代推出的优秀科学计算和系统仿真软件,它以丰富的函数、强大的工具箱和简便的编程环境而深受广大用户欢迎,尤其是它的Simulink工具箱更是为系统仿真和建模提供强有力的支持。
但是说到MATLAB在实时控制方面的应用,就很少有人了解,关于这方面的资料也很少。
而RTW(Real Time Workshop)正是Mathworks 公司为MATLAB在实时控制应用方面开发的专门工具箱[1]。
二 RTW功能介绍RTW是对MATLAB和Simulink功能的一个重要补充,以往我们在设计控制系统中,先在Simulink中建模和仿真,直至仿真结果满意为止。
但是真正要开发实际控制器时,我们需要重新使用C或者其它语言重新编程,而当设计好的控制器与实际被控系统相联后,可能控制效果就不如仿真效果那么理想了,因为在仿真时我们可能对模型作了一些假设和近似或忽略了实际系统可能受到的扰动和噪声,这样造成仿真与实际应用相脱节。
RTW的产生解决了这个问题,RTW支两种类型的实时目标设计[2]:一种是快速原型化目标设计,另一种是嵌入式目标设计。
所谓快速原型化目标设计又叫半实物仿真,就是指可以用Simulink设计出来的控制器直接去控制实际的被控对象,通过半实物仿真过程来观察控制效果,如果控制效果不理想,则可以直接在Simulink上调整控制器的结构或参数,直至获得满意控制结果。
这样调试好的控制器可以认为是实际控制器的原型(Prototype) ,显然此时的控制器显然要好于纯数字仿真下的控制器。
使用VC调用matlab_engine编程

关于如何使用VC调用matlab engine编程刚开始学使用VC调用matlab engine编程的时候,遇到很多问题,就去百度找解决方法,但发现根本解决不了我的问题,因为网上大部分实例和步骤都是在matlab6.5和vc++6.0环境下完成的,但是现在我用的是matlab2010a,所以会出现很多环境配置的问题,写本文的目的是总结用我在用VC调用matlab engine编程过程中出现的问题和解决办法。
Matlab Engine 采用Client/Server的方式,通过ActivcX通道和Matlab接口来实现在VC编程环境中直接调用matlab中的指令。
调用使用的函数是:engEvalSting。
下面是自己的实践过程:如果是第一次使用,则要设置一下Visual C++6.0 编程环境中的include 和lib的路径指向。
我的matlab2010安装在D盘目录D:\MATLAB 2010一、设置VC相关属性。
(1)Visual C++6.0 编译环境的设置:通过菜单 Tools/ Options,打开Visual C++6.0设置属性页,进入 Directorie页面,在 Show Directories for 下拉列表中选择Include Files,添加路径:D:\MATLAB 2010\extern\include (这是我电脑中Matlab的安装路径);再选择下拉列表中的 Library Files,添加路径:D:\MATLAB 2010\extern\lib\win32\microsoft(我电脑中Matlab 的安装路径,但是在我查看资料的时候看到很多是D:\MATLAB2010\extern\lib\win32\microsoft\msvc60这个路径,但是我用的是MatlabR2010a,msvc60是matlab6.5老版本才有的,10.0版本没有这个文件,所以我们把路径设到D:\MATLAB 2010\extern\lib\win32\microsoft 就可以了)。
第零章 MATLAB概述

otherwise
處理式3; end
17
0.4.4 while的語法:
while 條件式 運算式;
end
18
0.4.5 function的語法:
其格式為:
function 變數名稱=副程式名稱(輸入變數1, 輸入變數2..) (副程式內容)
2
三角函數
cos sin tan sec csc cot 例如: >> x=45/180*pi;sin(x) ans = 0.7071 >> x=45/180*pi;tan(x) ans = 1.0000
3
複數實部虛部
real(c) imag(c)
4
複數大小相位:
mag=abs(c) phs=angle(c)
3 >> rem(3,12) ans = 3
10
0.3 運算子
進行二個數字的運算或關係比較的符號 稱為運算子,大體上可分為三大類,依 序為四則運算子、關係運算子、邏輯運 算子。
11
0.3.1 四則運算子
程式最基本的運算為加減乘除其符號為+ - * /, 次方為^
A*B 意為一般的矩陣運算。
21
0.5 平面基本繪圖
繪圖指令非常多,plot為最基本的繪圖指令, 也是最常用的指令,功能為把一組一對一的資 料組分別畫到x軸與y軸上。
plot的指令格式: plot(x,y,’顏色+線樣+標示’)
例如:
t=1:20 plot(t,sin(t),’r:s’)
MATLAB_RTW__Engine操作步骤

1、搭建simulink模型输入幅度为3的阶跃信号进行测试得到输出为2、设置matlab新安装的matlab及vc,需要进行配置,在matlab窗口中输入mex –setup按提示进行默认配置即可。
3、设置仿真参数4、生成c代码生成文件在matlab当前目录下model_grt_rtw文件夹下5、新建vc工程(windows窗体程序)添加模型源文件(由simulink模型自动生成的)6、设置vc环境添加matlab相关文件引用7、项目属性设置对新增加的c源文件,修改预编译头工程属性8、文件修改model.h中增加//added by clh/////////////////////////////// extern void MdlOutputs(int_T tid);extern void MdlUpdate(int_T tid);extern void MdlInitializeSizes(void);extern void MdlInitializeSampleTimes(void); extern void MdlInitialize(void);extern void MdlStart(void);extern void MdlTerminate(void);extern RT_MODEL_model *model(void);///////////////////////////////////////////使用函数的文件(form1.h)中增加引用extern"C"{#include"model.h"#include"model_private.h"//#include "model_types.h"//#include "rtwtypes.h"//#include "rtmodel.h"//#include "rt_nonfinite.h" }Button按钮处理中增加得到输出结果结果一致。
Matlab代码生成(RTW)

Matlab代码生成(RTW)针对换挡省油提示系统项目代码生成过程如下:双击红色TCU0模块,进入TCU0子模块:选择Simulation/Configuration Parameters,打开配置参数界面:配置Solver,选择Fixed—step,因为是离散变量操作;解码器Solver选择ode1(Euler),Fixed-step size选择0。
004(4ms),与单片机执行周期对应;Tasking mode for periodic sample times:选择SingleTasking配置Hardware Implementation:选择Infineon C16xReal—time Workshop配置:系统目标文件选择ert.tlc;Language:选择C;使能生成文件Generate makefile;Make command:make_rtw;Template makefile:ert_default_tmfReport:配置为全部使能参数配置完成后,然后,主要对TCU模块进行定点数转换,右键TCU模块,选择Fixed-Point/Fixed-Point Advisor选择Run/Run to failure,会自动进行定点数转换检测定点数检测完成后,右键TCU模块,选择Real-Time Workshop/Build Subsystem点击Build后,会自动生成代码,产生代码生成报告:代码会保存在相应的目录下:双击打开TUC0_ert_rtw,将代码生成的C文件,HEX文件添加到单片机Keil程序中:最后6个文件为matlab代码生成的头文件和C文件.然后在单片机头文件中,调用一下四个头文件:那么Keil编译是肯定能通过的。
生成代码在程序中调用:首先在初始化程序中,调用TCU0_initialize(0),来完成生成代码的初始化过程。
在主程序中,每次给TCU0_U.Speed(车速),TCU0_U.throttle(油门开度),TCU0_U.Nee(转速)重新赋值,车辆上这三个值可以周期性的通过CAN采集到,然后通过生成代码TCU0_step()计算,便可得出期望档位TCU0_Y。
Matlab_RTW实时仿真与嵌入式系统开发

3 Keil 修改代码及 Keil 与 Proteus 的连接
① 通过 Proteus 的仿真结果可以得出 ,由 Matlab 生 成的代码同样具有正确性 ;
② 由 Matlab 直接生成代码可以将设计人员从繁重 的编写代码的工作中解脱出来 ,大大节省了开发时间 ,提 高了开发效率 ;
③本文所述过程为嵌入式系统的开发与实时仿真的 实现提供了参考 ,具有实际指导意义 。
④ Matlab_ Test_step ,包含于 Matlab_ Test . c 文件中 ,
由 rt_OneStep 调用 。在该函数中描述了具体模型的输入 输出的 关 系 。例 如 , 本 例 中 的 输 入 输 出 关 系 被 描 述 为
“Matlab_ Test_ Y. Out1 = Matlab_ Test_ U . In1 + Matlab
参考文献
[ 1 ] 陈永春. 从 Matlab/ Simulink 模型到代码实现[ M ] . 北京 :机 械工业出版社 ,1999.
[2 ] 汤涤. 系统实时仿真开发环境与应用[ M ] . 北京 :机械工业出 版社 ,2003.
[ 3 ] 王正林 ,王胜开 ,陈国顺 ,等. Matlab/ Simulink 与控制系统仿 真[ M ] . 北京 :电子工业出版社 ,2008.
_ Test_U . In2 ;”,即两个输入端口的输入值相加赋给输出
端口的接收量 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Interface
1
2
N
Interface
Run-Time Infrastructure (RTI)
实验目的
• RTW(Real-Time Workshop)
– MATLAB提供的自动化代码生成工具 – 将Simulink模型框图转化为标准的C代码
• Engine
以上各函数涉及到对MATLAB引擎的操作,在程序实现时应当置于同 一线程内。详细参数参见MATLAB联机帮助。
具体实验步骤
• 第一步:MATLAB中仿真模型的搭建和配置(以一 个简单二阶连续系统模型为例 )
– 搭建Simulink仿真模型
– 配置模型参数 • 在Solver属性页中将类型设为 定步长(即:Fixed-step),并 设置固定步长大小
• 头文件和库文件目录: %MATLAB%\EXTERN\INCLUDE\CPP; %MATLAB%\EXTERN\INCLUDE; %MATLAB%\EXTERN\LIB\WIN32\MICROSOFT\MSVC60
的输入) – 注意:extern “C”
基于MATLAB Engine的建模与仿真
实验原理
• MATLAB Engine的调用机制
– C语言调用接口,提供调用MATLAB(.m)程 序和SIMULINK模型的API函数
– VC应用与MATLAB的Client-Server操作方式
1、VC客户端提出数据请求 2、VC要送入MATLAB工作空间的数据结构都必须转化
1 In1
– 配置模型参数
s+1.1 s2+2.2s+3.3 Transfer Fcn
1 Out1
step),
(Fixedstep size)
联olv釐默
(Fixed-
具体实验步骤
• 第一步:MATLAB中仿真模型的搭建和配置
– 配置RTW参数
• grt.tlc:Generic Realtime Target/Target Language Compiler
状态; • 在Save to workspace选区中,
将各项全部选中,并在Final state文本框中输入变量名xFinal, 用于存储每个时间段运行结束时
的终端状态 • 注意数据类型的设置(数组、结
构、带时间变量的结构)
具体实验步骤
• 第二步:编写VC应用程序(以控制台模式为例)
– 创建工程,编辑MATLAB头文件和库文件支持
Time = $
MATLAB在系统建模仿真中的应用
• MATLAB
– 集成各类应用领域的专用库函数和模块 – 用于数值计算、系统建模、控制和信号处理的软件包
• MATLAB在系统建模与仿真中得到广泛应用
– 系统建模阶段(Design Time):可以利用simulink等工具对分系统或
单个仿真模型进行设计,如制导、控制分系统设计等 – 系统仿真阶段(Run Time):各仿真模型要在分布交互仿真的体系结
– Vxworks:tornado.tlc
• 只生成代码,不用生成可执行程序
grt.tlc
置釐al-能间验釐 Wo默页s长op
, Generate code
具体实验步骤
• 第二步:分析生成的C代码
– 生成与模型相关的文件列表
model.c
C
model_data.c
model.h
model_types.h model_private.h
内部的数据交换
实验原理
• 帧周期的概念与确定
– MATLAB中SIMULINK模型的运行不考虑仿真时间与墙钟时间的关系,
希望其“尽可能快”,属于非受限仿真的状态 – 在受限仿真或分布交互仿真环境中的一个节点上展开时,SIMULINK模
型的输出直接影响所在节点的输出,属于受限仿真的要求
– 分布式的MATLAB引擎工作结构
间片段结束后系统的输出状态变量作为下一个时间片的初始输入,
以实现仿真过程的连续性 – 基于SIMULINK的“From Workspace”和“To Workspace”模块
实现将输出与状态变量导入导出MATLAB工作空间
1 Simulink model
2 Simulink model
Matlab Workspace
基于MATLAB RTW的建模与仿真
RTW实验原理
• 在MATLAB中搭建Simulink仿真模型 • 仿真模型参数及RTW参数配置 • 自动生成C代码 • 在Visual C++环境中集成生成代码,构建仿真模型
具体实验步骤
• 第一步:MATLAB中仿真模型的搭建和配置
– 搭建Simulink模型 Model (以二阶连续系统为例)
model() MdlInitializeSizes()
• MdlInitializeSampleTimes():初始化采样次数 • MdlStart():启动模型(初始化条件)
– 模型执行
MdlInitializeSampleTimes() MdlStart()
• MdlOutputs() :计算系统输出
境中的数据结构1Biblioteka 8VC Client
2 47
Matlab Engine Matlab WorkSpace
3 56
Matlab Server
实验原理
• 帧周期的概念与确定
– 非受限仿真:在墙钟时间和仿真推进时间之间没有明显比例关系的仿真, 有时称为“尽可能快”的仿真。例如,利用解析模型构建的仿真通常是 非受限仿真
– MATLAB提供的C语言的调用接口 – 调用MATLAB资源(如SIMULINK模型)
• 实验目的:利用MATLAB RTW及Engine工具,通过两 种不同的方式在Visual C++环境中对Simulink模型进行 集成和调用,从而辅助在科研及工程实践中准确、通用、 快速地建立分布交互仿真体系结构下的复杂系统仿真模 型
–工具:
• 以计算机系统、与应用相关的物理效 应设备及仿真器为工具
–工作途径:
• 利用模型对已有的或设想的系统研究、 分析、试验、运行和评估(支持系统 全生命周期活动)
建建模模与与仿仿真真技技术术的的应应用用
• 军事领域 • 军–事武领器装域备研制
–武军器事装训备练研制 –军先事进训概练念与军事需求分析 –先进概念与军事需求分析
为mxArray格式的矩阵 3、MATLAB工作空间中的变量送入MATLAB服务器解算 4、5、通过接口函数的调用运行MATLAB命令 6、MATLAB状态变量与计算结果的反馈,以工作空间中
变量的形式存在 7、通过MATLAB Engine读取变量内容,仍需将其转换
为mxArray矩阵格式 8、VC客户端得到响应,mxArray数据结构转化为VC环
τ
Ts Td
Tr T
T ≥ Ts + Td + Tr
应用实例
• 某卫星通讯分布仿真系统
– 高频载波调制 – 考虑信号衰减、噪声影响 – 解调还原 – 信号波形,误码率显示
应用实例
• 某卫星通讯分布仿真系统
实验原理
• Engine常用接口函数
– engOpen——开启MATLAB引擎 – engClose——关闭MATLAB引擎 – engPutVariable——向MATLAB工作空间注入变量 – engGetVariable——从MATLAB工作空间获取变量 – engEvalString——执行MATLAB命令
– 其他相关生成文件:rt_nonfinite.c, rt_nonfinite.h, rtwtypes和 rtmodel.h ——定义RTW所需的必要参数
具体实验步骤
• 第二步:生成的C代码分析和调用
Start Execution
– 初始化
• model():模型注册 • MdlInitializeSizes():初始化大小
Matlab Workspace
Matlab Engine
Matlab Engine
simulation routine
simulation routine
RTI
实验原理
• 帧周期的概念与确定
– 简单Simulink模型,解算速度快于真实系统 – 考虑复杂Simulink模型,解算速度慢于真实系统 – 确定帧周期T
具体实验步骤
• 第一步:MATLAB中仿真模型的搭建和配置(以一个
简单二阶连续系统模型为例 )
– 运行模型
– 配置Workspace I/O属性页
• 在Load from workspace选区, 选中Initial state,并输入变量名 xInitial,用于从工作空间中加载 变量,决定时间段运行时的初始
• ExternalOutputs:model_Y
End
– 生成代码中的模型执行流程
model_Y
具体实验步骤
• 第三步:在Visual C++中对生成的代码进行编译运行
(以控制台模式为例)
– 建立控制台工程程序 – 添加MATLAB头文件、库文件目录
%MATLAB%\SIMULINK\INCLUDE; %MATLAB%\EXTERN\INCLUDE; %MATLAB%\RTW\C\LIBSRC
内容
• 实验目的 • 基于MATLAB RTW的建模与仿真
– 实验原理 – 实现步骤
• 基于MATLAB Engine的建模与仿真
– 实验原理 – 实现步骤
• 实验内容和考核要求
实验目的
建模与仿真技术
• 现代建模与仿真技术是一门多学 科的综合性技术