This package contains generic sequences that would be needed for both AHU and
terminal units control.
This block outputs the air economizer high limits according to the energy standard,
device type and climate zone. The implementation is according to the Section 5.1.17 of ASHRAE
Guideline 36, May 2020.
When ASHRAE 90.1-2016 is used.
When California Title 24-2016 is used.
block AirEconomizerHighLimits 
  
parameter Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard eneStd
    ;
  
parameter Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer ecoHigLimCon
    ;
  
parameter Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Not_Specified
    ;
  
parameter Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone tit24CliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Not_Specified
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput TRet(
    
final unit="K",
    displayUnit="degC",
    
final quantity="ThermodynamicTemperature")
    
if (ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialDryBulb
     or ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput hRet(
    
final unit="J/kg",
    
final quantity="SpecificEnergy")
    
if (eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
     and ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput TCut(
    
final quantity="ThermodynamicTemperature",
    
final unit="K",
    displayUnit="degC")
    
if not eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.Not_Specified
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput hCut(
    
final quantity="SpecificEnergy",
    
final unit="J/kg")
    
if (ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb
     or ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant fixDryBul(
    
final k=ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant difDryBul(
    
final k=ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant fixEntFixDryBul(
    
final k=ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant difEntFixDryBul(
    
final k=ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash1A(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_1A)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash1B(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_1B)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash2A(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_2A)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash2B(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_2B)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash3A(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_3A)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash3B(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_3B)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash3C(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_3C)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash4A(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4A)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash4B(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4B)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash4C(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_4C)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash5A(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_5A)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash5B(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_5B)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash5C(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_5C)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash6A(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_6A)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash6B(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_6B)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash7(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_7)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant ash8(
    
final k=ashCliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_8)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or3
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or1
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or2
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or4
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or or6
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or or7
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or or5
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and2
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and1
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and3
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(
    
final k=273.15 + 24)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi1
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1(
    
final k=273.15 + 21)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi2
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2(
    
final k=273.15 + 18)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or10
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or11
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or12
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or13
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or14
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or15
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi3
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or8
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or or9
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and4
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes(
    
final message="Warning: Differential dry bulb high-limit-control device is not allowed in climate zone 1A, 2A, 3A and 4A!")
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not1
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3(
    
final k=273.15 + 24)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi4
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4(
    
final k=66000)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon1(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_1)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon2(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_2)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon3(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_3)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon4(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_4)
 
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon5(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_5)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon6(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_6)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon8(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_8)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon9(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_9)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon10(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_10)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon11(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_11)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon12(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_12)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon13(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_13)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon14(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_14)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon15(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_15)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titZon16(
    
final k=tit24CliZon == Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_16)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or16
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or17
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or18
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or20
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and5
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi5
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con5(
    
final k=273.15 + 24)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or19
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and6
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi6
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con6(
    
final k=273.15 + 23)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or21
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and7
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con7(
    
final k=273.15 + 22)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi7
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con8(
    
final k=273.15 + 21)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi8
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and8
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi9
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and9
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi10
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar(
    
final p=-1) 
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi11
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and10
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1(
    
final p=-2)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi12
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2(
    
final p=-3)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con9(
    
final k=273.15 + 24)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea(
    
final realTrue=66000)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant titEngSta(
    
final k=eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and11
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes1(
    
final message="Warning: When Title 24 energy standard is used, the device type cannot be differential enthalpy with fixed dry bulb!")
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not2
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con10(
    
final k=0)
    
if (eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
     and not ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con11(
    
final k=0)
    
if not (ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialDryBulb
     or ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Sources.Constant fixDryBulDifDryBul(
    
final k=ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and12
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Min min1
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi13
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and13
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Min min2
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con12(
    
final k=273.15 + 21)
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi14
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and14
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not3
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes2(
    
final message="Warning: Fixed dry bulb with differential dry bulb high-limit-control device is not allowed in climate zone 1A, 2A, 3A and 4A!")
 
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and15
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi15
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Min min3
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and16
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Min min4
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi16
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and17
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi17
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Min min5
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Switch swi18
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
  
Buildings.Controls.OBC.CDL.Continuous.Min min6
    
if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24_2016
    ;
equation 
  connect(ash1B.y, or3.u1);
  
connect(ash2B.y, or3.u2);
  
connect(ash3B.y, or3.u3);
  
connect(ash3C.y, or1.u1);
  
connect(ash4B.y, or1.u2);
  
connect(ash4C.y, or1.u3);
  
connect(ash5B.y, or2.u1);
  
connect(ash5C.y, or2.u2);
  
connect(ash6B.y, or2.u3);
  
connect(or3.y, or4.u1);
  
connect(or1.y, or4.u2);
  
connect(or2.y, or4.u3);
  
connect(ash7.y, or6.u1);
  
connect(ash8.y, or6.u2);
  
connect(or4.y, or7.u1);
  
connect(or6.y, or7.u2);
  
connect(ash5A.y, or5.u1);
  
connect(ash6A.y, or5.u2);
  
connect(or7.y, and2.u1);
  
connect(fixDryBul.y, and2.u2);
  
connect(fixDryBul.y, and1.u2);
  
connect(or5.y, and1.u1);
  
connect(and2.y, swi.u2);
  
connect(con.y, swi.u1);
  
connect(con1.y, swi1.u1);
  
connect(and1.y, swi1.u2);
  
connect(fixDryBul.y, swi2.u2);
  
connect(con2.y, swi2.u1);
  
connect(swi2.y, swi1.u3);
  
connect(ash1B.y, or10.u1);
  
connect(ash2B.y, or10.u2);
  
connect(ash3B.y, or10.u3);
  
connect(ash3C.y, or11.u1);
  
connect(ash4B.y, or11.u2);
  
connect(ash4C.y, or11.u3);
  
connect(ash5A.y, or12.u1);
  
connect(ash5B.y, or12.u2);
  
connect(ash5C.y, or12.u3);
  
connect(ash6A.y, or13.u1);
  
connect(ash6B.y, or13.u2);
  
connect(ash7.y, or13.u3);
  
connect(or10.y, or14.u1);
  
connect(or11.y, or14.u2);
  
connect(or12.y, or14.u3);
  
connect(or14.y, or15.u1);
  
connect(or13.y, or15.u2);
  
connect(ash8.y, or15.u3);
  
connect(or15.y, and3.u1);
  
connect(difDryBul.y, and3.u2);
  
connect(and3.y, swi3.u2);
  
connect(TRet, swi3.u1);
  
connect(ash1A.y, or8.u3);
  
connect(ash2A.y, or8.u2);
  
connect(ash3A.y, or8.u1);
  
connect(or8.y, or9.u2);
  
connect(ash4A.y, or9.u1);
  
connect(or9.y, and4.u1);
  
connect(difDryBul.y, and4.u2);
  
connect(and4.y, not1.u);
  
connect(not1.y, assMes.u);
  
connect(swi1.y, swi.u3);
  
connect(swi3.y, swi2.u3);
  
connect(con4.y, swi4.u1);
  
connect(fixEntFixDryBul.y, swi4.u2);
  
connect(hRet, swi4.u3);
  
connect(swi.y, TCut);
  
connect(swi4.y, hCut);
  
connect(titZon1.y, or16.u1);
  
connect(titZon3.y, or16.u2);
  
connect(titZon5.y, or16.u3);
  
connect(titZon11.y, or17.u1);
  
connect(titZon12.y, or17.u2);
  
connect(titZon13.y, or17.u3);
  
connect(titZon14.y, or18.u1);
  
connect(titZon15.y, or18.u2);
  
connect(titZon16.y, or18.u3);
  
connect(or16.y, or20.u1);
  
connect(or17.y, or20.u2);
  
connect(or18.y, or20.u3);
  
connect(or20.y, and5.u1);
  
connect(fixDryBul.y, and5.u2);
  
connect(and5.y, swi5.u2);
  
connect(con5.y, swi5.u1);
  
connect(titZon2.y, or19.u1);
  
connect(titZon4.y, or19.u2);
  
connect(titZon10.y, or19.u3);
  
connect(or19.y, and6.u1);
  
connect(fixDryBul.y, and6.u2);
  
connect(and6.y, swi6.u2);
  
connect(con6.y, swi6.u1);
  
connect(swi6.y, swi5.u3);
  
connect(and7.y, swi7.u2);
  
connect(con7.y, swi7.u1);
  
connect(titZon6.y, or21.u1);
  
connect(or21.y, and7.u1);
  
connect(titZon8.y, or21.u2);
  
connect(titZon9.y, or21.u3);
  
connect(fixDryBul.y, and7.u2);
  
connect(swi7.y, swi6.u3);
  
connect(con8.y, swi8.u1);
  
connect(fixDryBul.y, swi8.u2);
  
connect(or20.y, and8.u1);
  
connect(difDryBul.y, and8.u2);
  
connect(and8.y, swi9.u2);
  
connect(TRet, swi9.u1);
  
connect(swi10.y, swi9.u3);
  
connect(or19.y, and9.u1);
  
connect(difDryBul.y, and9.u2);
  
connect(TRet, addPar.u);
  
connect(and9.y, swi10.u2);
  
connect(addPar.y, swi10.u1);
  
connect(and10.y, swi11.u2);
  
connect(swi11.y, swi10.u3);
  
connect(or21.y, and10.u1);
  
connect(difDryBul.y, and10.u2);
  
connect(addPar1.y, swi11.u1);
  
connect(TRet, addPar1.u);
  
connect(addPar2.y, swi12.u1);
  
connect(swi12.y, swi11.u3);
  
connect(difDryBul.y, swi12.u2);
  
connect(TRet, addPar2.u);
  
connect(swi8.y, swi7.u3);
  
connect(swi9.y, swi8.u3);
  
connect(fixEntFixDryBul.y, booToRea.u);
  
connect(swi5.y, TCut);
  
connect(booToRea.y, hCut);
  
connect(titEngSta.y, and11.u2);
  
connect(difEntFixDryBul.y, and11.u1);
  
connect(not2.y, assMes1.u);
  
connect(and11.y, not2.u);
  
connect(con10.y, swi4.u3);
  
connect(con11.y, swi3.u1);
  
connect(con11.y, swi9.u1);
  
connect(con11.y, addPar.u);
  
connect(con11.y, addPar1.u);
  
connect(con11.y, addPar2.u);
  
connect(fixDryBulDifDryBul.y, and12.u2);
  
connect(or7.y, and12.u1);
  
connect(and12.y, swi13.u2);
  
connect(con3.y, min1.u1);
  
connect(TRet, min1.u2);
  
connect(min1.y, swi13.u1);
  
connect(swi13.y, swi3.u3);
  
connect(or5.y, and13.u2);
  
connect(fixDryBulDifDryBul.y, and13.u1);
  
connect(con12.y, min2.u1);
  
connect(TRet, min2.u2);
  
connect(and13.y, swi14.u2);
  
connect(min2.y, swi14.u1);
  
connect(con3.y, swi14.u3);
  
connect(swi14.y, swi13.u3);
  
connect(and14.y, not3.u);
  
connect(or9.y, and14.u2);
  
connect(not3.y, assMes2.u);
  
connect(fixDryBulDifDryBul.y, and14.u1);
  
connect(and15.y, swi15.u2);
  
connect(con5.y, min3.u1);
  
connect(TRet, min3.u2);
  
connect(min3.y, swi15.u1);
  
connect(fixDryBulDifDryBul.y, and15.u2);
  
connect(fixDryBulDifDryBul.y, and16.u2);
  
connect(or20.y, and15.u1);
  
connect(or19.y, and16.u1);
  
connect(con6.y, min4.u2);
  
connect(addPar.y, min4.u1);
  
connect(min4.y, swi16.u1);
  
connect(and16.y, swi16.u2);
  
connect(swi16.y, swi15.u3);
  
connect(con7.y, min5.u2);
  
connect(addPar1.y, min5.u1);
  
connect(min5.y, swi17.u1);
  
connect(and17.y, swi17.u2);
  
connect(or21.y, and17.u1);
  
connect(fixDryBulDifDryBul.y, and17.u2);
  
connect(swi17.y, swi16.u3);
  
connect(fixDryBulDifDryBul.y, swi18.u2);
  
connect(con8.y, min6.u2);
  
connect(addPar2.y, min6.u1);
  
connect(min6.y, swi18.u1);
  
connect(con9.y, swi18.u3);
  
connect(swi18.y, swi17.u3);
  
connect(swi15.y, swi12.u3);
  
connect(con11.y, min3.u2);
  
connect(con11.y, min1.u2);
  
connect(con11.y, min2.u2);
end AirEconomizerHighLimits;
 
This sequence checks if there is setpoint change and if the time-based suppression
has finished. The implementation is according to the Section 5.1.20 of ASHRAE
Guideline 36, May 2020. 
Calculate a time-delay period after any change in setpoint based on the difference
between the controlled variable at the time of the change and the new setpoint. The
default time delay period shall be as follows:
This block implements the trim and respond logic according to ASHRAE guideline G36,
Section 5.1.14.3 and 5.1.14.4.
For each upstream system or plant set point being controlled by a trim and respond
loop, define the initial values in system or plant sequences. Values for trim,
respond, time step, etc. shall be tuned to provide stable control.