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 ビュー (過去 30 日間)
古いコメントを表示
Arnoud
2013 年 9 月 29 日
コメント済み: Juan Miguel Serrano Rodríguez
2021 年 3 月 15 日
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 件のコメント
saladin ghanem
2016 年 4 月 5 日
編集済み: saladin ghanem
2016 年 4 月 5 日
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.
採用された回答
Vidhya Dharshini
2013 年 9 月 30 日
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.
その他の回答 (2 件)
Tarek Sobh
2014 年 2 月 23 日
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 件のコメント
Juan Miguel Serrano Rodríguez
2021 年 3 月 15 日
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
2016 年 4 月 5 日
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 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!