主要内容

使用带有结构参数的遗留函数的总线

本示例向您展示如何使用遗留代码工具使用Simulink®总线将遗留C函数与结构参数集成。金宝app

遗留代码工具允许您:

  • 提供遗留函数规范,

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

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

提供遗留函数规范

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

counterbusFcn(COUNTERBUS *u1, int32_T u2, COUNTERBUS *y1, int32_T *y2)

其中COUNTERBUS是定义在counterbus.h并通过Simulink实现。金宝app基本工作区中的总线对象。遗留源代码可以在文件中找到counterbus.h,counterbus.c

evalin (“基地”“负载sldemo_lct_data.mat”% sldemo_sfun_counterbusdef = legacy_code (“初始化”);def.SFunctionName =“sldemo_sfun_counterbus”;def.OutputFcnSpec ='void counterbusFcn(COUNTERBUS u1[1], int32 u2, COUNTERBUS y1[1], int32 y2[1])';def.HeaderFiles = {“counterbus.h”};def.SourceFiles = {“counterbus.c”};def.IncPaths = {“sldemo_lct_src”};def.SrcPaths = {“sldemo_lct_src”};

生成和编译用于模拟的s函数

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

legacy_code (“generate_for_sim”def);
开始编译sldemo_sfun_counterbus mex('-I/mathworks/dev /bat/Bdoc20b/build/matlab/toolbox/simulink/simdemos金宝app/simfeatures/sldemo_lct_src', '-I/tmp/Bdoc20b_1595526_151713/tpd36f2565', '-c', '-outdir', '/tmp/Bdoc20b_1595526_151713/tp1a8f39a6_17be_4434_9681_141b9f9bc7cd', '/mathworks/devel/bat/Bdoc20b/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src/counterbus.c')墨西哥人成功完成。mex('sldemo_sfun_counterbus.c', '-I/mathworks/dev /bat/Bdoc20b/build/matlab/toolbox/s金宝appimulink/simdemos/simfeatures/sldemo_lct_src', '-I/tmp/Bdoc20b_1595526_151713/tpd36f2565', '/tmp/Bdoc20b_1595526_151713/tp1a8f39a6_17be_4434_9681_141b9f9bc7cd/counterbus.o')使用'gcc'编译。墨西哥人成功完成。###完成编译sldemo_sfun_counterbus ###退出

生成一个rtwmakecfg。m代码生成文件

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

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

legacy_code (“rtwmakecfg_generate”def);

生成一个屏蔽s函数块,用于调用已生成的s函数

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

% legacy_code (slblock_generate, def);

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

该模型sldemo_lct_bus显示与遗留代码的集成。子系统TestCounter充当对遗留C函数调用的工具。

open_system (“sldemo_lct_bus”) open_system (“sldemo_lct_bus / TestCounter”) sim卡(“sldemo_lct_bus”
ans =仿金宝app真软件。SimulationOutput: ScopeDataA: [301x4 double] ScopeDataA1: [301x4 double] tout: [301x1 double] SimulationMetadata: [1x1 金宝appSimulink. txt]SimulationMetadata] ErrorMessage: [0x0 char]