Tutorial de optimización - Variable de script personalizado
Edición en español con correcciones revisadas · Estado de revisión

Tutorial de optimización - Variable de script personalizado

Este tutorial muestra cómo configurar una optimización utilizando variables de script personalizado para modificar el modelo. Aprenderás a utilizar scripts para configurar variables de temperatura de consigna de calefacción y refrigeración e identificar ajustes óptimos que minimicen a la vez la falta de confort y las emisiones anuales de carbono.

 

El modelo del tutorial utiliza un sistema predeterminado de ventiloconvectores HVAC Simple, aunque el mismo proceso funciona con HVAC Detallado.

 

Los principales objetivos de aprendizaje son:

 

  1. Los objetivos de diseño para minimizar la falta de confort de los ocupantes y las emisiones anuales de carbono se configuran de la forma habitual.
  2. Las variables de diseño para las temperaturas de consigna de calefacción y refrigeración se configuran mediante la categoría de tipos de variables Script personalizado , incluidos los valores mínimo, máximo e intervalo.
  3. Se escribe un script para el punto de conexión OnDesignVariableChanged que responda a los cambios del modelo. El script aplica a cada zona la consigna solicitada por el optimizador.

Paso 1 - Crear un modelo base

1. Crea un modelo nuevo situado en London Gatwick.

 

2. Añade un edificio con los ajustes predeterminados y dibuja un bloque rectangular de 20m por 10m y una altura de 3.5m, como se muestra a continuación.

 

3. Carga la plantilla de actividad Generic Office Area a nivel de edificio en la pestaña Actividad.

Paso 2 - Configurar los objetivos de optimización

Primero configura los objetivos de diseño del estudio con los siguientes ajustes en el cuadro Ajustes paramétricos .

1. Abre el cuadro Ajustes paramétricos haciendo clic en el icono de la barra de herramientas y establece Tipo de análisis en la pestaña Análisis en 2-Optimización.

 

2. Ve a la pestaña Objetivos y añade 2 objetivos nuevos para minimizar Emisiones operativas de CO2 y Falta de confort ASHRAE 55 (toda vestimenta). Puedes editar los existentes o eliminarlos primero y crear 2 nuevos.

 

Una vez definidos ambos objetivos, la pestaña Objetivos debería quedar así:

 

Paso 3 - Configurar las variables de optimización

Configura 2 variables de diseño para variar las temperaturas de consigna de calefacción y refrigeración.

 

1. Elimina todas las variables predeterminadas salvo 2 y edita la primera de las restantes.

 

2. En el cuadro Editar variables de análisis , empieza estableciendo el tipo de variable en Script personalizado.

 

3. Establece el nombre en "Heating Setpoint".

Nota importante: El nombre introducido aquí en el cuadro Editar variables de análisis debe coincidir con el nombre correspondiente utilizado en el script personalizado descrito más abajo. Puedes copiarlo y guardarlo en un lugar accesible para utilizarlo después al escribir el script.

4. Establece Valor mínimo en 18, Valor máximo en 24 y Paso (optimización) en 0.2.

 

5. La clave de variable no se utiliza en este análisis y puede dejarse en blanco.

 

El cuadro debería tener ahora este aspecto:

 

 

5. Pulsa Aceptar para confirmar.

 

6. Sigue un procedimiento similar para configurar la variable Cooling Setpoint. El cuadro debería tener este aspecto después de definir la segunda variable:

 

Paso 4 - Escribir el script de las variables personalizadas

Puedes utilizar Python o CS-Script para este paso.

Paso 4a - Método CS-Script

El script de este ejemplo se basa en el ejemplo EMS «CS example: Custom Hook» suministrado con el programa. Sigue estos pasos para configurarlo:

1. Haz clic en el icono Scripts de la barra de herramientas para abrir el gestor de scripts y marca la casilla Activar scripts .

 

2. Haz clic en el elemento de selección Script. En el panel de información de la derecha aparecerá una lista de scripts existentes.

 

3. Abre la categoría CS-Script y selecciona el script «CS example: Custom Hook». Cópialo para crear un script personalizado editable, selecciónalo y haz clic en el icono Editar de la barra de información.

 

4. Cambia el nombre del script a "Heating and Cooling Setpoints"

 

5. Edita el script para aplicar al modelo las consignas de calefacción y refrigeración propuestas por el optimizador:

 

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

using DB.Api;

using DB.Extensibility.Contracts;

namespace DB.Extensibility.Scripts

{

    public class RunCustomScript : ScriptBase, IScript

    {

 

        public override void OnDesignVariableChanged(int optVarId, string variableCurrentValue)

        {

            Site site = ApiEnvironment.Site;

            Table table = site.GetTable("OptimisationVariables");

            Record record = table.Records.GetRecordFromHandle(optVarId);

            string optVariableName = record["Name"];

            // match names given to Custom Script type variables in "Optimisation Analysis / Variables" dialog

            if (optVariableName == "Heating Setpoint")

            {

                // Actions for first custom script variable

                // Set Heating Setpoint to Variable Current Value

                foreach (BuildingBlock block in ActiveBuilding.BuildingBlocks)

                {

                    foreach (Zone zone in block.Zones)

                    {

                        double heatingSetpoint;

                        heatingSetpoint = double.Parse(variableCurrentValue);

                        zone.SetAttribute("HeatingDesignSetPointTemperature", heatingSetpoint.ToString());

                    }

                }

            }

            // match names given to Custom Script type variables in "Optimisation Analysis / Variables" dialog

            else if (optVariableName == "Cooling Setpoint")

            {

                // Set Cooling Setpoint to Variable Current Value

                foreach (BuildingBlock block in ActiveBuilding.BuildingBlocks)

                {

                    foreach (Zone zone in block.Zones)

                    {

                        double coolingSetpoint;

                        coolingSetpoint = double.Parse(variableCurrentValue);

                        zone.SetAttribute("ActiveCoolingDesignSetPointTemperature", coolingSetpoint.ToString());

                    }

                }

            }

        }

    }

}

 

El punto de conexión OnDesignVariableChanged se llama una vez por cada variable de script personalizado mientras se prepara el modelo para la simulación. El valor de optVariableName transmitido mediante optVarId define la variable tratada y el valor de variableCurrentValue , también transmitido, proporciona su valor para esta simulación. El script recorre los bloques y las zonas y copia la consigna solicitada en variableCurrentValue al atributo de zona.

 

ActiveBuilding en este caso es una referencia al clon paramétrico copiado del modelo base para cada simulación, por lo que se pueden aplicar cambios sin afectar al modelo base.

Paso 4b - Método Python

Sigue los pasos siguientes para configurar el script de Python para el análisis.

1. Haz clic en el icono Scripts de la barra de herramientas para abrir el gestor de scripts y marca la casilla Activar scripts .

 

2. Haz clic en el elemento de selección Script. En el panel de información de la derecha aparecerá una lista de scripts existentes.

3. Haz clic en la categoría Python-Script y pulsa el icono Añadir del panel de información para crear un script de Python.

 

4. Cambia el nombre del script a "Heating and Cooling Setpoints"

 

5. Edita el script para aplicar al modelo las consignas de calefacción y refrigeración propuestas por el optimizador:

 

def on_design_variable_changed(opt_var_id, variable_current_value):

 

      site = api_environment.Site

      table = site.GetTable("OptimisationVariables")

      record = table.Records.GetRecordFromHandle(opt_var_id)

      opt_variable_name = record["Name"]

 

      if opt_variable_name == "Heating Setpoint":

           for block in active_building.BuildingBlocks:

                for zone in block.Zones:

                     heatingSetpoint = str(variable_current_value)

                     zone.SetAttribute("HeatingDesignSetPointTemperature", heatingSetpoint)

      elif opt_variable_name == "Cooling Setpoint":

           for block in active_building.BuildingBlocks:

                for zone in block.Zones:

                     coolingSetpoint = str(variable_current_value)

                     zone.SetAttribute("ActiveCoolingDesignSetPointTemperature", coolingSetpoint)

Consejo: Para ahorrar tiempo puedes copiar el script anterior y pegarlo en el cuadro. Python requiere sangrías como parte de su sintaxis y podrían perderse al pegarlo. En ese caso debes insertarlas manualmente después de pegar. La forma más sencilla es utilizar la tecla <Tab>.

El punto de conexión on_design_variable_changed se llama una vez por cada variable mientras se prepara el modelo para la simulación. El valor de opt_variable_name, transmitido mediante opt_var_iddefine la variable tratada y el valor de variable_current_value , también transmitido, proporciona su valor para esta simulación. El script recorre los bloques y las zonas y copia la consigna solicitada en variable_current_value al atributo de zona.

 

active_building en este caso es una referencia al clon paramétrico copiado del modelo base para cada simulación, por lo que se pueden aplicar cambios paramétricos sin afectar al modelo base.

Nota: Al comparar los scripts de 4a y 4b se aprecia que la versión Python es más compacta y clara que la equivalente en CS-Script. Por ello, Python suele ser el método preferido por quienes no desarrollan en C#.

6. Marca la casilla Activar programa para garantizar que el script se ejecuta durante el cálculo.

 

7. Pulsa Aceptar para confirmar los cambios del script.

Paso 5 - Ejecutar una simulación estándar

Haz clic en la pestaña Simulación y pulsa actualizar para ejecutar una simulación anual base, paso necesario antes de la optimización. Antes de pulsar Aceptar, aplica los siguientes ajustes:

 

1. Asegúrate de simular todo el año haciendo clic en el enlace Simulación anual del panel de información.

 

2. Asegúrate de generar solo resultados anuales o mensuales marcando el intervalo Mensual y Run period y desactivando todos los demás resultados.

 

Deja todos los demás ajustes con sus valores predeterminados.

Paso 6 - Ejecutar la optimización

Ve a la pestaña Optimización + UA/SA y pulsa el icono Actualizar de la barra de herramientas para abrir el cuadro Opciones de cálculo de optimización y aplica los ajustes siguientes, iguales o similares a los predeterminados.

 

 

Pulsa el botón Iniciar para ejecutar las simulaciones de optimización.

Paso 7 - Analizar los resultados

Cuando termine la optimización y cierres el cuadro Opciones de cálculo, la pantalla principal debería ser similar a la captura siguiente; las anotaciones se añadieron manualmente.

 

 

El gráfico muestra que las emisiones de carbono suelen ser mayores para las soluciones óptimas más confortables, es decir, que existe una tensión entre falta de confort y consumo de calefacción y refrigeración. Según la prioridad otorgada al confort frente al consumo y el impacto ambiental, existe una gama de temperaturas de consigna óptimas.

 

El grupo superior izquierdo de puntos de Pareto representa las opciones con la consigna de refrigeración en su valor máximo permitido de 28°C.

Nota: En este tutorial la lógica que modifica la consigna se aplica de forma sencilla para mostrar cómo utilizar variables de script personalizado para cambios básicos del modelo. En realidad podrías reproducir el mismo análisis sin scripts utilizando los tipos integrados Temperatura de consigna de calefacción y Temperatura de consigna de refrigeración . En un proyecto real podría ser necesario ajustar también las consignas de ventilación natural u otros datos en respuesta a los cambios de la variable de diseño. Variables más complejas pueden configurarse ajustando un script como el utilizado aquí.