ExampleAirConditioning2 (FB)¶
FUNCTION_BLOCK ExampleAirConditioning2
Example air conditioning 2
This example function block evolves from ExampleAirConditioning1 and implements a bit more complex air conditioning plant to demonstrate how to:
implement a plant / an aggregate in CFC using CODESYS Building Automation library function blocks
use SequenceControl and SequenceSwitch
do anti-freeze control / anti-freeze shutoff for heater coil
compute the xError / eErrorID from xError / eErrorID of function block instances used
This example involves following real world application aspects:
recirculation air admixing
minimum outdoor air ratio
sequence control of recirculation air damper / heater coil / cooler coil
energy selection (outdoor air vs. extract air) for recirculation air damper
energy level
air side anti-freeze / water side anti-freeze for heater coil
exhaust air damper / outdoor air damper control
extract air fan / supply air fan control
Watch out for comments in the implementation where those aspects are covered.
outdoor air temperatur sensor
outdoor air damper
recirculation air damper
heater coil (water operated)
frost monitor
heater coil return temperatur sensor
cooler coil (water operated)
supply air fan
extract air fan
extract air temperatur sensor
exhaust air damper
Air types¶
Air types - terms, abbreviations and colors oriented towards DIN EN 16798-3.
Sequence control damper / heater coil / cooler coil¶
SequenceControl is used to control three sequences - heater coil, RCA damper and cooler coil.
RCA damper - 0% (maximum outdoor air) .. 100% (would be: no outdoor air)
This is about to utilize mixed air or outdoor air energy as much as possible to heat / cool.
In case you want to trade comfort (in this case control deviation and it’s duration) a bit higher to energy consumption, you might want to set mc_rDamperCoilOverlap to a value < 0.0, making the RCA damper sequence and the coil sequences overlap thus forcing the coils to jump in before maximum RCA ratio is reached. Set mc_rDamperCoilOverlap to -1.0 (K) will make the coil open 25% (because rXP = 4.0) if recirculation air damper reached maximum.
Recirculation air admixing and energy selection¶
RCA admixing is done using the RCA damper as primary control sequence thus minimizing heat / cool energy consumption. Please see m_energySelection for the energy selection aspect.
Minimum outdoor air ratio¶
Minimum ODA ratio is achieved by rMax2 := 100% - rMinOdaRatio Remember: RCA damper is controlled by sequence 2. rOut2 = 0% means maximum ODA ratio (100% in this case).
Water side anti-freeze for heater coil¶
Water side anti-freeze for heater coil is done with two separate sub-functionalities
a controlled startup procedure
continuous anti-freeze during control
The startup procedure is done using HVAC_AntiFreezeControlStartup if ODA temperature < startup threshold:
preload (the heater coil):
ODA / ETA damper closed
RCA damper open (maximum recirculation air ratio - 100%)
forcing the heater coil to open
check heater coil return temperature to reach a threshold
after preload - wait for system to become settled (HVAC_AntiFreezeControlStartup.tFollowUp):
open ODA / ETA damper to minimum ODA ratio
set RCA damper accordingly to minimum ODA ratio
take over to normal control actions
SequenceControl.xForceEnable and .rForcedValue is used to force the heater coil sequence, thus providing smooth control takeover after sucessfull startup.
The continuous anti-freeze during control is done using a CommandVariable setting the heater coil sequence minimum.
Air side anti-freeze¶
Air side anti-freeze is done using a frost monitor HVAC_AntiFreezeControlMonitor. The frost monitor simply does shut-off the whole plant, but keeping the heater coil opened to maximum.
Hints¶
Unused pins of function block instances are hidden, so refer to the function block documentation for more details.
Caveats¶
To keep complexity as low as possible this example omits the following real world application aspects worth mentioning:
configuration missing (configuration of m_energyLevelSetpoint, m_sequenceControl, m_antiFreezeControlStartup and m_antiFreezeCont is not exposed on the ExampleAirConditioning1 VAR_INPUT section)
ignoring the subtle differences between indoor air control vs. extract air control (assuming extract air temp. = indoor air temp.)
no indoor air / supply air cascade control (control quality)
no supply air minimum enforced (physiological problems caused by low supply air temperature)
ramping up/down the ODA / EHA damper after anti-freeze control preload is done (our impl. does simply switch to rMinOdaRatio or 100%)
cooling is not blocked if continuous anti-freeze during control is opening heater coil
- InOut:
Scope
Name
Type
Initial
Comment
Input
xEnableBOOLTRUE
Enable
eLevelEnergyLevel.COMFORT
Energy level
rEtaTempREAL22.0
Extract air temperature
rSetptHeatComfortREAL21.0
Heat setpoint comfort level
rSetptCoolComfortREAL23.0
Cool setpoint comfort level
rOdaTempREAL10.0
Outdoor air temperature
rMinOdaRatioREAL20.0
Minimum outdoor air ratio, 0..100%
rHeaterCoilReturnTempREAL20.0
Heater coil return temperature
xFrostBOOLFALSE
Heater coil frost indication
xResetBOOLFALSE
Reset to proportional control / reset detected input error
itfDateTimeProviderUtil.IDateTimeProviderGlobals.g_dtpDateTimeProvider
Source for the current date and time information in milliseconds since 1.1.1970 00:00:00.000
Output
eModeOutHeatCoolOperationMode.INACTIVE
Operation mode.
rHeatOutREALHeat valve signal (0..100%).
rCoolOutREALCool valve signal (0..100%).
rOdaDamperOutREALOutdoor air damper signal (0..100%).
rRcaDamperOutREALRecirculation air damper signal (0..100%).
rEhaDamperOutREALExhaust air damper signal (0..100%).
xFanBOOLExtract air / supply air fan
xAntiFreezeStartupBOOLAnti-freeze control startup indication
xAntiFreezeStartupErrorBOOLAnti-freeze control startup error indication
xFrostAlarmBOOLFrost alarm indication
xErrorBOOLError indication
eErrorIDError ID