主要内容

从模型和生成的代码调用外部C代码

使用遗留代码工具从模拟或生成的代码中调用现有的外部函数。

学习如何:

  • 评估一个C函数作为Simulink®模型仿真的一部分。

  • 从从模型生成的代码中调用C函数。

有关示例模型的信息,请参见为C代码生成准备一个控制算法模型

更换过程

打开示例模型,rtwdemo_PCG_Eval_P4

对于许多基于模型的设计应用程序,除了Simulink®模型之外,设计还包括一组已经过测试和验证的现有C函数。您可以将这些函数集成到Simulink®模型中,并生成使用这些函数的代码。

在本例中,您将创建一个自定义Simulink®块,该块调用现有的C函数。然后将块包含在模型中,并通过Simulink®中的模型仿真测试整个系统。

在示例模型中,可以用对现有C函数的调用替换PI控制器中的Lookup块(查找表)。函数在文件中定义SimpleTable.c而且SimpleTable.h

视图SimpleTable.c

视图SimpleTable.h

创建调用C函数的块

要指定对现有C函数的调用,请使用S-Function块。您可以使用遗留代码工具自动创建S-Function块。在该工具中,首先为现有的C函数指定一个接口。然后,该工具使用该接口创建S-Function块。

使用遗留代码工具为现有的C函数创建S-Function块SimpleTable.c

1.创建一个结构来包含函数接口的定义。

Def = legacy_code(“初始化”

你可以使用这个结构def定义现有C代码的函数接口。

2.填充结构的字段。

3.创建s函数。

legacy_code (“sfcn_cmex_generate”def)

4.编译s函数。

legacy_code (“编译”def)

5.创建S-Function块。

legacy_code (“slblock_generate”def)

生成的S-Function块调用中的C函数SimpleTable.c.你现在可以在模型中使用这个S-Function块。

6.创建TLC文件。

legacy_code (“sfcn_tlc_generate”def)

该命令创建一个TLC文件,该文件是S-Function的组件,用于指定如何为块生成代码。

通过模拟验证外部代码

在Simulink®模型中集成现有C代码时,验证生成的S-Function块。

要验证Lookup块的替换,请将Lookup块生成的模拟结果与新的S-Function块生成的结果进行比较。

1.打开验证模型。

  • 正弦波块从[-2:2]产生输出值。

  • 查找表的输入范围是[-1:1]。

  • 查找表输出输入的绝对值。

  • 查找表在输入限制处截取输出。

2.运行验证模型。

验证结果如图所示。现有的C代码和Simulink®表块产生相同的输出值。

验证C代码作为Simulink®模型的一部分

在将现有的C函数代码验证为独立组件之后,验证模型中的s函数。要完成验证,请使用测试集束模型。

1.打开测试套具。

2.运行测试工具。

仿真结果符合黄金值。

从生成的代码调用C函数

代码生成器使用TLC文件像处理其他块一样处理S-Function块。代码生成器可以实现表达折叠使用S-Function块,将多个计算组合为单个输出计算的操作。

1.构建完整的模型。

2.中生成的代码PI_Control_Reusable.c

生成的代码现在调用SimpleTableC函数。

图中显示了C代码集成前后生成的代码。在集成之前,代码调用生成的查找例程。集成完成后,生成的代码调用C函数SimpleTable

相关的话题

Baidu
map