DesignBuilder-logo

Connexion

Remplacer un planning Compact par un fichier externe

Publié dans Scripts C#

Ce script C# recheche un planning Compact dans le modèle pour le remplacer par un pointeur vers un fichier csv externe. Ce fichier doit contenir le planning au pas horaire.

Le code ci-dessous doit être coller dans le module Script, catégorie CS-Script.

Version minimale : 6.1       Prérequis : Module Script

Fichier externe contenant les valeurs du planning

Le contenu du fichier csv est du type :

  1. Aucune, une ou plusieurs lignes d'entête qui pourront être ingorées
  2. Une ligne par heure contenant la valeur du planning. Il peut y avoir des données avant cette valeur, ces données pourront être ingorées.

Exemple, la valeur utile est uniquement les fractions en fin de ligne mais le fichier contient aussi la date et l'heure (inutile pour EnergyPlus mais pratique pour nous !) :

01/01/2002;1;0.25
01/01/2002;2;0.5
01/01/2002;3;0.70
01/01/2002;4;0.86
01/01/2002;5;0.96
....

Le délimiteur est au choix (virgule, point virgule, tabulation) mais vous pouvez aussi utiliser des champs de taille fixe tel que :

jj/mm/aaaahhn.nnn avec 10 caractères pour la date, 2 pour l'heure et 5 pour la valeur.

01/01/2002010.250
01/01/2002020.500

Le fichier csv doit être placé dans le répertoire EnergyPlus de designBuilder.

Programme C#

Le code suivant est à copier dans le module Script de DesignBuilder, catégorie CS-Script. Attention à remplacer le nom de votre planning et du fichier externe comme indiqué ci-dessous.

using System.Collections.Generic;
using DB.Extensibility.Contracts;
using EpNet;

namespace DB.Extensibility.Scripts
{
public class IdfFindAndReplace : ScriptBase, IScript
{
public override void BeforeEnergySimulation()
{
IdfReader idfReader = new IdfReader(ApiEnvironment.EnergyPlusInputIdfPath, ApiEnvironment.EnergyPlusInputIddPath);

// Recherche du planning Compact à remplacer

IEnumerable<IdfObject> planningsCompact = idfReader["Schedule:Compact"];
foreach (IdfObject planning in planningsCompact)
{
string nomPlanning = planning["Name"].Value;

// Remplacer le nom du planning enttre guillemet ci-dessous par celui que vous avez créé dans le modèle et que vous voulez remplacer.

//Ne pas toucher à la variable nommée nomPlanning, uniquement à celui entre guillemet.

if (nomPlanning == "NOM PLANNING A REMPLACER")
{
// Changement de nom du planning pour ne plus être utilisé
planning["Name"].Value = nomPlanning + " remplace";

// Création du planning pointant sur un fichier externe.

// Remplacer le nom du fichier csv et les paramètres décrits ci-dessous dans la ligne de code.

//Description de la syntaxe EnergyPlus
//  Schedule:File : laisser tel que
//  File Name : ici le nom de celui à remplacer. Le nom doit être de moins de 100 caractères.
//  Column Number : numéro de champ à lire. Numéro d'ordre de la valeur à utiliser dans le planning.
//  Rows to Skip at Top : nombre de lignes à sauter en début de fichier
//  Number of Hours of Data : nombre d'heures à lire (8760 en année pleine non bisextile)
//  Column Separator : séparateur de colonne du fichier. Comma = "," Semicolon = ";" Tab = tabulation, Fixed = pas de séparateur mais un nombre de caractères par colonne fixé
//  Interpolate to Timestep : champ optionel, Yes interpolation des données selon la durée du pas de temps
//  Minutes Per Item : champ optionel, nombre de minute par ligne du fichier. 60 par défaut mais peut être divisé comme les pas de calcul

idfReader.Load("Schedule:File,"+nomPlanning+",Any Number,NOM FICHIER A REMPLACER.csv,3,3,8760,Semicolon;");

}
}

idfReader.Save();
}
}
}