DesignBuilder Erl
DesignBuilder permite acceder al lenguaje completo EnergyPlus Runtime Language (Erl), descrito en detalle en la guía de aplicación EMS. Puedes introducir scripts Erl para modificar las simulaciones en el diálogo Programa EMS .
Esta página describe extensiones de Erl que permiten portar código entre modelos. Los bucles, las sentencias lógicas If y el acceso a atributos permiten referirse a datos sin nombrar zonas, superficies y ventanas en los scripts Erl.
En la documentación, el lenguaje combinado Erl y las extensiones DB se denomina DB Erl .
Nota: Erl distingue mayúsculas y minúsculas.
Bucles
En modelos con más de una zona suele ser más cómodo usar sentencias de bucle. Pueden recorrerse todas las zonas, superficies y huecos de un modelo o solo los seleccionados.
Bucles de zona
Tienen el formato general:
<ForAllZones>,
IF <LoopZoneVariableName>_DeltaT < 0 ,
SET <LoopZoneVariableName>_DeltaT = 0,
ENDIF,
<LoopNextZone>,
El código escrito así es más fácil de gestionar, especialmente en modelos con muchas zonas o cuando debe poder usarse en cualquier modelo.
La tabla siguiente resume las sentencias de bucle de zona.
| Sentencia DB Erl | Descripción | |
|
Bucles |
||
| <ForAllZones> | Recorre todas las zonas del edificio actual. | |
| <ForAllOccupiedZones> | Recorre todas las zonas ocupadas del edificio actual. Una zona se considera ocupada si la densidad de ocupación es > 0 y el tipo de zona es 1-Estándar. | |
| <ForAllUnoccupiedZones> | Recorre todas las zonas desocupadas del edificio actual. | |
| <ForAllOccupiedCooledZones> | Recorre todas las zonas ocupadas del edificio actual que tengan marcada la casilla Refrigerada en la pestaña HVAC. | |
| <ForAllOccupiedNonCooledZones> | Recorre todas las zonas del edificio actual que no tengan marcada la casilla Refrigerada en la pestaña HVAC. | |
| <ForAllOccupiedHeatedZones> | Recorre todas las zonas ocupadas del edificio actual que tengan marcada la casilla Calefactada en la pestaña HVAC. | |
| <ForAllOccupiedNonHeatedZones> | Recorre todas las zonas ocupadas del edificio actual que no tengan marcada la casilla Calefactada en la pestaña HVAC. | |
| <LoopNextZone> | Indica el fin del bucle de zona. | |
Marcadores dentro del bucle |
||
| <LoopZoneIDFName> | El marcador se sustituye por el nombre IDF de la zona actual del bucle, por ejemplo Block1:Zone1. | |
| <LoopZoneVariableName> | El marcador se sustituye por una versión del nombre IDF de la zona modificada para ser un nombre válido de variable Erl («:», «.» y «?» se sustituyen por «_»). Por ejemplo, Block1:Zone1 pasa a ser Block1_Zone1. | |
| <LoopZoneDataFromAttribute AttributeName FieldName> | Busca el componente o plantilla almacenado en AttributeName para el bucle actual y sustituye el marcador por el valor del campo FieldName. | |
| <LoopZoneAttribute AttributeName> | Busca el valor de AttributeName y lo sustituye por el marcador. Por ejemplo, <LoopZoneAttribute ZoneMultiplier> puede sustituirse por 1 o <LoopZoneAttribute OccupancySchedule> por Office_Open_off. Consulta la lista completa de nombres de atributos válidos. | |
|
Booleano |
||
| <If LoopZoneAttribute a < b Then> | Expresión booleana. Por ejemplo, <If LoopZoneAttribute MechanicalVentilationRateType = 2 Then> | |
| <If ZoneLoopValue a < b Then> | Expresión booleana. Utiliza un valor en lugar de un atributo. Suele usarse junto con <LoopZoneDataFromAttribute AttributeName FieldName>, por ejemplo <If ZoneLoopValue <LoopZoneAttribute ActivityTemplate AllGainsValue> > 10 Then> | |
|
Otros |
||
| <Any_Occupied_ZoneIDFName> | Sustituye <Any_Occupied_ZoneIDFName> por el nombre IDF de cualquier zona ocupada del modelo; en realidad, la primera que encuentre al recorrerlas. |
Bucles de superficie
La tabla siguiente resume las sentencias de bucle de superficie.
| Bucles | |
| <ForAllSurfaces> | Recorre todas las superficies del edificio actual. |
| <ForAllExternalSurfaces> | Recorre todas las superficies exteriores del edificio actual. |
| <ForAllInternalSurfaces> | Recorre todas las superficies interiores del edificio actual. |
| <LoopNextSurface> | Indica el fin del bucle de superficie. |
Marcadores dentro del bucle |
|
| <LoopSurfaceIDFName> | El marcador se sustituye por el nombre IDF de la superficie actual del bucle, por ejemplo Block1:Zone1_Wall_2_0_0. |
| <LoopSurfaceVariableName> | El marcador se sustituye por una versión del nombre IDF de superficie modificada para ser un nombre válido de variable Erl («:», «.» y «?» se sustituyen por «_»). Por ejemplo, Block1:Zone1_Wall_2_0_0 pasa a ser Block1_Zone1_Wall_2_0_0. |
| <LoopSurfaceAttribute AttributeName> | Busca el valor de AttributeName y lo sustituye por el marcador. Por ejemplo, <LoopSurfaceAttribute SillHeight> puede sustituirse por 0.8. |
| <LoopSurfaceDataFromAttribute AttributeName FieldName> | Busca el objeto almacenado en AttributeName para el bucle actual y sustituye el marcador por el valor de FieldName. Por ejemplo, <LoopSurfaceAttribute WallConstr NumberLayers> puede sustituirse por 4. |
| <LoopSurfaceZoneIDFName> | El marcador se sustituye por el nombre IDF de la zona que contiene la superficie actual. Por ejemplo, la zona Block1:Zone1 contiene la superficie Block1:Zone1_Wall_2_0_0. |
| <LoopSurfaceZoneVariableName> | El marcador se sustituye por el nombre de variable Erl de la zona que contiene la superficie actual. Por ejemplo, Block1:Zone1, que pasa a ser Block1_Zone1, contiene la superficie Block1:Zone1_Wall_2_0_0. |
Booleano |
|
| <If LoopSurfaceAttribute a < b Then> | Expresión booleana. Por ejemplo, <If LoopSurfaceAttribute FixedExternalWallThickness = 1 Then> (casillas: 1 significa marcada y 0 desmarcada) |
| <If SurfaceLoopValue a < b Then> | Expresión booleana. Utiliza un valor en lugar de un atributo. Suele usarse junto con <LoopSurfaceDataFromAttribute AttributeName FieldName>, por ejemplo <If SurfaceLoopValue <LoopSurfaceDataFromAttribute WallConstr NumberLayers> = 4 Then> |
Bucles de ventana
La tabla siguiente resume las sentencias de bucle de ventana.
| Sentencia DB Erl | Descripción |
|---|---|
Bucles |
|
| <ForAllWindows> | Recorre todas las ventanas del edificio actual. |
| <ForAllExternalWindows> | Recorre todas las ventanas exteriores del edificio actual. |
| <ForAllShadedWindows> | Recorre todas las ventanas del edificio actual que tengan marcada la casilla Sombreado de ventana en la pestaña Huecos. |
| <ForAllSlattedBlindsShadedWindows> | Recorre todas las ventanas del edificio actual que tengan marcada la casilla Sombreado de ventana en la pestaña Huecos y cuyo sistema de sombreado seleccionado pertenezca a la categoría Persianas de lamas . |
| <ForAllDiffusingShadedWindows> | Recorre todas las ventanas del edificio actual que tengan marcada la casilla Sombreado de ventana en la pestaña Huecos y cuyo sistema de sombreado seleccionado pertenezca a la categoría Cortinas difusoras . |
| <ForAllElectrochromaticSwitchableShadedWindows> | Recorre todas las ventanas del edificio actual que tengan marcada la casilla Sombreado de ventana en la pestaña Huecos y cuyo sistema de sombreado seleccionado pertenezca a la categoría Persianas de ventana - Conmutación electrocrómica . |
| <ForAllTransparentInsulationShadedWindows> | Recorre todas las ventanas del edificio actual con sombreado interior de tipo aislamiento transparente. |
| <ForAllMultipleStateElectrochromicShadedWindows> | Recorre todas las ventanas del edificio actual con sombreado interior de tipo SageGlass Electrochromic. |
| <LoopNextWindow> | Fin del bucle de ventana. |
Marcadores dentro del bucle |
|
| <LoopWindowIDFName> | El marcador se sustituye por el nombre IDF de la ventana actual del bucle, por ejemplo Block1:Zone1_Wall_2_0_0. |
| <LoopWindowVariableName> | El marcador se sustituye por una versión del nombre IDF de ventana modificada para ser un nombre válido de variable Erl («:», «.» y «?» se sustituyen por «_»). Block1:Zone1_Wall_2_0_0 pasaría a ser Block1_Zone1_Wall_2_0_0. |
| <LoopWindowAttribute AttributeName> | Busca el valor de AttributeName de la ventana y lo sustituye por el marcador. Por ejemplo, <LoopWindowAttribute InternalBlindControlSolar> puede sustituirse por 120 o <LoopWindowAttribute RevealOutsideProjection> por 0.5 si la profundidad exterior de jamba es 0.5m. Consulta la lista completa de nombres válidos. |
| <LoopWindowZoneAttribute AttributeName> | Busca el valor del atributo AttributeName de la zona principal y lo sustituye por el marcador. Una aplicación típica es acceder a «Programación de ocupación» para obtener la programación de disponibilidad del funcionamiento «Seguir ocupación», o a «Plantilla de actividad» para filtrar ventanas según la actividad de la zona principal. |
| <LoopWindowDataFromAttribute AttributeNameOfTable FieldName> | Busca el componente o plantilla almacenado en AttributeName de la ventana para el elemento actual del bucle y sustituye el marcador por el valor de FieldName. Por ejemplo, <LoopWindowAttribute GlazingType Layers> puede sustituirse por 2 si el acristalamiento de la ventana actual tiene 2 capas. |
Expresiones booleanas |
|
| <If LoopWindowAttribute a < b Then> | Expresión booleana. Por ejemplo, < If LoopWindowAttribute InternalBlind =1 Then> (casillas: 1 significa marcada y 0 desmarcada) |
| <If WindowLoopValue a < b Then> |
Expresión booleana utiliza un valor en lugar de un atributo. Suele usarse junto con <LoopWindowDataFromAttribute AttributeName FieldName>, por ejemplo <If WindowLoopValue <LoopWindowAttribute GlazingType Layers> >= 2 Then> |
Argumentos opcionales
Pueden usarse argumentos opcionales con cualquier tipo de bucle para filtrar los datos no necesarios.
| Argumento opcional | Función | Dónde funciona |
| Etiqueta | Excluye cualquier objeto que no coincida con la etiqueta. Distingue mayúsculas y minúsculas. | Todos los niveles de atributos. |
| MaxSlope | Excluye cualquier superficie o hueco cuya pendiente sea superior a este valor. | Superficies y huecos exteriores. |
| MinSlope | Excluye cualquier superficie o hueco cuya pendiente sea inferior a este valor. | Superficies y huecos exteriores. |
| MaxOrientation | Excluye cualquier superficie o hueco cuya orientación sea superior a este valor. | Superficies y huecos exteriores. |
| MinOrientation | Excluye cualquier superficie o hueco cuya orientación sea inferior a este valor. | Superficies y huecos exteriores. |
| ZoneIDFName | Excluye cualquier zona, superficie o hueco situado en una zona cuyo nombre no contenga este texto. Distingue mayúsculas y minúsculas. | Zona, superficie y hueco. |
| ActivityTemplate | Excluye los objetos que no tengan cargada la plantilla de actividad indicada. El valor del argumento debe coincidir exactamente con la plantilla, sin distinguir mayúsculas y minúsculas. | Edificio, zona, superficie y hueco. |
| LightingTemplate | Excluye los objetos que no tengan cargada la plantilla de iluminación indicada. El valor del argumento debe coincidir exactamente con la plantilla, sin distinguir mayúsculas y minúsculas. | Edificio, zona, superficie y hueco. |
| HVACTemplate | Excluye los objetos que no tengan cargada la plantilla HVAC indicada. El valor del argumento debe coincidir exactamente con la plantilla, sin distinguir mayúsculas y minúsculas. | Edificio, zona, superficie y hueco. |
| GlazingTemplate | Excluye los objetos que no tengan cargada la plantilla de acristalamiento indicada. El valor del argumento debe coincidir exactamente con la plantilla, sin distinguir mayúsculas y minúsculas. | Edificio, zona, superficie y hueco. |
| ConstructionTemplate | Excluye los objetos que no tengan cargada la plantilla de cerramiento indicada. El valor del argumento debe coincidir exactamente con la plantilla, sin distinguir mayúsculas y minúsculas. | Edificio, zona, superficie y hueco. |
El formato de un argumento opcional es: {argument=value}
Nota: Debe haber al menos un espacio entre «>» y «{».
Si un argumento admite varios valores alternativos, el formato es: {argument=value1//value2}. El código se ejecuta si el argumento es igual a value1 O a value2. Véanse los ejemplos siguientes.
Pueden incluirse varios argumentos separados por «;».
Ejemplos
| < ForAllExternalSurfaces> {MinSlope=89;MaxSlope=91} | para recorrer solo muros verticales exteriores. |
| <ForAllWindows> {ZoneIDFName=Floor1} |
para recorrer ventanas de zonas del bloque «floor 1». |
| <ForAllOccupiedZones> {ActivityTemplate=Domestic Bedroom} |
para recorrer dormitorios ocupados. |
| <ForAllOccupiedZones> {ActivityTemplate=Domestic Bedroom//Domestic Bathroom} | para recorrer dormitorios y baños ocupados. |
| <ForAllZones> {LightingTemplate=LED; ZoneIDFName=Floor1//Floor2} | para recorrer todas las zonas con luces LED en las plantas 1 y 2 |
Nota: Aunque los bucles pueden anidarse, solo pueden usarse argumentos condicionales en la sentencia del bucle más externo.
Expresiones booleanas - Incluir o excluir bloques de código
Cuando el preprocesador DB Erl encuentra una directiva <If...> seguida finalmente de una directiva <Endif> , incluirá el código entre <If...> y <Endif> solo si la expresión booleana posterior a <If ... evalúa a True. En caso contrario, el bloque no se incluye en el archivo IDF del modelo.
| Sentencia DB Erl | Descripción | |
| <If Expresión booleana Then> |
Donde la expresión booleana evalúa a True o False. Por ejemplo:
<If BuildingAttribute HourlyOutput = 1 Then> Sentencias Erl para salida horaria <Endif>
Expresión booleana debe tener la forma:
Esto es correcto: <If LoopZoneAttribute MechanicalVentilationRateType = 2 Then>,
Esto es incorrecto: <If LoopZoneAttribute MechanicalVentilationRateType = 2-Min Fresh Air (Per Person)
|
|
| <Endif> | marca el final del bloque de texto que se incluirá o excluirá. |
Variables paramétricas
Las variables EMS personalizadas pueden introducirse en el script DB Erl para proporcionar ajustes variables según un análisis paramétrico u optimización. La sintaxis es:
| <Var, VarName, DefaultValue> | VarName es la clave de variable correspondiente utilizada en el diálogo Variables. DefaultValue es el valor que se utiliza en una simulación estándar no paramétrica. |
Cambios de DB Erl respecto a EnergyPlus Erl estándar
DesignBuilder Erl es idéntico a la sintaxis Erl estándar con 1 excepción:
- para operaciones lógicas OR usa «_OR_» en lugar de «OR», por ejemplo IF (c _OR_ d), en lugar de IF (c OR d).