文档

使用遗留函数指定或继承的样本时间

这个示例向您展示了如何使用遗留代码工具将遗留C函数与指定的、继承的和参数化的示例时间集成在一起。

Legacy Code Tool允许您:

  • 提供遗留功能规范,

  • 生成一个C-MEX s -函数,该函数在模拟过程中用于调用遗留代码

  • 编译并构建生成的仿真s函数。

提供遗留功能规范

遗留代码工具提供的函数以特定的数据结构或结构数组作为参数。通过使用initialize作为第一个输入调用函数legacy_code()来初始化数据结构。在初始化结构之后,您必须将其属性赋给与集成的遗留代码相对应的值。有关属性的详细帮助,请致电legacy_code(“帮助”).在这个例子中调用的遗留函数的原型是:

FLT增益标量(常量FLT输入,常量FLT增益)

其中FLT是float的类型定义。遗留的源代码可以在这些文件中找到your_types.hgain.h,gainScalar.c

def = [];% sldemo_sfun_st_inheriteddef = legacy_code (“初始化”);def.SFunctionName =“sldemo_sfun_st_inherited”;def.OutputFcnSpec ='single y1 = gainScalar(single u1, single p1)';def.HeaderFiles = {“gain.h”};def.SourceFiles = {“gainScalar.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};def = [def;def);% sldemo_sfun_st_fixeddef = legacy_code (“初始化”);def.SFunctionName =“sldemo_sfun_st_fixed”;def.OutputFcnSpec ='single y1 = gainScalar(single u1, single p1)';def.HeaderFiles = {“gain.h”};def.SourceFiles = {“gainScalar.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};def.SampleTime = [2 1];def = [def;def);% sldemo_sfun_st_parameterizeddef = legacy_code (“初始化”);def.SFunctionName =“sldemo_sfun_st_parameterized”;def.OutputFcnSpec ='single y1 = gainScalar(single u1, single p1)';def.HeaderFiles = {“gain.h”};def.SourceFiles = {“gainScalar.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};def.SampleTime =“参数化”;def = [def;def);

生成和编译用于仿真的s函数

再次调用函数legacy_code(),将第一个输入设置为'generate_for_sim',以便根据输入参数'defs'提供的描述自动生成和编译C-MEX s -函数。该s函数用于在仿真中调用遗留函数。s函数的源代码可以在文件中找到sldemo_sfun_st_inherited.csldemo_sfun_st_fixed.csldemo_sfun_st_parameterized.c

legacy_code (“generate_for_sim”def);
# # #开始编译sldemo_sfun_st_inherited墨西哥人(“我/ mathworks猛击/棒/ Bdoc19b /构建/ matlab工具箱/模型/ simdemos / simfeat金宝appures / sldemo_lct_src’,‘我/ tmp / Bdoc19b_1305395_49106 / tpf830ec90’,‘- c’,‘-outdir’,‘/ tmp / Bdoc19b_1305395_49106 / tp5f7153d4_dbad_4aa1_81e7_8ad4bce84d5b’,'/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/金宝appsimulink/simdemos/simfeatures/sldemo_lct_src/gainScalar.c')墨西哥人成功完成。/tmp/Bdoc19b_1305395_49106/tpf830ec90', '/tmp/Bdoc19b_1305395_49106/tp5f7153d4_dbad_4aa金宝app1_81e7_8ad4bce84d5b/gainScalar.o')使用gcc构建。墨西哥人成功完成。# # #完成编译sldemo_sfun_st_inherited退出# # # # # #开始编译sldemo_sfun_st_fixed墨西哥人(“我/ mathworks猛击/棒/ Bdoc19b /构建/ matlab工具箱/模型/ simdemos / simfeatures / sldemo_金宝applct_src’,‘我/ tmp / Bdoc19b_1305395_49106 / tpf830ec90’,‘- c’,‘-outdir’,‘/ tmp / Bdoc19b_1305395_49106 / tp21a16ff3_fef8_45d6_99d3_39038d471609’,'/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/金宝appsimulink/simdemos/simfeatures/sldemo_lct_src/gainScalar.c')墨西哥人成功完成。/tmp/Bdoc19b_1305395_49106/tpf830ec90', '/tmp/Bdoc19b_1305395_49106/tp21a16ff3_fef8金宝app_45d6_99d3_39038d471609/gainScalar.o')使用gcc构建。墨西哥人成功完成。 ### Finish Compiling sldemo_sfun_st_fixed ### Exit ### Start Compiling sldemo_sfun_st_parameterized mex('-I/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src', '-I/tmp/Bdoc19b_1305395_49106/tpf830ec90', '-c', '-outdir', '/tmp/Bdoc19b_1305395_49106/tp6f4b80fd_4335_46d5_8aee_d44adf472a29', '/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src/gainScalar.c') Building with 'gcc'. MEX completed successfully. mex('sldemo_sfun_st_parameterized.c', '-I/mathworks/devel/bat/Bdoc19b/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src', '-I/tmp/Bdoc19b_1305395_49106/tpf830ec90', '/tmp/Bdoc19b_1305395_49106/tp6f4b80fd_4335_46d5_8aee_d44adf472a29/gainScalar.o') Building with 'gcc'. MEX completed successfully. ### Finish Compiling sldemo_sfun_st_parameterized ### Exit

生成一个rtwmakecfg。m用于代码生成的文件

创建TLC块文件之后,可以再次调用函数legacy_code(),将第一个输入设置为'rtwmakecfg_generate',以生成rtwmakecfg。m文件支持通过Sim金宝appulink®Coder™生成代码。金宝app生成rtwmakecfg。如果S-functions所需的源文件和头文件不在与S-functions相同的目录中,并且您希望在代码生成期间生成的makefile中添加这些依赖项。

注意:只有当您打算在加速模式下模拟模型时,才需要完成此步骤。

legacy_code (“rtwmakecfg_generate”def);

生成蒙面s函数块,用于调用生成的s函数

在编译C-MEX s -函数源之后,可以再次调用函数legacy_code(),将第一个输入设置为'slblock_generate',以生成被配置为调用这些s -函数的屏蔽s -函数块。这些块被放置在一个新的模型中,并且可以复制到一个现有的模型中。

% legacy_code (slblock_generate, def);

演示与遗留代码生成的集成

该模型sldemo_lct_sampletime显示与遗留代码的集成。子系统sample_time作为对遗留C函数调用的工具,使用单元延迟存储以前的输出值。

open_system (“sldemo_lct_sampletime”) open_system (“sldemo_lct_sampletime / sample_time”) sim卡(“sldemo_lct_sampletime”);