I am trying to integrate the XSteam mfile in my simulink model through a MATLAB function block, only this error occurs: Variable 'hs' is undefined on some execution paths.
15 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Arnoud
el 29 de Sept. de 2013
Comentada: Juan Miguel Serrano Rodríguez
el 15 de Mzo. de 2021
This is what my own function file looks like:
function h = fcn(t,p)
%#codegen
h=XSteam('h_pt',p,t);
And this is de part where the error is referring to in the XSteam mfile:
function h4L_p = h4L_p(p)
if (p > 0.000611657 & p < 22.06395)==1
Ts = T4_p(p);
if p < 16.529
h4L_p = h1_pT(p, Ts);
else
%Iterate to find the the backward solution of p3sat_h
Low_Bound = 1670.858218;
High_Bound = 2087.23500164864;
ps=-1000;
while abs(p - ps) > 0.00001
hs = (Low_Bound + High_Bound) / 2;
ps = p3sat_h(hs);
if ps > p
High_Bound = hs;
else
Low_Bound = hs;
end
end
h4L_p = hs; ERROR OCCURS ON THIS LINE(line 2480 in XSteam)
if true
% code
end
end
else
h4L_p = -99999;
end
if true
% code
end
The complete XSteam mfile can be found at:
I already tried to place "persistent hs;" after function, but that didn't solve the problem.
2 comentarios
saladin ghanem
el 5 de Abr. de 2016
Editada: saladin ghanem
el 5 de Abr. de 2016
Hi, I've found this code below and it worked for me.
function h10 = fcn(Pb)
%#codegen
coder.extrinsic('XSteam');
h10 = coder.nullcopy(zeros(size(Pb)));
h10=XSteam('hL_P',Pb);
You can change hL_P and play with you code. I hope you can make use of it.
Respuesta aceptada
Vidhya Dharshini
el 30 de Sept. de 2013
hi, when you are using a matlab function block always ensure that each output has its own execution path. for example cosider the following code
if(i>0)
y=10
else if(i<0)
y=5
end
when you run this inside a matlab function block you will get the error because what if the value i is a NaN. so always try to end your if statements with a simple else statement.This will solve your problem.
Más respuestas (2)
Tarek Sobh
el 23 de Feb. de 2014
Hello Arnoud, I'm basically trying to do the same thing, however, I'm getting the same errors that you used to get. Can you please elaborate on how you were able to solve the problem? Did you edit the XSteam.m file? Thanks.
1 comentario
Juan Miguel Serrano Rodríguez
el 15 de Mzo. de 2021
Hi Tarek, probably you don't need this anymore but hopefully it might help someone else or yourself. What I did was check where the error was ocurring and found there is a while statement in which the hs is defined but it was being used outside of this while so if the condition of the loop was not met then h4V_p would equal to a variable which does not exist.
function h4V_p = h4V_p(p)
if (p > 0.000611657 & p < 22.06395)==1
Ts = T4_p(p);
if p < 16.529
h4V_p = h2_pT(p, Ts);
else
%Iterate to find the the backward solution of p3sat_h
Low_Bound = 2087.23500164864;
High_Bound = 2563.592004+5;
ps=-1000;
% hs not defined before while !! So add this line:
hs = (Low_Bound + High_Bound) / 2;
while abs(p - ps) > 0.000001
hs = (Low_Bound + High_Bound) / 2;
ps = p3sat_h(hs);
if ps < p
High_Bound = hs;
else
Low_Bound = hs;
end
end
% so it may not exist when used here
h4V_p = hs;
end
else
h4V_p = -99999;
end
saladin ghanem
el 5 de Abr. de 2016
Hi, I've found this code below and it worked for me.
function h10 = fcn(Pb)
%#codegen
coder.extrinsic('XSteam');
h10 = coder.nullcopy(zeros(size(Pb)));
h10=XSteam('hL_P',Pb);
You can change hL_P and play with you code. I hope you can make use of it.
0 comentarios
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!