Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-09-08
年龄: 42
帖子: 2
声望力: 0 ![]() |
![]()
我现在写了一个S-FUNCTION
里面调用了一些M函数,当把S函数的名字写入S—FUNCTION块的时候 总是出现 ??? SWITCH expression must be a scalar or string constant. Error in ==> HSV at 32 switch flag, 不知道该如何处理了,请教大家了 AreaCXJTFT等都为M函数,如果我调用方式出现错误,请指出阿,:biggrin: :biggrin: 程序如下: 看着很麻烦,其实就是判断区域Area后,根据Area的值选择输出的计算方式: function [sys,x0,str,ts]=HSV(t,x,u,flag) switch flag, case 0 [sys,x0,str,ts] = mdlInitializeSizes; % Initialization case 3 sys = mdlOutputs(t,x,u); % Calculate outputs case { 1, 2, 4, 9 } sys = []; % Unused flags otherwise error(['Unhandled flag = ',num2str(flag)]); % Error handling end; function [sys,x0,str,ts] = mdlInitializeSizes sizes = simsizes; sizes.NumContStates= 0; sizes.NumDiscStates= 0; sizes.NumOutputs=7; sizes.NumInputs=2; sizes.DirFeedthrough=0; sizes.NumSampleTimes=1; sys = simsizes(sizes); str = []; ts = [-1 0]; function sys = mdlOutputs(t,x,u) P=u(1); Tamp=u(2)+273.15; if (273.15<=Tamp<=1073.15) &( 0.007<=P<=100) if (273.15<=Tamp<=623.15) Pst=Ps(Tamp); Pb12=Pst; if P>=Pb12 Area=1; else Area=2; end elseif (623.15<Tamp<863.15) Pb23=P23(Tamp); Pst=Ps(Tamp); if (623.15<Tamp<647.096) if P==Pst Area=4; elseif (Tamp==647.096)&(P==22.064) GV=0.003106; Area=4; end elseif P<Pb23 Area=2; else Area=3 end else (863.15<=Tamp<=1073.15) Area=2; end else return end switch Area, case 1 PS=16.53; %1区基本方程3.1中压力常数,MPa TS=1386; %1区基本方程3.1中温度常数,K GH=1; GS=1; GV=1; LH=TS*R0*(TS/Tamp)*AreaARr(P,Tamp); LS=R0*((TS/Tamp)*AreaARr(P,Tamp) -AreaAR(P,Tamp)); LV=TS*R0*AreaARY(P,Tamp)/(PS*1000); subArea=1; case 2 TS=540; %TS=540K PS=1; %PS=1Mpa LH=1; %2_过热蒸汽区中水的比焓不计算 LS=1; %2_过热蒸汽区中水的比熵不计算 LV=1; %2_过热蒸汽区中水的比容不计算 if P<=10 GH=R0*T0*(TS/Tamp)*AreaBaH(P,Tamp); GS=R0*AreaBaS; GV=R0*T0*(P/PS)*AreaBaV(P,Tamp); else GH=R0*T0*(TS/Tamp)*AreaBaH(P,Tamp); GS=R0*AreaBaS; GV=R0*T0*(P/PS)*AreaBaV(P,Tamp); end subArea=2; case 3 TS=647.096; %TS=647.096K LH=1; LS=1; LV=1; GH=R*TS*(AreaCTFT(P,Tamp)+AreaCDFD(P,Tamp)); GS=R*(AreaCTFT(P,Tamp)-AreaCF(P,Tamp)); GV=AreaCV(P,Tamp); subArea=3; case 4 LH=R*T*(AreaCNDTFT(P,Tamp)+AreaCNDDFD(P,Tamp)); LS=R*(AreaCNDTFT(P,Tamp)-AreaCNDF(P,Tamp)); LV=AreaCNDV(P,Tamp); GH=R*T*(AreaCXJTFT(P,Tamp)+AreaCXJDFD(P,Tamp)); GS=R*(AreaCXJTFT(P,Tamp)-AreaCXJF(P,Tamp)); GV=AreaCXJV(P,Tamp); subArea=4; otherwise return end sys=[LH,LS,LV,GH,GS,GV,subArea]; |
![]() |
![]() |
主题工具 | |
显示模式 | |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[求助]两个图像如何相乘? | Jael | MATLAB论坛 | 4 | 2013-09-22 15:10 |
[求助]关于动态博弈的仿真研究 | pp75557 | MATLAB论坛 | 3 | 2010-07-09 18:23 |
[求助]颜色直方图(新人报道=.=) | comet | MATLAB论坛 | 5 | 2009-05-02 01:37 |
[求助]如何将2维数组转换成1维数组? | wangzizizi | MATLAB论坛 | 3 | 2008-11-28 19:33 |
[求助]一个有关用设计的滤波器处理声音信号的问题。 | fujinhai | MATLAB论坛 | 7 | 2008-11-13 09:31 |