matlab 生成信号文件,生成的代码如何存储内部信号、状态和参数数据

本文详细介绍了如何在MATLAB中生成代码,以存储内部信号、状态和参数数据。通过设置不同的代码生成选项,如不可重用的代码和可重入的代码,以及优化参数行为,可以控制代码的复杂性和效率。通过示例模型rtwdemo_roll,展示了如何生成和使用这些数据结构,并解释了生成代码中不同结构体的作用,如Block signals、Block states和实时模型数据结构体。最后讨论了代码生成优化,如消除内部数据存储,以实现更高效的代码。
摘要由CSDN通过智能技术生成

浏览模型示例

打开模型示例 rtwdemo_roll。

open_system('rtwdemo_roll')

5e94fb649b70ced301f71e6a67ab6f89.png

该模型包含不连接到根级别 Inport 或 Outport 模块的内部信号。某些信号具有名称,例如 phiCmd 信号。

该模型还包含一些维护状态数据的模块。例如,在 BasicRollMode 子系统中,标记为 Integrator 的 Discrete-Time Integrator 模块用于维护状态。

在模型中,将 Configuration Parameters > Code Generation > System target file 设置为 grt.tlc。

set_param('rtwdemo_roll','SystemTargetFile','grt.tlc')

检查 Configuration Parameters > Code Generation > Interface > Code interface packaging 的设置。设置 Nonreusable function 表示生成的代码不可重用(可重入)。

对于此示例,通过清除 Configuration Parameters > Code Generation > Interface > Advanced parameters > Mat-file logging 生成更简单的代码。

set_param('rtwdemo_roll','MatFileLogging','off')

生成不可重用的代码

设置以下配置参数:

将 Default parameter behavior 设置为 Tunable。

清除 Signal storage reuse。

set_param('rtwdemo_roll','DefaultParameterBehavior','Tunable',...

'OptimizeBlockIOStorage','off')

从模型中生成代码。

rtwbuild('rtwdemo_roll')

### Starting build procedure for: rtwdemo_roll

### Successful completion of build procedure for: rtwdemo_roll

文件 rtwdemo_roll.h 定义了几种表示内部数据的结构体类型。例如,模块输入和输出结构体为模型中的每个内部信号定义一个字段。每个字段名称都派生自生成该信号的模块的名称,或者派生自该信号的名称(如果您指定了信号名称)。

file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.h');

rtwdemodbtype(file,...

'/* Block signals (default storage) */','} B_rtwdemo_roll_T;',1,1)

/* Block signals (default storage) */

typedef struct {

real32_T phiCmd; /* '/ModeSwitch' */

real32_T Abs; /* '/Abs' */

real32_T FixPtUnitDelay1; /* '/FixPt Unit Delay1' */

real32_T Xnew; /* '/Enable' */

real32_T TKSwitch; /* '/TKSwitch' */

real32_T RefSwitch; /* '/RefSwitch' */

real32_T Integrator; /* '/Integrator' */

real32_T DispLimit; /* '/DispLimit' */

real32_T Sum; /* '/Sum' */

real32_T DispGain; /* '/DispGain' */

real32_T RateLimit; /* '/RateLimit' */

real32_T Sum1; /* '/Sum1' */

real32_T RateGain; /* '/RateGain' */

real32_T Sum2; /* '/Sum2' */

real32_T CmdLimit; /* '/CmdLimit' */

real32_T IntGain; /* '/IntGain' */

real32_T hdgError; /* '/Sum' */

real32_T DispGain_a; /* '/DispGain' */

real32_T Product; /* '/Product' */

boolean_T NotEngaged; /* '/NotEngaged' */

boolean_T TKThreshold; /* '/TKThreshold' */

boolean_T RefThreshold2; /* '/RefThreshold2' */

boolean_T RefThreshold1; /* '/RefThreshold1'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值