You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MATLAB脚本创建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手动输入代码的效果完全一致,不会触发任何不必要的代码转换。

如果仅需简单表达式计算,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:54:55