如何通过MATLAB脚本创建Simulink MATLAB Function块并写入指定代码
解决Simulink MATLAB Function块代码精准写入问题
方法1:直接修改MATLAB Function块的关联代码文件
MATLAB Function块的代码实际存储在独立的.m文件中,创建块后可直接读写该文件,完全绕过matlabFunctionBlock()的自动转换逻辑:
- 用
add_block()创建MATLAB Function块:blockPath = add_block('simulink/User-Defined Functions/MATLAB Function', 'myModel/MyFuncBlock'); - 获取块对应的代码文件路径:
funcFilePath = get_param(blockPath, 'MATLABFunction'); - 写入自定义代码到文件:
codeStr = ['function y = fcn(x)' newline ... 'y = sinc(x);' newline]; fid = fopen(funcFilePath, 'w'); fwrite(fid, codeStr); fclose(fid); - 刷新块使代码生效:
set_param(blockPath, 'Dirty', 'on');
该方法和GUI手动输入代码的效果完全一致,不会触发任何不必要的代码转换。
方法2:使用Simulink FCN块替代
如果仅需简单表达式计算,FCN块支持直接输入目标表达式,无额外转换逻辑:
- 创建FCN块:
fcnBlockPath = add_block('simulink/User-Defined Functions/FCN', 'myModel/MyFCNBlock'); - 设置目标表达式:
set_param(fcnBlockPath, 'Expression', 'sinc(u)');
FCN块轻量高效,适合单表达式场景,完美适配sinc(x)这类函数的直接使用。
方法3:通过Simulink代码对象接口修改
利用Simulink内置的代码对象接口,直接操作块的代码内容:
- 创建块后获取代码对象:
funcObj = get_param(blockPath, 'CodeObject'); - 设置自定义代码文本:
funcObj.Text = ['function y = fcn(x)' newline 'y = sinc(x);']; - 应用代码更改:
set_param(blockPath, 'CodeObject', funcObj);
该方法贴近Simulink内部代码管理逻辑,同样能实现精准写入。
额外提示
- 修改代码后可执行
slupdate(blockPath)强制更新块状态,确保模型识别最新代码。 - MATLAB Function块中使用
sinc(x)符合Simulink代码生成规则,无需担心兼容性问题。
内容的提问来源于stack exchange,提问作者Ponder Stibbons
相关产品推荐
相关产品推荐

