怎么使用m函数获取Simulink模型运行结果参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么使用m函数获取Simulink模型运行结果参数相关的知识,希望对你有一定的参考价值。

参考技术A 在用simulink搭建模型的时候,用到M文件中的参数的时候,不要直接输入参数的具体数值,而是用参数符号表示,比如,如果M文件中有a=1;这个参数,那么你再用simulink搭建模型的时候,涉及到这个量的时候,都用a表示,这样就可以了。。。

Simulink模型生成C语言

本文详细介绍了simulink(matlab2021)连续模型离散化,代码生成以及最终运行到Visual Studio 2022环境的详细过程,希望对大家有帮助。

第一步 创建Simulink模型


运行之后,通过Scope查看结果如下

注意:我们要确保模型仿真运行没有问题

第二步 将输入和需要的输出换成input和output模块

第三步 离散化模型

如果创建的Simulink模型中有连续模块比如积分环节,那麽一定要离散化,否则即使生成C代码也会报错。(为什么报错?先挖个坑)

点击设置

停止时间设置为inf,设置求解器,采样时间。

系统的目标文件选择为ert.tlc,即采用嵌入形式的C/C++代码生成,其结构更为简洁。生成的语言可选择C或者C++。

代码生成->接口

在模型资源管理器中查看定义的变量和配置的接口

模型离散化器对simulink模型进行离散化,离散后的效果如下

第四步 生成C代码

首先,对建立的模型进行离散化

我们借助APP中的embedded coder工具生成C代码

进行编译

然后使用快速开始,按步骤进行生成C代码

其中,我们现在选择的C语言类型为PC格式,还可以选择ARM板格式

生成的C代码如下所示(/xxxx_ert_rtw文件夹下)

第五步 在VS2022上运行

点击文件->新建->从现有的代码中创建




打开ert_main.c这个文件

OK,我们在while循环中编写控制程序
(下面是写入while循环中的部分程序)

 //定义文件地址和名字,指针
  FILE* file_path = fopen("simulation.txt", "a+");
  int i = 0;

  while (i < 20000) 
    /*  Perform application tasks here */

      if (i <= 20)
          rtU.In1 = 0;
      if (i > 20 && i <= 40)
          rtU.In1 = 60;

      /* Step the model */
      PID_Test_step();
      i++;

      fprintf(file_path, "%f %f\\n", rtU.In1, rtY.Out1); //写入
      printf("%f %f\\n", rtU.In1, rtY.Out1);
  
  fclose(file_path);//关闭文件

保存的数据如下所示

我们看一下转成C代码运行的效果(将上面数据绘制图形)

以上是关于怎么使用m函数获取Simulink模型运行结果参数的主要内容,如果未能解决你的问题,请参考以下文章

matlabm文件中如何调用simulink模块

如何把simulink用m语言控制

simulink仿真 为啥运行了很短时间就自己结束了

simulink matlab独立可执行文件无法获得输出

各位大神,MATLAB中如何将编写M函数文件与Simulink之间相互调用,小弟刚学不久,求指点。最好能详细一点。

MATLAB调用simulink时出现如下错误