评估C函数作为模型仿真的一部分。
调用从生成的代码的外部的C函数。
能够打开和修改Simulink金宝app®模型和子系统。
能够设置模型配置参数。
能够阅读C语言代码。
安装一个,金宝app支持C编译器.
rtwdemo_throttlecntrl_extfunccall
模型文件
rtwdemo_ValidateLegacyCodeVrsSim
模型文件
/工具箱/ rtw / rtwdemos EmbeddedCoderOverview / stage_4_files / SimpleTable.c
/工具箱/ rtw / rtwdemos EmbeddedCoderOverview / stage_4_files / SimpleTable.h
金宝appSimulink模型是基于模型的设计的一部分。对于许多应用,一个设计还包括创建一组预先存在的C函数,测试(认证),和验证以外的MATLAB的®和仿真软金宝app件环境。您可以轻松地将这些函数集成到模型和生成的代码中。在快速模拟运行期间,可以在生成的代码中使用外部C代码访问硬件设备和外部数据文件。
这个例子说明了如何创建调用外部C函数的自定义块。当块是模型的一部分,你可以采取模拟环境的优势,进一步测试该系统。
要指定对外部C函数的调用,请使用功能块。您可以自动创建功能通过使用Simulink的遗留代码工具金宝app滑块。使用该工具,指定您的外部C函数的接口。然后利用该接口来自动创建一个功能块。
文件的制作副本SimpleTable.c
和SimpleTable.h
,所在的文件夹中
(开放).把副本放在你的工作文件夹中。matlabroot
/工具箱/ rtw / rtwdemos / EmbeddedCoderOverview / stage_4_files
创建一个功能块调用在仿真期间每个时间步长对指定的函数:
在MATLAB命令窗口中,创建一个函数接口定义结构:
def = legacy_code(初始化)
数据结构def
定义了功能接口到外部的C代码。
DEF = SFunctionName: '' InitializeConditionsFcnSpec: '' OutputFcnSpec: '' StartFcnSpec: '' TerminateFcnSpec: '' HeaderFiles:{} SourceFiles:{} HostLibFiles:{} TargetLibFiles:{} IncPaths:{} SrcPaths:{} LibPaths:{}SampleTime: '继承' 选项:[1x1的结构]
通过输入以下命令填充函数接口定义结构:
def.OutputFcnSpec=['double y1 = SimpleTable(double u1,',…'double p1[], double p2[], int16 p3)'];def.HeaderFiles = {' SimpleTable.h '};def.SourceFiles = {' SimpleTable.c '};def.SFunctionName =“SimpTableWrap”;
创建一个函数:
legacy_code( 'sfcn_cmex_generate',DEF)
编译S-功能:
legacy_code( '编译',DEF)
创建功能布洛克:
legacy_code (slblock_generate, def)
将打开一个新的模型窗口,其中包含SimpTableWrap
块。
创建功能块是一次性任务。一旦块存在,您就可以在多个模型中重用它。
模型保存到工作文件夹为:s_func_simptablewrap
.
对象创建目标语言编译器(TLC)文件功能布洛克:
legacy_code( 'sfcn_tlc_generate',DEF)
TLC文件是S-function的组件,它指定代码生成器如何为一个块生成代码。
有关使用遗留代码工具的更多信息,请参见:
使用遗留代码工具集成C函数(金宝app模型)
当您使用Simulink模型集成外部的C代码,使用代码之前,验证外部C函数代码作为独金宝app立组件的功能。
打开模型rtwdemo_ValidateLegacyCodeVrsSim
.该模型验证了S-功能块,你创建的。
的正弦波块从[:2 -2]产生输出值。
所述查找表的输入范围是从[-1:1]。
查找表的输出是输入的绝对值。
所述查找表输出的剪辑在输入限制的输出。
模拟模型。
通过打开查看验证结果验证
子系统,该子系统,单击范围块。
下图显示了验证结果。外部C代码和Simulink Lookup表块提供相同的金宝app输出值。
关闭验证模型。
在您验证外部C函数代码作为独立组件的功能之后,请验证模型中的s函数。使用测试工具模型来完成验证。
下面的过程需要Stateflow的®许可证。
开放rtwdemo_throttlecntrl_extfunccall
并保存副本throttlecntrl_extfunccall
在MATLAB路径上的可写文件夹。
检查PI_ctrl_1
和PI_ctrl_2
子系统。
抬头块已被替换为您使用旧代码的工具创建的块。
检查块参数设置SimpTableWrap
和SimpTableWrap1
.
关闭“阻断参数”对话框和PI子系统窗口。
打开测试工具模型,请右键单击Unit_Under_Test
模型块,并选择块参数(ModelReference).
集型号名称来throttlecntrl_extfunccall
.点击好的.
更新测试工具模型图。
模拟测试工具。
仿真结果符合预期的黄金价值。
保存并关闭throttlecntrl_extfunccall
和throttlecntrl_testharness
.
代码生成器使用TLC文件处理功能块。函数中嵌入的C代码调用功能布洛克:
可以使用数据对象。
受表达折叠,一种将多个计算组合成单个输出计算的操作。
开放throttlecntrl_extfunccall
.
为模型生成代码。
检查文件中生成的代码throttlecntrl_extfunccall.c
.
关闭throttlecntrl_extfunccall
和throttlecntrl_testharness
.
通过使用遗留代码工具,您可以轻松地将外部函数集成到模型和生成的代码中。
验证外部C函数代码的功能,将其作为独立组件集成到模型中。
在您验证外部C函数代码作为独立组件的功能之后,请验证模型中的s函数。