Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question

Revision history [back]

"Null" should only be used to deactivate actuators to not change the model anymore -- they should not be used with sensors. If you want to check if the zone air CO2 concentration sensors are not equal to zero, that should be written as:

If <loopwindowvariablename>Air_CO2_Concentration_IDA1 <> 0,

On another note, I believe that your first loop over all windows to create the sensors is incorrect. Zone Air CO2 Concentration is an output variable for each zone in the model -- not for each window in the model. So, if multiple windows are attached to the same zone, the sensors created with your current loop are essentially copies of each other with the same CO2 concentration value. If you want to open windows for natural ventilation, then using a loop over all windows in the model to create actuators for Venting Opening Factor is correct.

"Null" should only be used to deactivate actuators to not change the model anymore -- they should not be used with sensors. If you want to check if the zone air CO2 concentration sensors are not equal to zero, that should be written as:

If <loopwindowvariablename>Air_CO2_Concentration_IDA1 <> 0,

I believe that EMS is checking this first IF statement, not able to evaluate it, and as a result skipping over the remaining lines of your loop. The IDF you attached has the EMS program created below from this code.

! programa per a IDA1
EnergyManagementSystem:Program,
 CO2WindowControlIDA1,
;

As you can see, only the first "Name" input field is set, and no EMS code is generated. This is what the severe error message in your error file indicates as well.

It looks like you are using DesignBuilder to write this EMS code, since you are able to use loops and other features that "native" EnergyPlus IDF files can't use. If DesignBuilder has an <if> check, then you can use that before the EMS program in order to not create the entire program if you don't want to.

On another note, I believe that your first loop over all windows to create the sensors is incorrect. Zone Air CO2 Concentration is an output variable for each zone in the model -- not for each window in the model. So, if multiple windows are attached to the same zone, the sensors created with your current loop are essentially copies of each other with the same CO2 concentration value. If you want to open windows for natural ventilation, then using a loop over all windows in the model to create actuators for Venting Opening Factor is correct.

"Null" should only be used to deactivate actuators to not change the model anymore -- they should not be used with sensors. If you want to check if the zone air CO2 concentration sensors are not equal to zero, that should be written as:

If <loopwindowvariablename>Air_CO2_Concentration_IDA1 <> 0,

I believe that EMS is checking this first IF statement, not able to evaluate it, and as a result skipping over the remaining lines of your loop. The IDF you attached has the EMS program created below from this code.

! programa per a IDA1
EnergyManagementSystem:Program,
 CO2WindowControlIDA1,
;

As you can see, only the first "Name" input field is set, and no EMS code is generated. This is what the severe error message in your error file indicates as well.

It looks like you are using DesignBuilder to write this EMS code, since you are able to use loops and other features that "native" EnergyPlus IDF files can't use. If DesignBuilder has an <if> check, then you can use that before the EMS program in order to not create the entire program if you don't want to.

On another note, I believe that your first loop over all windows to create the sensors is incorrect. Zone Air CO2 Concentration Concentration is an output variable for each zone in the model -- not for each window in the model. So, if multiple windows are attached to the same zone, the sensors created with your current loop are essentially copies of each other with the same CO2 concentration value. If you want to open windows for natural ventilation, then using a loop over all windows in the model to create actuators for Venting Opening Factor is correct.

"Null" should only be used to deactivate actuators to not change the model anymore -- they should not be used with sensors. If you want to check if the zone air CO2 concentration sensors are not equal to zero, that should be written as:

If <loopwindowvariablename>Air_CO2_Concentration_IDA1 <> 0,

I believe that EMS is checking this first IF statement, not able to evaluate it, and as a result skipping over the remaining lines of your loop. The IDF you attached has the EMS program created below from this code.

! programa per a IDA1
EnergyManagementSystem:Program,
 CO2WindowControlIDA1,
;

As you can see, only the first "Name" input field is set, and no EMS code is generated. This is what the severe error message in your error file indicates as well.

It looks like you are using DesignBuilder to write this EMS code, since you are able to use loops and other features that "native" EnergyPlus IDF files can't use. If DesignBuilder has an <if> check, check function, then you can use that before the EMS program lines in order to not create the entire program if you don't want to.under certain conditions. What you are doing now is always creating the program, the only adding it's EMS code under certain conditions.

On another note, I believe that your first loop over all windows to create the sensors is incorrect. Zone Air CO2 Concentration is an output variable for each zone in the model -- not for each window in the model. So, if multiple windows are attached to the same zone, the sensors created with your current loop are essentially copies of each other with the same CO2 concentration value. If you want to open windows for natural ventilation, then using a loop over all windows in the model to create actuators for Venting Opening Factor is correct.