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

Matlab脚本调用Simulink报Invalid template makefile specified错误如何解决

错误现象

尝试运行Simulink仿真并在Matlab脚本中采集生成的仿真数据,该Simulink模型在Simulink客户端直接运行时输出结果符合预期,但当运行包含调用Simulink模型、处理采集数据逻辑的Matlab脚本时,Simulink诊断查看器抛出如下错误:

Invalid template makefile specified
Component: Simulink | Category: Model error
涉及的Matlab脚本代码
clear all;close all; clc;

Tps_sim = 5;

T = 0.001;
K = 25.24;
tho = 0.149;
A = 0.35;
B = -0.3;
S = 15;
Kteta = 2047/(2*pi);
Gzm=15/(15-((abs(A)+abs(B))/2));

Q1 = - 1.752;
Q0 =   1.767;
Q = Q0 - Q1;
t = transpose(0:T:Tps_sim);

l = 0;

for Consigne = [-3 3]
    
    l = l+1;
    
    C = Consigne * ones(1,length(t));

    E_95p = 0.95 * C;
    E_105p = 1.05 * C;
    
    figure (l) %Enlever cette ligne quand le commentaire au dessus est supprimé
    
    set_param('Lab_3','Solver','ode4','StopTime','Tps_sim','SimulationCommand','start'); %Enlever cette ligne et 3 en dessous quand supprimé le commantaire au dessus
    pause(1);
    set_param('Lab_3', 'SimulationCommand','stop');
    pause(2);
    yi = out.Ideal.signals.values;
    Si = stepinfo(yi,t,'SettlingTimeThreshold',0.05);
    TRi = Si.SettlingTime;
    
    subplot(3,1,1)
    plot(t,yi,t,C,t,out.CI.signals.values,t,E_95p,t,E_105p,TRi,yi(round(TRi/T)),'r*')
    title("Courbe d'évolution de la vitesse moteur idéal, Consigne = "+string(Consigne))
    xlabel("Temps (s)")
    ylabel("Vitesse (rad/s)")
    legend("Reponse","Consigne","Effort de Commande","Borne inférieure à 5%","Borne supérieure à 5%","Tr5% = "+string(TRi)+", Valeur = "+string(yi(round(TRi/T))));
    
    
    ym = out.ModeleNL.signals.values;
    Sm = stepinfo(ym,t,'SettlingTimeThreshold',0.05);
    TRm = Sm.SettlingTime;
    
    subplot(3,1,2)
    plot(t,ym,t,C,t,out.CM.signals.values,t,E_95p,t,E_105p,TRm,ym(round(TRm/T)),'r*')
    title("Courbe d'évolution de la vitesse modèle non-linéaire, Consigne = "+string(Consigne))
    xlabel("Temps (s)")
    ylabel("Vitesse (rad/s)")
    legend("Reponse","Consigne","Effort de Commande","Borne inférieure à 5%","Borne supérieure à 5%","Tr5% = "+string(TRm)+", Valeur = "+string(ym(round(TRm/T))));
end
关联Simulink模型
  • 名为"Lab_3"的Simulink模型全图
  • 模型上部放大图
  • 模型下部放大图
问题原因及解决方案

该错误是脚本调用仿真时触发了Simulink代码生成配置校验导致的:直接在Simulink界面运行时默认使用普通仿真模式,不会触发代码生成相关配置校验;而通过脚本set_param方式调用仿真时,如果模型配置的代码生成模板和当前环境不匹配,就会抛出该错误。
可按以下方案逐一排查解决:

  • 修正仿真启动参数
    首先在启动仿真的set_param中指定仿真模式为普通模式,同时修正StopTime参数的传值错误:原代码中StopTime传入的是字符串'Tps_sim',Simulink无法直接识别工作区变量,需要转成对应数值字符串。修改后的代码如下:
    set_param('Lab_3','SimulationMode','normal','Solver','ode4','StopTime',num2str(Tps_sim),'SimulationCommand','start');
    
  • 调整模型代码生成配置
    打开Simulink模型的「模型设置」→「代码生成」,确认「模板制作文件」选项与当前Matlab版本支持的编译器匹配;如果不需要生成代码,可直接将系统目标文件改为默认的grt.tlc,或直接重置模型配置为默认值。
  • 替换更稳定的仿真调用方式
    不使用set_param发送仿真指令,改用sim函数执行仿真,无需手动加pause等待仿真结束,也不会触发不必要的代码生成校验,写法参考:
    simOut = sim('Lab_3','Solver','ode4','StopTime',num2str(Tps_sim));
    out = simOut;
    

内容的提问来源于stack exchange,提问作者libano91

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:03