SuperAPI AI 工具集

simulink-use-c-function-block

通用与其它

查看项目

更新于 10-16 09:31

技能介绍

用途:在 Simulink 模型中通过 C Function 模块调用、封装或集成 C/C++ 代码、自定义代码与遗留代码,也可将 C++ 类接入模型或测试台,并配置某算法模块的输入、输出与参数。不适用于不含 C/C++ 集成的普通建模、MATLAB Function 模块,以及 Embedded Coder/Simulink Coder 的代码生成工作流,本技能仅面向仿真期配置。

主要能力:用 model_edit 以 type "C Function" 添加模块并设置 CustomCodeSettingLocation(默认 "BlockSettings");在模块或模型配置中指定头文件与源文件;通过 SymbolSpec 对象定义模块的输入、输出、InputOutput 直通、Persistent 状态、Constant 与 Parameter 符号,并设置 Type、Size、Label、PortNumber 等属性。符号类型可由 C/C++ 参数与返回类型推导(如 float→single、bool→boolean、char*→string),替换既有模块时优先沿用其原有类型。

必要用法:先用 model_query_params 获取 SymbolSpec,再用 evaluate_matlab_code 操作,例如 obj = get_param('myModel/MyCFunction','SymbolSpec'); 随后调用 obj.addSymbol('varName')、obj.getSymbol、obj.deleteSymbol。addSymbol 默认生成 double、Input、size '1';重新添加被删符号时需显式重设 Type、Scope、Size。Parameter 取值以参数名为键配置模块。对 C++ 类,必须先在外部头文件中定义,再以 Persistent 作用域、Type 为 'Class: ClassName' 声明实例,构造参数写在 Name 中(如 'myObj(p)'),并须为 Parameter 或 Constant 符号;有 init 方法(非构造器)时在 StartCode 调用;类方式无法编译时才退回包装函数或不透明指针模式。自定义代码路径建议用相对模型文件的相对路径。

限制:代码段中不允许 #include;Start/Terminate 代码不能访问 Input/Output 符号;Constant 必须为标量;输入维度不支持 size() 表达式,输出维度支持但不能为 '-1';不支持嵌套 size(size(...));ParseBlockCode='on' 或 CustomCodeSettingLocation='ModelConfigurationParameters' 时库函数(如 isalnum)不可用于代码段;使用 Simulink.NumericType 时 IsAlias 必须为 true;类类型不支持 save/restore(SimSnapshot);不支持可变大小信号;类定义不得写在代码段内。其余细节与示例见随附参考文档。