MATLAB App Designer与Simulink:联合开发数据交互

在我们matlab appdesigner开发UI的时候,由于项目中使用到 Simulink,如果使用sim函数在脚本中启动simulink,这种方式是没法将设计出来的ui app编译成可执行文件的,这样的方式只能调试时启动,如果我们想要将ui app编译成exe文件给到其他人使用,以下将提供一种方案实现:

1、首先将simulink编译成C/C++代码,这里有部分需要注意:

(1)为了将simulink编译成c/c++代码的时候能够正常编译,需要在工作空间中构建出相应的simulink需要的数据,相当于为所有simulink外部输入赋初始值。

(2)simulink中的外部输入数据需要使用from workspace控件实现导入。

(3)常量值可用Constant控件随便设置一个值。

当然也可以在simulink空白处右键选择model properties->Callbacks->InitFcn,在右边空白处写入初始化脚本,切记这里是为simulink的外部输入赋初始值,并不是设置了这里之后,就会随着外部文件改变而改变simulink的外部输入值。

 

(4)当所有的初始值设置完毕,选择界面APPS->Simulink Coder进入编译界面,选择Settings,由于我们需要将输出的数据保存成mat文件,以便simulink的仿真数据可以传回app,所以选择Data Import/Export界面将OutPut选上,并设置名字。

(5)然后来到Code Generation界面,设置编译选项,Language选项根据需求选择C或者C++,System target file选择grt.tlc 创建一个visual studio的工程。

(6)选择Solver,设置仿真时间,点击apply

(7)关闭Setting界面,回到主界面,点击Build开始编译vs工程,等待编译结束,如果所有的外部输入变量设置正确,编译就会正常,没有任何报错,最后会在当前目录下面生成vs工程,例如模块名称是ACC_DEMO,生成的工程目录就是ACC_DEMO_grt_rtw,选择msvc目录,里面有工程文件,点击工程文件启动,进去之后编译工程就会生成exe文件了。

(8)此时编译生成的exe文件还不是能够跟随app导出txt数据文件变化的exe,需要手动修改工程,将txt文件中的数据读取进来,然后赋值给相关变量,这种就跟simulink的设计息息相关了,给出一个读取txt文件的函数以供参考,需要将loadData函数加到main函数开头。

#include <fstream>

#include <iostream>

#include <string>

extern real_T pErrData[120000];

extern real_T pRefData[240000];

extern  ConstP_ARNC_60rough_T ARNC_60rough_ConstP;

(9)由于没有设置仿真的步长,我们需要找到仿真步长的设置,将之改成我们时间序列中的步长

(10)重新编译,生成exe文件,好了到此,simulink编译的exe文件就每次启动的时候可以读取ui app生成的data.txt文件了。

2. 回到ui app这边,当我们在界面中导入所有的输入参数以后,我们需要把参数打包成txt文件,然后启动编译出来的simulink exe文件,最后读取simulink仿真结束生成的mat文件即可,参考步骤如下:

(1)将需要传输给Simulink的数据使用writematrix(matlab202b是这个API,以前的版本可能有所不同,可以自行更改)函数写入txt文件,注意这里的数据得是列向量,为了方便simulink读取,可以将所有的数据都合在一个变量中,例如

function [] = saveData(ref, mic, G_Reshaped, alpha)

    ref_data = [ref(:,2); ref(:,3); ref(:,4); ref(:,5);ref(:,6);ref(:,7); ref(:,8); ref(:,9)];

    mic_data = [mic(:,2);mic(:,3);mic(:,4);mic(:,5)];

    data = [ref_data;mic_data;G_Reshaped';alpha];

    writematrix(data, 'data.txt');

end

(2)启动simulink exe文件,这里需要注意data.txt文件的路径,我这边是将ui app, simulink app, data.txt三个文件放在同一个目录中的。在脚本文件中使用

execmd = [‘Simulink_app.exe ' ];

status = system(execmd);

启动即可。

(3)等待Simulink_app.exe运行完毕,在后续读取生成的mat文件获得仿真结果即可。

 

总结:ui app跟simulink联合开发是需要先将simulink编译成exe文件,最终打包ui app也为exe文件,两者的数据交互需要ui app将数据写入txt文件,simulink读取txt文件,完成计算后输出mat文件,最后ui app读取mat文件即可获取仿真结果。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空