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模型
问题原因及解决方案
该错误是脚本调用仿真时触发了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
相关产品推荐
相关产品推荐




