matlab embedded fuction in simulink
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have used an m file named('XSteam.m') and I wanted to make a simulink model from this m file then I have made the embedded function code as the following
function [t,p,h,hv,hl,v,v_v,vl,s,sv,sl,u,uv,ul,x] = fcn(t1,p1,h1,v1,s1,u1,x1)
%#eml
eml.extrinsic('XSteam')
coder.extrinsic('XSteam');
if ((t1==0)&& (h1==0)&& (v1==0)&& (s1==0)&& (u1==0)&&(x1==0));
t=XSteam('Tsat_p',p1);
p=0;
hv=XSteam('hV_p',p1);
hl=XSteam('hL_p',p1);
v_v=XSteam('vV_p',p1);
vl=XSteam('vL_p',p1);
sv=XSteam('sV_p',p1);
sl=XSteam('sL_p',p1);
uv=XSteam('uV_p',p1);
ul=XSteam('uL_p',p1);
h=0;
u=0;
s=0;v=0;x=0;
elseif ((p1==0)&&(h1==0)&&(v1==0)&&(s1==0)&&(u1==0)&&(x1==0));
p=XSteam('psat_T',t1);
hv=XSteam('hV_T',t1);
hl=XSteam('hL_T',t1);
v_v=XSteam('vV_T',t1);
vl=XSteam('vL_T',t1);
sv=XSteam('sV_T',t1);
sl=XSteam('sL_T',t1);
uv=XSteam('uV_T',t1);
ul=XSteam('uL_T',t1);
t=0;
h=0;u=0;s=0;v=0;
elseif ((h1==0)&&(v1==0)&&(s1==0)&&(u1==0)&&(x1==0));
h=XSteam('h_pT',p1,t1);
s=XSteam('s_pT',p1,t1);
v=XSteam('v_pT',p1,t1);
u=XSteam('u_pT',p1,t1);
p=0;ul=0;uv=0;sl=0;sv=0;v_v=0;vl=0;hv=0;hl=0;x=0;
t=0;
elseif ((t1==0)&&(h1==0)&&(v1==0)&&(u1==0)&&(x1==0));
x=XSteam('x_ps',p1,s1);
u=XSteam('u_ps',p1,s1);
v=XSteam('v_ps',p1,s1);
t=XSteam('T_ps',p1,s1);
p=0;
s=0;ul=0;uv=0;sl=0;sv=0;v_v=0;vl=0;hv=0;hl=0;
elseif ((t1==0)&&(v1==0)&&(s1==0)&&(u1==0)&&(x1==0))
t=XSteam('T_ph',p1,h1);
v=XSteam('v_ph',p1,h1);
s=XSteam('s_ph',p1,h1);
u=XSteam('u_ph',p1,h1);
x=XSteam('x_ph',p1,h1);
p=0;
h=0;ul=0;uv=0;sl=0;sv=0;v_v=0;vl=0;hv=0;hl=0;
elseif ((t1==0)&&(v1==0)&&(u1==0)&&(p1==0)&&(x1==0))
t=XSteam('T_hs',h1,s1);
p=XSteam('p_hs',h1,s1);
h=0;s=0;ul=0;uv=0;sl=0;sv=0;v_v=0;vl=0;hv=0;hl=0;x=0;
else
h=XSteam('h_px',p1,x1);
u=0;s=0;p=0;x=0;ul=0;uv=0;sl=0;sv=0;v_v=0;vl=0;hv=0;hl=0;
end
then the model didn't work
and error messages appeared
I don't know the reasons for that because I am beginner in Simulink
If any one Can help me I will be grateful
[Merged information from duplicate question]
but when I run the model some errors display ""Sampled update was specified and no sample time was entered in chart Embedded MATLAB Function (#18)""
and ""Error reported by S-function 'sf_sfun' in 'steam/Embedded MATLAB Function/ SFunction ': Stateflow Suppress Error.""
1 Kommentar
TAB
am 15 Mai 2012
First of all your code is not readable at all.
Please format the code properly and specify which errors you are getting?
Antworten (2)
Mike Hosea
am 15 Mai 2012
I don't know anything about XSteam, but whenever you use an extrinsic function call, you need to pre-declare the output so that the compiler knows what the data type coming back from MATLAB is supposed to be before the model runs. Delete the eml.extrinsic line and keep the coder.extrinsic. Now, before any calls to XSteam, make sure the return variable is properly defined already. For example, if XSteam('T_ph',pl,hl) returns a 3-by-1 vector that is a 'uint8', then we should see
t = zeros(3,1,'uint8');
t = XSteam('T_ph',pl,hl);
It looks redundant, but that's how you do it, and the compiler knows better than to actually do both assignments. The first assignment just tells it that the data coming back from the extrinsic call is a 3-by-1 vector of 'uint8'. Of course you don't have to repeat the declarations in each case--you can collect them into one set at the top, before the if/elseif/elseif/.../else/end section.
You may have trouble with Simulink if any of the return types are different depending on which case is used. Make sure all the outputs are always the same class, size, and complexity (i.e., real or complex).
2 Kommentare
Kaustubha Govind
am 18 Mai 2012
Strange error for an Embedded MATLAB Function block. I'm not sure if this is a legitimate error - try reporting this to MathWorks Tech Support and see if they are able to provide a resolution?
Siehe auch
Kategorien
Mehr zu Simulink Functions finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!