Updated Variable Values Not Reflecting in EnergyPlus Output Files

asked 2024-04-24 01:19:46 -0500

Irfan's avatar

updated 2024-04-24 09:50:58 -0500

Description:
I'm relatively new to working with EnergyPlus and the EnergyPlus API. I've implemented a custom logic in Python to update the value of actuators during the runtime of a simulation. However, despite observing these updates during runtime, the generated output files (e.g., <Prefix>out.csv, <Prefix>ssz.csv, <Prefix>szsz.csv) do not reflect these changes. I've also tried using ReadVarsESO.exe to generate a CSV file of output, but the changes are not captured there either.

Efforts Made:
I've thoroughly debugged the code and confirmed that during runtime, the values of the actuators are indeed being updated as expected. Here's a snippet of the output showing the actuator values being updated:

...

zone_air_temp : 17.19054414796448

actuator_value : 13.249069956310262

actuator_updated_value : 13.19054414796448

zone_air_temp : 17.13274368005318

actuator_value : 13.19054414796448

actuator_updated_value : 13.132743680053181

...

Code Snippet:

import sys
from pyenergyplus.api import EnergyPlusAPI

one_time = True
zone_air_temp = 0
fan_actuator = 0

def my_callback(state):
  global one_time, zone_air_temp, fan_actuator

  if one_time:
    if not api.exchange.api_data_fully_ready(state):
      return
    zone_air_temp = api.exchange.get_variable_handle(state, "Zone Air Temperature", "Thermal Zone 1")
    fan_actuator = api.exchange.get_actuator_handle(state, "Fan", "Fan Air Mass Flow Rate", "Standard Fan")
    one_time = False

  zone_air_temp_value = api.exchange.get_variable_value(state, zone_air_temp)
  print("zone_air_temp :  ", zone_air_temp_value)
  fan_actuator_value = api.exchange.get_actuator_value(state, fan_actuator)
  print("actuator_value : ",fan_actuator_value)

  # Custom logic is here:
  api.exchange.set_actuator_value(state, fan_actuator, zone_air_temp_value-4)

  fan_actuator_value = api.exchange.get_actuator_value(state,fan_actuator)
  print("actuator_updated_value : ",fan_actuator_value)

api = EnergyPlusAPI()
state = api.state_manager.new_state()

api.runtime.callback_end_zone_timestep_after_zone_reporting(state, my_callback)
api.exchange.request_variable(state, "Fan Air Mass Flow Rate", "Thermal Zone 1")

api.runtime.run_energyplus(state, sys.argv[1:])

Request for Assistance:
I would appreciate any insights or suggestions on why the updated variable values are not being reflected in the output files. Additionally, if there are any alternative methods to capture these changes effectively, I'm open to exploring those as well.

Thank you for your assistance.

edit retag flag offensive close merge delete