Objective
Your task is to design a demand-controlled ventilation system in Niagara 4 (N4) using primitive logic blocks. The system must vary the supply fan speed based on CO₂ concentration and occupancy, ensuring good indoor air quality while minimizing energy consumption.
This challenge tests your ability to translate functional requirements into a reliable control strategy using Niagara’s primitive logic blocks. It simulates the type of workflow you’d encounter when implementing a DCV strategy in a building management system.
Instructions
Setup
- Inputs
CO2Sensor
(numeric): Measured CO₂ level in parts per million (ppm).OccupancySensor
(boolean): Indicates whether the space is occupied (true
) or unoccupied (false
).TimeSchedule
(boolean): Active (true
) during building operating hours.ManualOverride
(boolean): Forces the fan to a user-defined speed.
- Parameters
CO2Setpoint
(numeric): Desired maximum CO₂ level (e.g., 800 ppm).UnoccupiedFanSpeed
(numeric): Minimum fan speed when unoccupied (e.g., 20%).OccupiedMinFanSpeed
(numeric): Minimum fan speed when the zone is occupied (e.g., 50%).OccupiedMaxFanSpeed
(numeric): Maximum fan speed when the zone is occupied (e.g., 100%).AlarmCO2Level
(numeric): CO₂ level that triggers an alarm condition (e.g., 1200 ppm).OverrideFanSpeed
(numeric): Fan speed to apply whenManualOverride
is true (e.g., 100%).
- Outputs
FanSpeed
(numeric): The commanded fan speed (0–100%).HighCO2Alarm
(boolean): Alarm indicator if CO₂ exceedsAlarmCO2Level
.
Logic Requirements
- Occupied vs. Unoccupied Operation
- When
TimeSchedule
is active andOccupancySensor
istrue
:- The fan speed must at least be
OccupiedMinFanSpeed
. - As CO₂ approaches the
CO2Setpoint
, the fan speed should increase proportionally, up toOccupiedMaxFanSpeed
.
- The fan speed must at least be
- When
TimeSchedule
is inactive orOccupancySensor
isfalse
:- The fan speed should revert to
UnoccupiedFanSpeed
.
- The fan speed should revert to
- Proportional Control (Demand-Controlled Ventilation)
- If
CO2Sensor
is belowCO2Setpoint
, maintain the fan at the minimum speed for occupied mode (OccupiedMinFanSpeed
). - If
CO2Sensor
rises aboveCO2Setpoint
, ramp up the fan speed linearly until it reachesOccupiedMaxFanSpeed
at or above theAlarmCO2Level
. - Use a deadband or hysteresis around the
CO2Setpoint
to avoid frequent adjustments in fan speed due to minor CO₂ fluctuations.
- Alarm Condition
- If
CO2Sensor
exceedsAlarmCO2Level
, setHighCO2Alarm
totrue
. - While in alarm, the fan should run at the maximum speed (
OccupiedMaxFanSpeed
) if the system is in occupied mode. - Once
CO2Sensor
falls back below theAlarmCO2Level
minus a small deadband, clear the alarm.
- Manual Override
- If
ManualOverride
istrue
, theFanSpeed
should be forced toOverrideFanSpeed
regardless of CO₂ or occupancy conditions. - The manual override resets (returns to automatic control) at the start of the next active
TimeSchedule
period.
- Fail-Safe / Minimum Constraints
- In all cases, ensure
FanSpeed
never goes below 0% or above 100%. - Prevent rapid oscillations by applying a small delay or rate-limiting logic if necessary.
Tools
Leverage Niagara 4’s primitive logic blocks (comparators, numeric ranges, latches, hysteresis blocks, etc.) and methods such as:
- Comparators (Greater Than, Less Than) to evaluate CO₂ levels vs. setpoints.
- Math blocks (Add, Subtract, Multiply, Divide) for scaling or linear interpolation between
OccupiedMinFanSpeed
andOccupiedMaxFanSpeed
. - Hysteresis or Deadband blocks to prevent rapid toggling around the setpoint or alarm threshold.
- Boolean Logic blocks (And, Or, Not) to handle occupancy and scheduling conditions.
- Timer or Delay blocks (optional) to smooth out transitions if needed.
Testing
- CO₂ Ramping
- Gradually increase the
CO2Sensor
value from well below the setpoint to above the alarm threshold. - Verify that the
FanSpeed
transitions from minimum to maximum appropriately. - Confirm that
HighCO2Alarm
is set when crossingAlarmCO2Level
and cleared after falling below it (with deadband).
- Occupancy & Schedule
- Toggle
OccupancySensor
betweentrue
andfalse
whileTimeSchedule
is active. - Ensure the system moves from
UnoccupiedFanSpeed
to at leastOccupiedMinFanSpeed
when occupied, and vice versa. - Set
TimeSchedule
inactive and confirm fan speed reverts toUnoccupiedFanSpeed
.
- Manual Override
- Enable
ManualOverride
and verifyFanSpeed
is forced toOverrideFanSpeed
. - Simulate the next schedule period transition and confirm the system returns to normal automatic logic.
- Alarm Handling
- Drive
CO2Sensor
above theAlarmCO2Level
. - Ensure
HighCO2Alarm
is triggered andFanSpeed
is atOccupiedMaxFanSpeed
(if occupied). - Drop
CO2Sensor
below the alarm threshold minus deadband; confirm alarm is cleared.
Submission
- File: Save and submit your completed Niagara 4 station (
.bog
file) as a reply to this post. - Documentation: Include a brief explanation of how your logic blocks interconnect and how they fulfill the requirements (hysteresis usage, manual override, scaling for fan speed, etc.).
Real-world conditions, hardware constraints, and site-specific guidelines may influence your actual implementation—this exercise is for educational purposes.
Good luck, and happy engineering!