MATLAB/simulink生成代码的系统设置、数据对象的处理、代码等效性测试

1、solver设置:必须选择固定点解算器

 

2、optimization – parameters设置:

勾选,参数将以常数的方式直接生成到代码逻辑中,不再以一个参数变量的形式生成。

勾选生成的代码会为了节省储存用量,而不为中间信号生成中间变量(如命名的信号线)

 

3、code generation设置:

系统目标文件ert.tlc文件是Embedded Coder 提供的能够生成专用于嵌入式系统C代码的系统目标文件。

系统目标文件grt.tlc,由simulink code生成代码

勾选只生成代码,不对生成的代码进行编译链接

勾选生成的代码打包,并需命名压缩包

 

4、code generation - report设置:

勾选创建模型生成报告并自动打开。

勾选将会在代码生成报告中包含静态代码的参数指标。

勾选 报告中含有模型到代码、代码到模型的双向追踪。

 

5、code generation - comments设置:

勾选在生成的代码中添加注释。

勾选注释中有代码到模型的超链接。

模型到代码方法:右击模块选择C/C++code—navigate to C code

 

6、code generation – code style:

括号生成频率、if-else与switch-case语句的选用、是否保留函数声明中的extern关键字、缩进方式、缩进字节等。

 

7、code generation – code placement:生成文件的组织方式

compact简洁只包含model.c和model.h

 

8、code generation – data type replacement:

自定义类型名不仅是一个别名字符串,还必须在Base Workspace中定义其作为Simulink.AliasType类型对象才可以。

 

9、code generation – interface:

默认不勾选生成的代码层次较少,执行效率略高。

勾选输出与状态更新生成到同一个函数model_step(),不勾选则分开生成model_update()和model_output()函数。

勾选可以为模型生成model_terminate()终止函数。

勾选生成代码时模型中的信号变量及状态变量将会结合在一个结构体变量中,不勾选信号变量与状态变量分别存储。

code generation – interface – configure model functions:

整体模型入口函数接口自定义:

这时输入输出数据的存储类型要设置为auto。

列表中后三项表示:

 

10、Verification设置:

是否使能代码中函数执行时间记录、代码覆盖度记录,以及是否创建SIL和PIL的模块等。在等效性测试细说。

 

11、Memory section设置:

 

12、子系统函数接口自定义

Main页面:勾选将子系统设置为原子子系统(此时子系统模块边框加粗显示)

Code generation页面:function package有以下四种选项,

可通过此页面设置子系统生成的函数名字、文件名字等。

 

13、信号线自定义

外部信号线设置为simulink.signal:

structname相同时,多个信号线生成到同一结构体变量中。

勾选实现数据对象(m语言)与信号线的绑定,绑定了数据对象的信号线上有一个蓝色右向三叉标记。

//此处input即为自定义命名,且in1与in2生成在同一结构体中

当storage class选择BitField时可以将一个完整的字节划分为不同的二进制位区,实现单个位域结构体的生成,节省存储空间。此时需要将模型的输入输出类型改为布尔型。

外部信号线设置为mpt.signal:

子系统信号线:勾选显示单个信号的传播信号标签。

 

14、数据对象的创建和设定Ctrl+H打开Model Explorer管理页面

 

15、命令窗口输入>> targetinstaller打开附加功能资源管理器,下载外设驱动库

下载之后,如何添加:

 

16、代码使用对象的数据管理,使生成的代码更简洁:

对于信号线的数据管理:给信号线命名x。

在workspace中添加与信号线同名x的simulink signal。

勾选信号和信号对象之间关联起来。

对参数的数据管理:需勾选,并添加mpt parameter 命名为k

数据的保存:保存工作空间的数据到.m文件,也可以通过操作.m文件改变这些变量的属性。

在工作空间输入>> Simulink.saveVars('my_m_data.m')

 

17、代码生成的优化设置,通过向导选择合适的代码生成配置

先设置,再点击

 

18、平台化代码设置:基于Variant Subsystem模块

内部有两个不同的子系统,可选择不同的工作方式

右击Variant Subsystem选择block parameters

并勾选,然后在interface设置如下

生成的代码中含有if-elseif的选择分支编程。

 

19、等效性测试:

法一:设置data-input使用外部输入,分别normal和SIL模式下运行,记录输出,输出差别不大,生成代码和模型是一致的,否则可能引入了一些错误。

法二:选择verification – create block为SIL,不勾选

设置好之后Ctrl+B,会生成一个子系统,把它copy到模型中并把输入输出连接,然后运行模型,如果这时两个输出差别不大则认为模型和生成代码是一致的。(输入越多越好,包含多种情况)

 

 

 

By chaikeya 2020/4/22

 

  • 16
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
如果您要对Simulink中的状态量进行非线最小二乘拟合,可以使用Simulink Design Optimization工具箱中的函数进行拟合。以下是一个示例模型: 1. 在Simulink中创建一个模型,将状态量作为输入信号,并将输出信号与期望输出信号进行比较,得到误差信号。 2. 在Simulink Design Optimization工具箱中选择“Parameter Estimation”工具,将误差信号作为输入信号,并将状态量作为待估参数。 3. 设置算法选项,如最大迭代次数、终止容差等。 4. 运行参数估计算法,获得最优参数值。 以下是一个示例代码: ```matlab % 定义Simulink模型 mdl = 'example'; open_system(mdl); % 定义输入和输出信号 input_signal = Simulink.Signal; output_signal = Simulink.Signal; % 定义状态量 param = Simulink.Parameter; param.Value = 1; % 定义误差信号 error_signal = Simulink.Signal; % 设定参数估计选项 options = sdo.OptimizeOptions('Method','lsqnonlin','MaxIter',100); % 运行参数估计算法 [estimates,results] = sdo.optimize(mdl,input_signal,output_signal,param,error_signal,options); ``` 在该示例代码中,我们定义了一个Simulink模型,并将状态量作为待估参数。我们使用Simulink Design Optimization工具箱中的函数进行非线最小二乘拟合,并通过设置选项禁用了算法的终止条件。您可以根据您的具体情况修改代码中的Simulink模型、输入和输出信号、状态量、误差信号以及选项等参数来进行参数估计,并禁用算法的终止条件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值