Simulink模型生成C语言

该文详细介绍了如何使用Simulink(MATLAB2021)对连续模型进行离散化,并生成C代码,最终在VisualStudio2022中运行。步骤包括创建Simulink模型、设置离散化参数、生成C代码以及在VS2022中运行和调试。文章展示了从模型仿真到C代码执行的完整流程,适合嵌入式系统开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文详细介绍了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代码运行的效果(将上面数据绘制图形)
在这里插入图片描述

### 将 MATLAB Simulink 模型转换为 C 语言代码 #### 工具选择 为了实现这一目标,可以选择使用 `Matlab Coder`、`Simulink Coder` 或者更专业的 `Embedded Coder` 来完成从模型代码的转变过程[^1]。 #### 连续模块处理 当Simulink模型中存在连续时间模块(例如积分器),这些组件必须被离散化。未经过适当离散化的连续系统尝试编译成C/C++源文件时会遇到错误,因为实时硬件通常运行基于采样周期的任务调度机制,无法直接支持无限小的时间间隔计算操作[^2]。 #### 配置求解器设置 对于打算部署至实际设备上的应用来说,应该调整Simulink中的求解器参数以适应特定平台的需求。具体而言,在Solver选项卡里指定固定步长大小,并确保此值匹配最终执行环境下的定时特性;这一步骤至关重要,它决定了生成后的程序能否稳定工作于预期场景之中[^3]。 ```matlab % 设置求解器属性为例程的一部分 set_param('YourModelName', 'SolverMode', 'Fixed-step'); set_param('YourModelName', 'FixedStep', '0.001'); % 假设采用千分之一秒作为步长单位 ``` #### 实际转换流程 启动MATLAB并加载待转化项目之后: - 打开所需工程; - 调整上述提到的各项必要设定项; - 利用命令窗口输入如下指令来触发自动化编码工序: ```matlab coder.buildProject('your_project.prj','BuildType','Makefile'); ``` 或者通过图形界面访问Code Generation菜单下的相应功能按钮来进行交互式的构建活动。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RNG_uzi_

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值