Package Sensors
consists of idealized sensor components that
provide variables of a medium model and/or fluid ports as
output signals. These signals can be, e.g., further processed
with components of the
Modelica.Blocks
library.
Also more realistic sensor models can be built, by further
processing (e.g., by attaching block
Modelica.Blocks.Continuous.FirstOrder to
model the time constant of the sensor).
Extends from Modelica.Icons.SensorsPackage (Icon for packages containing sensors).
Name | Description |
---|---|
UsersGuide | User's Guide |
Conversions | Package with conversions for sensor models |
Density | Ideal one port density sensor |
DensityTwoPort | Ideal two port density sensor |
EnthalpyFlowRate | Ideal enthalphy flow rate sensor |
SensibleEnthalpyFlowRate | Ideal enthalphy flow rate sensor that outputs the sensible enthalpy flow rate only |
LatentEnthalpyFlowRate | Ideal enthalphy flow rate sensor that outputs the latent enthalpy flow rate only |
MassFlowRate | Ideal sensor for mass flow rate |
MassFraction | Ideal one port mass fraction sensor |
MassFractionTwoPort | Ideal two port mass fraction sensor |
Pressure | Ideal pressure sensor |
RelativeHumidity | Ideal one port relative humidity sensor |
RelativeHumidityTwoPort | Ideal two port relative humidity sensor |
RelativePressure | Ideal relative pressure sensor |
RelativeTemperature | Ideal relative temperature sensor |
SpecificEnthalpy | Ideal one port specific enthalpy sensor |
SpecificEnthalpyTwoPort | Ideal two port sensor for the specific enthalpy |
SpecificEntropy | Ideal one port specific entropy sensor |
SpecificEntropyTwoPort | Ideal two port sensor for the specific entropy |
Temperature | Ideal one port temperature sensor |
TemperatureTwoPort | Ideal two port temperature sensor |
TemperatureWetBulbTwoPort | Ideal wet bulb temperature sensor |
TraceSubstances | Ideal one port trace substances sensor |
TraceSubstancesTwoPort | Ideal two port sensor for trace substance |
VolumeFlowRate | Ideal sensor for volume flow rate |
Examples | Collection of models that illustrate model use and test models |
BaseClasses | Package with base classes for Buildings.Fluid.Sensors |
This component monitors the density of the fluid passing its port. The sensor is ideal, i.e. it does not influence the fluid.
If using the one port sensor, read the Information first.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor (Partial component to model a sensor that measures a potential variable), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the sensor |
Type | Name | Description |
---|---|---|
FluidPort_a | port | |
output RealOutput | d | Density in port medium [kg/m3] |
model Density "Ideal one port density sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput d(final quantity="Density", final unit="kg/m3", min=0) "Density in port medium"; equation d = Medium.density(Medium.setState_phX(port.p, inStream(port.h_outflow), inStream(port.Xi_outflow)));end Density;
This component monitors the density of the fluid flowing from port_a to port_b.
The sensor is ideal, i.e. it does not influence the fluid.
If the parameter tau
is non-zero, then its output
is computed using a first order differential equation.
Setting tau=0
is not recommend. See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 1 | Time constant at nominal flow rate [s] |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
Density | d_start | Medium.density(Medium.setSta... | Initial or guess value of output (=state) [kg/m3] |
Temperature | T_start | Medium.T_default | Temperature used to compute d_start [K] |
Pressure | p_start | Medium.p_default | Pressure used to compute d_start [Pa] |
MassFraction | X_start[Medium.nX] | Medium.X_default | Mass fraction used to compute d_start [1] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | d | Density of the passing fluid [kg/m3] |
model DensityTwoPort "Ideal two port density sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput d(final quantity="Density", final unit="kg/m3", min=0) "Density of the passing fluid"; parameter Medium.Density d_start=Medium.density(Medium.setState_pTX(p_start, T_start, X_start)) "Initial or guess value of output (=state)"; parameter Modelica.SIunits.Temperature T_start=Medium.T_default "Temperature used to compute d_start"; parameter Modelica.SIunits.Pressure p_start=Medium.p_default "Pressure used to compute d_start"; parameter Modelica.SIunits.MassFraction X_start[Medium.nX]=Medium.X_default "Mass fraction used to compute d_start"; Medium.Density dMed(start=d_start) "Medium temperature to which the sensor is exposed"; protected Medium.Density d_a_inflow "Density of inflowing fluid at port_a"; Medium.Density d_b_inflow "Density of inflowing fluid at port_b or rho_a_inflow, if uni-directional flow"; initial equation if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(d) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then d = d_start; end if; end if; equation if allowFlowReversal then d_a_inflow = Medium.density(Medium.setState_phX(port_b.p, port_b.h_outflow, port_b.Xi_outflow)); d_b_inflow = Medium.density(Medium.setState_phX(port_a.p, port_a.h_outflow, port_a.Xi_outflow)); dMed = Modelica.Fluid.Utilities.regStep(port_a.m_flow, d_a_inflow, d_b_inflow, m_flow_small); else dMed = Medium.density(Medium.setState_phX(port_b.p, port_b.h_outflow, port_b.Xi_outflow)); d_a_inflow = dMed; d_b_inflow = dMed; end if; // Output signal of sensor if dynamic then der(d) = (dMed-d)*k/tau; else d = dMed; end if;end DensityTwoPort;
This component monitors the enthalphy flow rate of the medium in the flow between fluid ports. The sensor is ideal, i.e., it does not influence the fluid.
If the parameter tau
is non-zero, then the measured
specific enthalpy hout that is used to
compute the enthalpy flow rate
Ḣ = ṁ hout
is computed using a first order differential equation.
See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
For a sensor that measures the latent enthalpy flow rate, use Buildings.Fluid.Sensors.LatentEnthalpyFlowRate.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 0 | Time constant at nominal flow rate [s] |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
SpecificEnthalpy | h_out_start | Medium.specificEnthalpy_pTX(... | Initial or guess value of measured specific enthalpy [J/kg] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | H_flow | Enthalpy flow rate, positive if from port_a to port_b [W] |
model EnthalpyFlowRate "Ideal enthalphy flow rate sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor(tau=0); extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput H_flow(unit="W") "Enthalpy flow rate, positive if from port_a to port_b"; parameter Modelica.SIunits.SpecificEnthalpy h_out_start= Medium.specificEnthalpy_pTX(Medium.p_default, Medium.T_default, Medium.X_default) "Initial or guess value of measured specific enthalpy"; Modelica.SIunits.SpecificEnthalpy hMed_out(start=h_out_start) "Medium enthalpy to which the sensor is exposed"; Modelica.SIunits.SpecificEnthalpy h_out(start=h_out_start) "Medium enthalpy that is used to compute the enthalpy flow rate"; initial equation if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(h_out) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then h_out = h_out_start; end if; end if; equation if allowFlowReversal then hMed_out = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.h_outflow, port_a.h_outflow, m_flow_small); else hMed_out = port_b.h_outflow; end if; // Specific enthalpy measured by sensor if dynamic then der(h_out) = (hMed_out-h_out)*k/tau; else h_out = hMed_out; end if; // Sensor output signal H_flow = port_a.m_flow * h_out;end EnthalpyFlowRate;
This component monitors the sensible enthalphy flow rate of the medium in the flow between fluid ports. In particular, if the total enthalpy flow rate is
Ḣtot = Ḣsen + Ḣlat,
where Ḣsen = ṁ (1-Xw) cp,air, then this sensor outputs Ḣ = Ḣsen.
If the parameter tau
is non-zero, then the measured
specific sensible enthalpy hout that is used to
compute the sensible enthalpy flow rate
Ḣsen = ṁ hout
is computed using a first order differential equation.
See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
For a sensor that measures
Ḣtot, use
Buildings.Fluid.Sensors.EnthalpyFlowRate.
For a sensor that measures
Ḣlat, use
Buildings.Fluid.Sensors.LatentEnthalpyFlowRate.
The sensor is ideal, i.e., it does not influence the fluid.
The sensor can only be used with medium models that implement the function
enthalpyOfNonCondensingGas(state)
.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 0 | Time constant at nominal flow rate [s] |
Integer | i_w | 1 | Index for water substance |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
SpecificEnthalpy | h_out_start | Medium.enthalpyOfNonCondensi... | Initial or guess value of measured specific sensible enthalpy [J/kg] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | H_flow | Sensible enthalpy flow rate, positive if from port_a to port_b [W] |
model SensibleEnthalpyFlowRate "Ideal enthalphy flow rate sensor that outputs the sensible enthalpy flow rate only" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor(tau=0); extends Modelica.Icons.RotationalSensor; // redeclare Medium with a more restricting base class. This improves the error // message if a user selects a medium that does not contain the function // enthalpyOfLiquid(.) replaceable package Medium = Modelica.Media.Interfaces.PartialCondensingGases; parameter Integer i_w = 1 "Index for water substance";Initial or guess value of measured specific sensible enthalpyModelica.Blocks.Interfaces.RealOutput H_flow(unit="W") "Sensible enthalpy flow rate, positive if from port_a to port_b"; parameter Modelica.SIunits.SpecificEnthalpy h_out_start= Medium.enthalpyOfNonCondensingGas( Medium.temperature(Medium.setState_phX( Medium.p_default, Medium.T_default, Medium.X_default))) "
"; Modelica.SIunits.SpecificEnthalpy hMed_out(start=h_out_start) "Medium sensible enthalpy to which the sensor is exposed"; Modelica.SIunits.SpecificEnthalpy h_out(start=h_out_start) "Medium sensible enthalpy that is used to compute the enthalpy flow rate"; protected Medium.MassFraction XiActual[Medium.nXi] "Medium mass fraction to which sensor is exposed to"; Medium.SpecificEnthalpy hActual "Medium enthalpy to which sensor is exposed to"; Medium.ThermodynamicState sta "Medium state to which sensor is exposed to"; parameter Integer i_w_internal(fixed=false) "Index for water substance"; initial algorithm // Compute index of species vector that carries the water vapor concentration i_w_internal :=-1; for i in 1:Medium.nXi loop if Modelica.Utilities.Strings.isEqual(string1=Medium.substanceNames[i], string2="Water", caseSensitive=false) then i_w_internal :=i; end if; end for; assert(i_w_internal > 0, "Substance 'water' is not present in medium '" + Medium.mediumName + "'.\n" + "Change medium model to one that has 'water' as a substance."); assert(i_w == i_w_internal, "Parameter 'i_w' must be set to '" + String(i_w) + "'.\n"); initial equation // Compute initial state if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(h_out) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then h_out = h_out_start; end if; end if; equation if allowFlowReversal then XiActual = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.Xi_outflow, port_a.Xi_outflow, m_flow_small); hActual = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.h_outflow, port_a.h_outflow, m_flow_small); else XiActual = port_b.Xi_outflow; hActual = port_b.h_outflow; end if; // Specific enthalpy measured by sensor sta = Medium.setState_phX(port_a.p, hActual, XiActual); hMed_out = (1-XiActual[i_w]) * Medium.enthalpyOfNonCondensingGas( Medium.temperature(sta)); if dynamic then der(h_out) = (hMed_out-h_out)*k/tau; else h_out = hMed_out; end if; // Sensor output signal H_flow = port_a.m_flow * h_out;end SensibleEnthalpyFlowRate;
This component monitors the latent enthalphy flow rate of the medium in the flow between fluid ports. In particular, if the total enthalpy flow rate is
Ḣtot = Ḣsen + Ḣlat,
where Ḣsen = ṁ (1-Xw) cp,air, then this sensor outputs Ḣ = Ḣlat.
If the parameter tau
is non-zero, then the measured
specific latent enthalpy hout that is used to
compute the latent enthalpy flow rate
Ḣlat = ṁ hout
is computed using a first order differential equation.
See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
For a sensor that measures
Ḣtot, use
Buildings.Fluid.Sensors.EnthalpyFlowRate.
For a sensor that measures
Ḣsen, use
Buildings.Fluid.Sensors.SensibleEnthalpyFlowRate.
The sensor is ideal, i.e., it does not influence the fluid.
The sensor can only be used with medium models that implement the function
enthalpyOfNonCondensingGas(state)
.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 0 | Time constant at nominal flow rate [s] |
Integer | i_w | 1 | Index for water substance |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
SpecificEnthalpy | h_out_start | Medium.specificEnthalpy_pTX(... | Initial or guess value of measured specific latent enthalpy [J/kg] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | H_flow | Latent enthalpy flow rate, positive if from port_a to port_b [W] |
model LatentEnthalpyFlowRate "Ideal enthalphy flow rate sensor that outputs the latent enthalpy flow rate only" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor(tau=0); extends Modelica.Icons.RotationalSensor; // redeclare Medium with a more restricting base class. This improves the error // message if a user selects a medium that does not contain the function // enthalpyOfLiquid(.) replaceable package Medium = Modelica.Media.Interfaces.PartialCondensingGases; parameter Integer i_w = 1 "Index for water substance";Initial or guess value of measured specific latent enthalpyModelica.Blocks.Interfaces.RealOutput H_flow(unit="W") "Latent enthalpy flow rate, positive if from port_a to port_b"; parameter Modelica.SIunits.SpecificEnthalpy h_out_start= Medium.specificEnthalpy_pTX(Medium.p_default, Medium.T_default, Medium.X_default) -Medium.enthalpyOfNonCondensingGas( Medium.temperature(Medium.setState_phX( Medium.p_default, Medium.T_default, Medium.X_default))) "
"; Modelica.SIunits.SpecificEnthalpy hMed_out(start=h_out_start) "Medium latent enthalpy to which the sensor is exposed"; Modelica.SIunits.SpecificEnthalpy h_out(start=h_out_start) "Medium latent enthalpy that is used to compute the enthalpy flow rate"; protected Medium.MassFraction XiActual[Medium.nXi] "Medium mass fraction to which sensor is exposed to"; Medium.SpecificEnthalpy hActual "Medium enthalpy to which sensor is exposed to"; Medium.ThermodynamicState sta "Medium state to which sensor is exposed to"; parameter Integer i_w_internal(fixed=false) "Index for water substance"; initial algorithm // Compute index of species vector that carries the water vapor concentration i_w_internal :=-1; for i in 1:Medium.nXi loop if Modelica.Utilities.Strings.isEqual(string1=Medium.substanceNames[i], string2="Water", caseSensitive=false) then i_w_internal :=i; end if; end for; assert(i_w_internal > 0, "Substance 'water' is not present in medium '" + Medium.mediumName + "'.\n" + "Change medium model to one that has 'water' as a substance."); assert(i_w == i_w_internal, "Parameter 'i_w' must be set to '" + String(i_w) + "'.\n"); initial equation // Compute initial state if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(h_out) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then h_out = h_out_start; end if; end if; equation if allowFlowReversal then XiActual = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.Xi_outflow, port_a.Xi_outflow, m_flow_small); hActual = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.h_outflow, port_a.h_outflow, m_flow_small); else XiActual = port_b.Xi_outflow; hActual = port_b.h_outflow; end if; // Specific enthalpy measured by sensor sta = Medium.setState_phX(port_a.p, hActual, XiActual); // Compute H_flow as difference between total enthalpy and enthalpy on non-condensing gas. // This is needed to compute the liquid vs. gas fraction of water, using the equations // provided by the medium model hMed_out = (hActual - (1-XiActual[i_w]) * Medium.enthalpyOfNonCondensingGas(Medium.temperature(sta))); if dynamic then der(h_out) = (hMed_out-h_out)*k/tau; else h_out = hMed_out; end if; // Sensor output signal H_flow = port_a.m_flow * h_out;end LatentEnthalpyFlowRate;
This component monitors the mass flow rate flowing from port_a to port_b. The sensor is ideal, i.e., it does not influence the fluid.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialFlowSensor (Partial component to model sensors that measure flow properties), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Nominal condition | |||
MassFlowRate | m_flow_nominal | 0 | Nominal mass flow rate, used for regularization near zero flow [kg/s] |
Advanced | |||
MassFlowRate | m_flow_small | 0 | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | m_flow | Mass flow rate from port_a to port_b [kg/s] |
model MassFlowRate "Ideal sensor for mass flow rate" extends Buildings.Fluid.Sensors.BaseClasses.PartialFlowSensor( final m_flow_nominal = 0, final m_flow_small = 0); extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput m_flow(quantity="MassFlowRate", final unit="kg/s") "Mass flow rate from port_a to port_b"; equation m_flow = port_a.m_flow;end MassFlowRate;
This component monitors the mass fraction contained in the fluid passing its port. The sensor is ideal, i.e. it does not influence the fluid.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor (Partial component to model a sensor that measures a potential variable), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the sensor | |
String | substanceName | "water" | Name of species substance |
Type | Name | Description |
---|---|---|
FluidPort_a | port | |
output RealOutput | X | Mass fraction in port medium |
model MassFraction "Ideal one port mass fraction sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor; extends Modelica.Icons.RotationalSensor; parameter String substanceName = "water" "Name of species substance";Modelica.Blocks.Interfaces.RealOutput X(min=0, max=1) "Mass fraction in port medium"; protected parameter Integer ind(fixed=false) "Index of species in vector of auxiliary substances"; Medium.MassFraction XiVec[Medium.nXi]( quantity=Medium.extraPropertiesNames) "Trace substances vector, needed because indexed argument for the operator inStream is not supported"; initial algorithm ind:= -1; for i in 1:Medium.nX loop if ( Modelica.Utilities.Strings.isEqual(string1=Medium.substanceNames[i], string2=substanceName, caseSensitive=false)) then ind := i; end if; end for; assert(ind > 0, "Species with name '" + substanceName + "' is not present in medium '" + Medium.mediumName + "'.\n" + "Check sensor parameter and medium model."); equation XiVec = inStream(port.Xi_outflow); X = if ind > Medium.nXi then (1-sum(XiVec)) else XiVec[ind];end MassFraction;
This component monitors the mass fraction of the passing fluid.
The sensor is ideal, i.e. it does not influence the fluid.
If the parameter tau
is non-zero, then its output
is computed using a first order differential equation.
Setting tau=0
is not recommend. See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 1 | Time constant at nominal flow rate [s] |
String | substanceName | "water" | Name of species substance |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
MassFraction | X_start | Medium.X_default[ind] | Initial or guess value of output (= state) [kg/kg] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | X | Mass fraction of the passing fluid |
model MassFractionTwoPort "Ideal two port mass fraction sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor; extends Modelica.Icons.RotationalSensor; parameter String substanceName = "water" "Name of species substance";Modelica.Blocks.Interfaces.RealOutput X(min=0, max=1, start=X_start) "Mass fraction of the passing fluid"; parameter Medium.MassFraction X_start=Medium.X_default[ind] "Initial or guess value of output (= state)"; Medium.MassFraction XMed(start=X_start) "Mass fraction to which the sensor is exposed"; protected parameter Integer ind(fixed=false) "Index of species in vector of auxiliary substances"; Medium.MassFraction XiVec[Medium.nXi]( quantity=Medium.extraPropertiesNames) "Trace substances vector, needed because indexed argument for the operator inStream is not supported"; initial algorithm // Compute the index of the element in the substance vector ind:= -1; for i in 1:Medium.nX loop if ( Modelica.Utilities.Strings.isEqual(string1=Medium.substanceNames[i], string2=substanceName, caseSensitive=false)) then ind := i; end if; end for; assert(ind > 0, "Species with name '" + substanceName + "' is not present in medium '" + Medium.mediumName + "'.\n" + "Check sensor parameter and medium model."); initial equation // Assign initial conditions if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(X) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then X = X_start; end if; end if; equation if allowFlowReversal then XiVec = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.Xi_outflow, port_a.Xi_outflow, m_flow_small); else XiVec = port_b.Xi_outflow; end if; XMed = if ind > Medium.nXi then (1-sum(XiVec)) else XiVec[ind]; // Output signal of sensor if dynamic then der(X) = (XMed-X)*k/tau; else X = XMed; end if;end MassFractionTwoPort;
This component monitors the absolute pressure at its fluid port. The sensor is ideal, i.e., it does not influence the fluid.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor (Partial component to model a sensor that measures a potential variable), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the sensor |
Type | Name | Description |
---|---|---|
FluidPort_a | port | |
output RealOutput | p | Pressure at port [Pa] |
model Pressure "Ideal pressure sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput p(final quantity="Pressure", final unit="Pa", min=0) "Pressure at port"; equation p = port.p;end Pressure;
This component monitors the relative humidity contained in the fluid passing its port. The sensor is ideal, i.e. it does not influence the fluid.
Note that this sensor can only be used with media that contain the variable phi
,
which is typically the case for moist air models.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor (Partial component to model a sensor that measures a potential variable), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the sensor |
Type | Name | Description |
---|---|---|
FluidPort_a | port | |
output RealOutput | phi | Relative humidity in port medium [1] |
model RelativeHumidity "Ideal one port relative humidity sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput phi(unit="1", min=0) "Relative humidity in port medium"; protected Medium.BaseProperties med "Medium state at dry bulb temperature"; equation med.p = port.p; med.h = inStream(port.h_outflow); med.Xi = inStream(port.Xi_outflow); phi = med.phi;end RelativeHumidity;
This component monitors the relative humidity of the fluid flowing from port_a to port_b. The sensor is ideal, i.e. it does not influence the fluid.
Note that this sensor can only be used with media that contain the variable phi
,
which is typically the case for moist air models.
If the parameter tau
is non-zero, then its output
is computed using a first order differential equation.
Setting tau=0
is not recommend. See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 1 | Time constant at nominal flow rate [s] |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
Real | phi_start | 0.5 | Initial or guess value of output (= state) [1] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | phi | Relative humidity of the passing fluid [1] |
model RelativeHumidityTwoPort "Ideal two port relative humidity sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput phi(unit="1", min=0, start=phi_start) "Relative humidity of the passing fluid"; parameter Real phi_start(unit="1", min=0, max=1)=0.5 "Initial or guess value of output (= state)"; Real phiMed(unit="1", min=0, start=phi_start) "Relative humidity to which the sensor is exposed"; protected Medium.BaseProperties med_a_inflow "Medium state of inflowing fluid at port a"; Medium.BaseProperties med_b_inflow "Medium state of inflowing fluid at port b"; initial equation if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(phi) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then phi = phi_start; end if; end if; equation med_a_inflow.p = port_a.p; med_a_inflow.h = port_b.h_outflow; med_a_inflow.Xi = port_b.Xi_outflow; med_b_inflow.p = port_b.p; med_b_inflow.h = port_a.h_outflow; med_b_inflow.Xi = port_a.Xi_outflow; if allowFlowReversal then phiMed = Modelica.Fluid.Utilities.regStep(port_a.m_flow, med_a_inflow.phi, med_b_inflow.phi, m_flow_small); else phiMed = med_a_inflow.phi; end if; // Output signal of sensor if dynamic then der(phi) = (phiMed-phi)*k/tau; else phi = phiMed; end if;end RelativeHumidityTwoPort;
The relative pressure "port_a.p - port_b.p" is determined between the two ports of this component and is provided as output signal. The sensor should be connected in parallel with other equipment, no flow through the sensor is allowed.
Extends from Modelica.Icons.TranslationalSensor (Icon representing a linear measurement device).
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | |
FluidPort_b | port_b | |
output RealOutput | p_rel | Relative pressure signal [Pa] |
model RelativePressure "Ideal relative pressure sensor" extends Modelica.Icons.TranslationalSensor; replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium in the sensor";Modelica.Fluid.Interfaces.FluidPort_a port_a(m_flow(min=0), p(start=Medium.p_default), redeclare package Medium = Medium); Modelica.Fluid.Interfaces.FluidPort_b port_b(m_flow(min=0), p(start=Medium.p_default), redeclare package Medium = Medium); Modelica.Blocks.Interfaces.RealOutput p_rel(final quantity="Pressure", final unit="Pa", displayUnit="bar") "Relative pressure signal"; equation // Zero flow equations for connectors port_a.m_flow = 0; port_b.m_flow = 0; // No contribution of specific quantities port_a.h_outflow = 0; port_b.h_outflow = 0; port_a.Xi_outflow = zeros(Medium.nXi); port_b.Xi_outflow = zeros(Medium.nXi); port_a.C_outflow = zeros(Medium.nC); port_b.C_outflow = zeros(Medium.nC); // Relative pressure p_rel = port_a.p - port_b.p;end RelativePressure;
The relative temperature "T(port_a) - T(port_b)" is determined between the two ports of this component and is provided as output signal. The sensor should be connected in parallel with other equipment. There is no flow through the sensor.
Note that this sensor should only be connected to fluid volumes, such as Buildings.Fluid.MixingVolumes.MixingVolume. Otherwise, numerical problems may occur if one of the mass flow rates are close to zero. See Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Modelica.Icons.TranslationalSensor (Icon representing a linear measurement device).
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | |
FluidPort_b | port_b | |
output RealOutput | T_rel | Relative temperature signal [K] |
model RelativeTemperature "Ideal relative temperature sensor" extends Modelica.Icons.TranslationalSensor; replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium in the sensor";Modelica.Fluid.Interfaces.FluidPort_a port_a(m_flow(min=0), p(start=Medium.p_default), redeclare package Medium = Medium); Modelica.Fluid.Interfaces.FluidPort_b port_b(m_flow(min=0), p(start=Medium.p_default), redeclare package Medium = Medium); Modelica.Blocks.Interfaces.RealOutput T_rel(final quantity="Temperature", final unit = "K", displayUnit = "degC", min=0) "Relative temperature signal"; equation // Zero flow equations for connectors port_a.m_flow = 0; port_b.m_flow = 0; // No contribution of specific quantities port_a.h_outflow = 0; port_b.h_outflow = 0; port_a.Xi_outflow = zeros(Medium.nXi); port_b.Xi_outflow = zeros(Medium.nXi); port_a.C_outflow = zeros(Medium.nC); port_b.C_outflow = zeros(Medium.nC); // Relative temperature T_rel = Medium.temperature(Medium.setState_phX(port_a.p, inStream(port_a.h_outflow), inStream(port_a.Xi_outflow))) - Medium.temperature(Medium.setState_phX(port_b.p, inStream(port_b.h_outflow), inStream(port_b.Xi_outflow)));end RelativeTemperature;
This component monitors the specific enthalpy of the fluid passing its port. The sensor is ideal, i.e. it does not influence the fluid.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor (Partial component to model a sensor that measures a potential variable), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the sensor |
Type | Name | Description |
---|---|---|
FluidPort_a | port | |
output RealOutput | h_out | Specific enthalpy in port medium [J/kg] |
model SpecificEnthalpy "Ideal one port specific enthalpy sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput h_out(final quantity="SpecificEnergy", final unit="J/kg") "Specific enthalpy in port medium"; equation h_out = inStream(port.h_outflow);end SpecificEnthalpy;
This component monitors the specific enthalpy of a passing fluid.
The sensor is ideal, i.e. it does not influence the fluid.
If the parameter tau
is non-zero, then its output
is computed using a first order differential equation.
Setting tau=0
is not recommend. See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 1 | Time constant at nominal flow rate [s] |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
SpecificEnthalpy | h_out_start | Medium.specificEnthalpy_pTX(... | Initial or guess value of output (= state) [J/kg] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | h_out | Specific enthalpy of the passing fluid [J/kg] |
model SpecificEnthalpyTwoPort "Ideal two port sensor for the specific enthalpy" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput h_out(final quantity="SpecificEnergy", final unit="J/kg", start=h_out_start) "Specific enthalpy of the passing fluid"; parameter Modelica.SIunits.SpecificEnthalpy h_out_start= Medium.specificEnthalpy_pTX(Medium.p_default, Medium.T_default, Medium.X_default) "Initial or guess value of output (= state)"; Modelica.SIunits.SpecificEnthalpy hMed_out(start=h_out_start) "Medium enthalpy to which the sensor is exposed"; initial equation if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(h_out) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then h_out = h_out_start; end if; end if; equation if allowFlowReversal then hMed_out = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.h_outflow, port_a.h_outflow, m_flow_small); else hMed_out = port_b.h_outflow; end if; // Output signal of sensor if dynamic then der(h_out) = (hMed_out-h_out)*k/tau; else h_out = hMed_out; end if;end SpecificEnthalpyTwoPort;
This component monitors the specific entropy of the fluid passing its port. The sensor is ideal, i.e. it does not influence the fluid.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor (Partial component to model a sensor that measures a potential variable), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the sensor |
Type | Name | Description |
---|---|---|
FluidPort_a | port | |
output RealOutput | s | Specific entropy in port medium [J/(kg.K)] |
model SpecificEntropy "Ideal one port specific entropy sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput s(final quantity="SpecificEntropy", final unit="J/(kg.K)") "Specific entropy in port medium"; equation s = Medium.specificEntropy(Medium.setState_phX(port.p, inStream(port.h_outflow), inStream(port.Xi_outflow)));end SpecificEntropy;
This component monitors the specific entropy of the passing fluid.
The sensor is ideal, i.e. it does not influence the fluid.
If the parameter tau
is non-zero, then its output
is computed using a first order differential equation.
Setting tau=0
is not recommend. See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 1 | Time constant at nominal flow rate [s] |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
SpecificEntropy | s_start | Medium.specificEntropy_pTX(M... | Initial or guess value of output (= state) [J/(kg.K)] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | s | Specific entropy of the passing fluid [J/(kg.K)] |
model SpecificEntropyTwoPort "Ideal two port sensor for the specific entropy" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput s(final quantity="SpecificEntropy", final unit="J/(kg.K)", start=s_start) "Specific entropy of the passing fluid"; parameter Modelica.SIunits.SpecificEntropy s_start= Medium.specificEntropy_pTX(Medium.p_default, Medium.T_default, Medium.X_default) "Initial or guess value of output (= state)"; Modelica.SIunits.SpecificEntropy sMed(start=s_start) "Medium entropy to which the sensor is exposed"; protected Medium.SpecificEntropy s_a_inflow "Specific entropy of inflowing fluid at port_a"; Medium.SpecificEntropy s_b_inflow "Specific entropy of inflowing fluid at port_b or s_a_inflow, if uni-directional flow"; initial equation if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(s) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then s = s_start; end if; end if; equation if allowFlowReversal then s_a_inflow = Medium.specificEntropy(Medium.setState_phX(port_b.p, port_b.h_outflow, port_b.Xi_outflow)); s_b_inflow = Medium.specificEntropy(Medium.setState_phX(port_a.p, port_a.h_outflow, port_a.Xi_outflow)); s = Modelica.Fluid.Utilities.regStep(port_a.m_flow, s_a_inflow, s_b_inflow, m_flow_small); else s = Medium.specificEntropy(Medium.setState_phX(port_b.p, port_b.h_outflow, port_b.Xi_outflow)); s_a_inflow = s; s_b_inflow = s; end if; // Output signal of sensor if dynamic then der(s) = (sMed-s)*k/tau; else s = sMed; end if;end SpecificEntropyTwoPort;
This component monitors the temperature of the fluid passing its port. The sensor is ideal, i.e. it does not influence the fluid.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor (Partial component to model a sensor that measures a potential variable).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the sensor |
Type | Name | Description |
---|---|---|
FluidPort_a | port | |
output RealOutput | T | Temperature in port medium [K] |
model Temperature "Ideal one port temperature sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor;Modelica.Blocks.Interfaces.RealOutput T(final quantity="Temperature", final unit = "K", min=0, displayUnit = "degC") "Temperature in port medium"; equation T = Medium.temperature(Medium.setState_phX(port.p, inStream(port.h_outflow), inStream(port.Xi_outflow)));end Temperature;
This component monitors the temperature of the medium in the flow
between fluid ports. The sensor does not influence the fluid.
If the parameter tau
is non-zero, then its output
is computed using a first order differential equation.
Setting tau=0
is not recommend. See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 1 | Time constant at nominal flow rate [s] |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
Temperature | T_start | Medium.T_default | Initial or guess value of output (= state) [K] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | T | Temperature of the passing fluid [K] |
model TemperatureTwoPort "Ideal two port temperature sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor;Modelica.Blocks.Interfaces.RealOutput T(final quantity="Temperature", final unit="K", displayUnit = "degC", min = 0, start=T_start) "Temperature of the passing fluid"; parameter Modelica.SIunits.Temperature T_start=Medium.T_default "Initial or guess value of output (= state)"; Medium.Temperature TMed(start=T_start) "Medium temperature to which the sensor is exposed"; protected Medium.Temperature T_a_inflow "Temperature of inflowing fluid at port_a"; Medium.Temperature T_b_inflow "Temperature of inflowing fluid at port_b or T_a_inflow, if uni-directional flow"; initial equation if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(T) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then T = T_start; end if; end if; equation if allowFlowReversal then T_a_inflow = Medium.temperature(Medium.setState_phX(port_b.p, port_b.h_outflow, port_b.Xi_outflow)); T_b_inflow = Medium.temperature(Medium.setState_phX(port_a.p, port_a.h_outflow, port_a.Xi_outflow)); TMed = Modelica.Fluid.Utilities.regStep(port_a.m_flow, T_a_inflow, T_b_inflow, m_flow_small); else TMed = Medium.temperature(Medium.setState_phX(port_b.p, port_b.h_outflow, port_b.Xi_outflow)); T_a_inflow = TMed; T_b_inflow = TMed; end if; // Output signal of sensor if dynamic then der(T) = (TMed-T)*k/tau; else T = TMed; end if;end TemperatureTwoPort;
This component monitors the wet bulb temperature of the medium in the flow
between fluid ports. The sensor is ideal, i.e., it does not influence the fluid.
If the parameter tau
is non-zero, then its output
is computed using a first order differential equation.
Setting tau=0
is not recommend. See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 1 | Time constant at nominal flow rate [s] |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
Temperature | TWetBul_start | Medium.T_default | Initial or guess value of wet bulb temperature (used to compute initial output signal)) [K] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | T | Wet bulb temperature in port medium [K] |
model TemperatureWetBulbTwoPort "Ideal wet bulb temperature sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor;Initial or guess value of wet bulb temperature (used to compute initial output signal))Modelica.Blocks.Interfaces.RealOutput T( start=TWetBul_start, final quantity="Temperature", final unit="K", displayUnit = "degC") "Wet bulb temperature in port medium"; parameter Modelica.SIunits.Temperature TWetBul_start = Medium.T_default "
"; Medium.Temperature TMedWetBul(start=TWetBul_start) "Medium wet bulb temperature to which the sensor is exposed"; protected Buildings.Utilities.Psychrometrics.TWetBul_TDryBulXi wetBulMod( redeclare package Medium = Medium) "Block for wet bulb temperature"; Modelica.SIunits.SpecificEnthalpy h "Specific enthalpy"; Medium.MassFraction Xi[Medium.nXi] "Species vector, needed because indexed argument for the operator inStream is not supported"; initial equation // Initialization of wet bulb temperature if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(T) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then T = TWetBul_start; end if; end if; equation if allowFlowReversal then h = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.h_outflow, port_a.h_outflow, m_flow_small); Xi = Modelica.Fluid.Utilities.regStep(port_a.m_flow, port_b.Xi_outflow, port_a.Xi_outflow, m_flow_small); else h = port_b.h_outflow; Xi = port_b.Xi_outflow; end if; // Compute wet bulb temperature wetBulMod.TDryBul = Medium.T_phX(port_a.p, h, cat(1,Xi,{1-sum(Xi)})); wetBulMod.Xi = Xi; wetBulMod.p = port_a.p; TMedWetBul = wetBulMod.TWetBul; // Output signal of sensor if dynamic then der(T) = (TMedWetBul-T)*k/tau; else T = TMedWetBul; end if;end TemperatureWetBulbTwoPort;
This component monitors the trace substances contained in the fluid passing its port. The sensor is ideal, i.e. it does not influence the fluid.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor (Partial component to model a sensor that measures a potential variable), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the sensor | |
String | substanceName | "CO2" | Name of trace substance |
Type | Name | Description |
---|---|---|
FluidPort_a | port | |
output RealOutput | C | Trace substance in port medium |
model TraceSubstances "Ideal one port trace substances sensor" extends Buildings.Fluid.Sensors.BaseClasses.PartialAbsoluteSensor; extends Modelica.Icons.RotationalSensor; parameter String substanceName = "CO2" "Name of trace substance";Modelica.Blocks.Interfaces.RealOutput C "Trace substance in port medium"; protected parameter Real s[Medium.nC](fixed=false) "Vector with zero everywhere except where species is"; initial algorithm for i in 1:Medium.nC loop if ( Modelica.Utilities.Strings.isEqual(string1=Medium.extraPropertiesNames[i], string2=substanceName, caseSensitive=false)) then s[i] :=1; else s[i] :=0; end if; end for; assert(abs(1-sum(s)) < 1E-4, "Trace substance '" + substanceName + "' is not present in medium '" + Medium.mediumName + "'.\n" + "Check sensor parameter and medium model."); equation // We obtain the species concentration with a vector multiplication // because Dymola 7.3 cannot find the derivative in the model // Buildings.Examples.VAVSystemCTControl.mo // if we set C = CVec[ind]; C = s*inStream(port.C_outflow);end TraceSubstances;
This component monitors the trace substance of the passing fluid.
The sensor is ideal, i.e. it does not influence the fluid.
If the parameter tau
is non-zero, then its output
is computed using a first order differential equation.
Setting tau=0
is not recommend. See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 1 | Time constant at nominal flow rate [s] |
String | substanceName | "CO2" | Name of trace substance |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
Real | C_start | Initial or guess value of output (= state) | |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | C | Trace substance of the passing fluid |
model TraceSubstancesTwoPort "Ideal two port sensor for trace substance" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor; extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput C(min=0, nominal=Medium.C_nominal, start=C_start) "Trace substance of the passing fluid"; parameter String substanceName = "CO2" "Name of trace substance"; parameter Real C_start(min=0) "Initial or guess value of output (= state)"; Real CMed(min=0, start=C_start, nominal=Medium.C_nominal) "Medium trace substance to which the sensor is exposed"; protected parameter Real s[Medium.nC](fixed=false) "Vector with zero everywhere except where species is"; initial algorithm for i in 1:Medium.nC loop if ( Modelica.Utilities.Strings.isEqual(string1=Medium.extraPropertiesNames[i], string2=substanceName, caseSensitive=false)) then s[i] :=1; else s[i] :=0; end if; end for; assert(abs(1-sum(s))<1E-4, "Trace substance '" + substanceName + "' is not present in medium '" + Medium.mediumName + "'.\n" + "Check sensor parameter and medium model."); initial equation if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(C) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then C = C_start; end if; end if; equation if allowFlowReversal then CMed = Modelica.Fluid.Utilities.regStep(port_a.m_flow, s*port_b.C_outflow, s*port_a.C_outflow, m_flow_small); else CMed = s*inStream(port_b.C_outflow); end if; // Output signal of sensor if dynamic then der(C) = (CMed-C)*k/tau; else C = CMed; end if;end TraceSubstancesTwoPort;
This component monitors the volume flow rate flowing from port_a to port_b.
The sensor is ideal, i.e. it does not influence the fluid.
If the parameter tau
is non-zero, then the measured
density that is used to convert the mass flow rate into
volumetric flow rate is computed using a first order differential equation.
See
Buildings.Fluid.Sensors.UsersGuide for an explanation.
Extends from Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor (Partial component to model sensors that measure flow properties using a dynamic model), Modelica.Icons.RotationalSensor (Icon representing a round measurement device).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Time | tau | 0 | Time constant at nominal flow rate [s] |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate, used for regularization near zero flow [kg/s] | |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | For bi-directional flow, temperature is regularized in the region |m_flow| < m_flow_small (m_flow_small > 0 required) [kg/s] |
Initialization | |||
Init | initType | Modelica.Blocks.Types.Init.N... | Type of initialization (InitialState and InitialOutput are identical) |
Density | d_start | Medium.density(Medium.setSta... | Initial or guess value of density [kg/m3] |
Temperature | T_start | Medium.T_default | Temperature used to compute d_start [K] |
Pressure | p_start | Medium.p_default | Pressure used to compute d_start [Pa] |
MassFraction | X_start[Medium.nX] | Medium.X_default | Mass fraction used to compute d_start [1] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
output RealOutput | V_flow | Volume flow rate from port_a to port_b [m3/s] |
model VolumeFlowRate "Ideal sensor for volume flow rate" extends Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor(tau=0); extends Modelica.Icons.RotationalSensor;Modelica.Blocks.Interfaces.RealOutput V_flow(final quantity="VolumeFlowRate", final unit="m3/s") "Volume flow rate from port_a to port_b"; parameter Medium.Density d_start=Medium.density(Medium.setState_pTX(p_start, T_start, X_start)) "Initial or guess value of density"; parameter Modelica.SIunits.Temperature T_start=Medium.T_default "Temperature used to compute d_start"; parameter Modelica.SIunits.Pressure p_start=Medium.p_default "Pressure used to compute d_start"; parameter Modelica.SIunits.MassFraction X_start[Medium.nX]=Medium.X_default "Mass fraction used to compute d_start"; Medium.Density dMed(start=d_start) "Medium temperature to which the sensor is exposed"; protected Medium.Density d_a_inflow(start=d_start) "Density of inflowing fluid at port_a"; Medium.Density d_b_inflow(start=d_start) "Density of inflowing fluid at port_b or rho_a_inflow, if uni-directional flow"; Medium.Density d(start=d_start) "Density of the passing fluid"; initial equation if dynamic then if initType == Modelica.Blocks.Types.Init.SteadyState then der(d) = 0; elseif initType == Modelica.Blocks.Types.Init.InitialState or initType == Modelica.Blocks.Types.Init.InitialOutput then d = d_start; end if; end if; equation if allowFlowReversal then d_a_inflow = Medium.density(Medium.setState_phX(port_b.p, port_b.h_outflow, port_b.Xi_outflow)); d_b_inflow = Medium.density(Medium.setState_phX(port_a.p, port_a.h_outflow, port_a.Xi_outflow)); dMed = Modelica.Fluid.Utilities.regStep(port_a.m_flow, d_a_inflow, d_b_inflow, m_flow_small); else dMed = Medium.density(Medium.setState_phX(port_b.p, port_b.h_outflow, port_b.Xi_outflow)); d_a_inflow = dMed; d_b_inflow = dMed; end if; // Output signal of density sensor that is used to compute // the volume flow rate if dynamic then der(d) = (dMed-d)*k/tau; else d = dMed; end if; // Volume flow rate V_flow = port_a.m_flow/d;end VolumeFlowRate;