Simscape Language Chamber with Orifice
1 view (last 30 days)
Show older comments
Cedric Götze
on 16 Jul 2015
Answered: Cedric Götze
on 21 Jul 2015
Unfortunately it is not possible to create Subsystem automated inside a Simscape Library. So I have to find an other way to solve the following problem.
I have a chamber which is similar to the constant volume chamber of the pneumatic library. I want to connect it to an orifice and an atmospheric reference in just one block.
My idea was the following code
component chamber2
% Constant Volume Pneumatic Chamber with opening
nodes
A = test.test; % A:top
end
parameters
Volume = { 1e-3, 'm^3' }; % Chamber volume
Area = { 1e-5, 'm^2' }; % Opening area
p2 = { 1e5, 'Pa' }; % Pressure at opening
end
parameters(Access = private)
Bcr = { 0.5283 , '1' }; % Critical pressure ratio (for choked flow)
% Collected constant terms for flow equation
c_1 = { 0, 'kg*K/J' };
c_2 = { 0, '1' };
c_3 = { 0, '(kg*K/J)^0.5' };
c_4 = { 0, '(kg*K/J)^0.5' };
c_5 = { 0, '1' };
end
variables
G = { 0, 'kg/s' }; % Mass flow rate
Q = { 0, 'J/s' }; % Heat flow into port A
p1 = { 1e5, 'Pa' }; % Pressure at port A
end
variables(Conversion=absolute)
T1 = { 300 , 'K' }; % Temperature at port A
end
function setup
% Calculate critical pressure ratio
Bcr = (2/(A.kappa+1))^(A.kappa/(A.kappa-1));
% Calculate collected constant terms for flow equation
c_1 = 2*A.kappa/(A.R*(A.kappa-1));
c_2 = (A.kappa+1)/A.kappa;
c_3 = sqrt( (A.kappa/A.R)*Bcr^((A.kappa+1)/A.kappa) );
c_5 = 2/A.kappa;
end
branches
G : A.G -> *;
Q : A.Q -> *;
end
equations
p1 == A.p;
T1 == A.T;
if p2/p1 > Bcr % Subsonic flow
G == Volume/A.R/T1^2 * (p1.der*T1 - p1*T1.der)+Area*p1*sqrt(c_1 /T1 * ( (p2/p1)^c_5 - (p2/p1)^c_2) );
else % Choked flow
G == Volume/A.R/T1^2 * (p1.der*T1 - p1*T1.der)+Area*p1*T1^-0.5*c_3;
end
Q == A.c_v * Volume / A.R * p1.der+G*A.c_p*T1;
end
end
p2 is the atmospheric pressure.
the domain is kind of similar to the pneumatic one.
Because of some reasons nothing happen to pressure and temperature at A at all. it stays constant at its value.
If this code isn't working at all that's fine for me. But i need some kind of solution to perform this problem with just one block. Has anybody an idea? Thanks in advanced
0 Comments
Accepted Answer
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!