Les ouvrages hydrauliques modélisés dans Express'eau sont paramétrés par défaut de façon à fonctionner à partir d'une régulation simple. Les paramètres par défaut sont définis dans la boite de dialogue des différents objets disponibles dans l’interface.
La plupart des ouvrages sont fixes, d’autres sont mobiles et régulés par rapport à une consigne de pression ou de débit.
Dans les situations réelles d’exploitation, ces ouvrages peuvent très bien être manœuvrés de façon différente de celle indiquée par la consigne par défaut, en réseau. On distingue deux cas :
Afin de gérer ces situations, Express'eau dispose d'un module complet de régulation avancée, totalement interactif avec les algorithmes de calculs hydrauliques du noyau de calcul d'Express’Eau.
Concrètement, une stratégie de régulation avancée est totalement renseignée par un fichier ASCII qui contient une série d'instructions rentrées séquentiellement.
Pour être pris en compte dans la simulation, le fichier de régulation avancée doit être spécifié dans le paramétrage du scénario, via Express'eau → Scénarios → Settings
puis dans l'onglet “Regulation and configuration”
choisir le nom du bloc de régulation.
En l'absence de fichier de régulation avancée spécifié dans le scénario, le programme de calcul applique les algorithmes de contrôle simple définis dans le modèle hydraulique.
Pour l'édition du fichier ASCII de régulation, si vous travaillez sous Windows, il est préconisé de l'éditer avec l'outil Notepad++ (outil gratuit et open source) qui permet de formater de manière automatique le fichier de contrôle. Pour utiliser cette fonctionnalité, c'est ici : Utilisation de Notepad++ pour l'édition des fichiers de régulation.
Seul un nombre limité de d'objets du modèle sont concernés par la régulation avancée. La liste suivante indique quels sont les objets “régulables” :
Les paramètres sur lesquels la régulation avancée peut agir dépend de chaque élément. Ils sont précisés dans la suite de cette page.
Dans la suite de cette page, un ouvrage régulé via une régulation avancée est appelé “actionneur”.
Le bloc de régulation avancée se compose de groupes d'instructions exécutées en séquence à chaque pas de temps, dans l'ordre d'apparition des instructions.
On distingue :
Les commandes SET et CALCUL permettent de définir des variables. On peut définir jusqu'à 200 variables
Parmi les instructions disponibles, l'une revêt une importance particulière : il s'agit de la commande SET
permettant de définir une variable.
La définition d'une variable simple s'écrit:
SET %mavariable = VAR
« mavariable » est un libellé composé d'une chaîne de caractères alphanumérique ( 16 caractères au maximum).
« mavariable » désigne le nom d'une variable, visible dans l'ensemble des fichiers de régulation définis dans le scénario de calcul.
VAR est une valeur d'état pouvant être exprimée de 6 manières :
%toto = 39.2
),%1 = %tata
),%cc = ZAM NOD_AB
),%1dd = VANNE ‘Van-32’
) Cette instruction permet d'agir sur les actionneurs en fonction de l'état d'autres actionneurs. Les valeurs renvoyées dans la variable dépendent du type de l'actionneur.Tableau n°1 : positions des actionneurs affectables à la définition d'une variable
ITYPE |
PARAM correspondant |
CANA |
STATUT |
VANNE |
ALPS |
CONSO |
ALPG |
REGQ |
ALPS |
REDP |
ALPS |
POMP |
ALPR |
CHAT |
Niveau Z dans le réservoir |
TIME
DT
Il est également possible de définir une variable tableau.
SET %%tabi = x1 x2 … xn
%%tabi
désigne une variable tableau. Le nombre maximum de variables tableau différentes est 200.
xi
= valeurs numériques du tableau. On peut définir 20 valeurs au maximum.
set %TIME = TIME
permet de définir une variable %TIME qui prend la valeur du temps écoulé depuis le début de la simulation.
Une autre instruction intéressante est l'instruction CALCUL
qui porte sur des variables simples ou les variables tableaux.
CALCUL %vari = %varj (opérateur) %vark
où opérateur
reconnaît les caractères : +, -, .+, /.**
CALCUL %%tabi = #func ( arg1, arg2, ….., argn)
« func » est l'identificateur d‟une fonction accessible depuis la bibliothèque intégré au module de contrôle. Le nombre et le type des arguments dans la liste d‟appel depuis de la nature de la fonction : ce peuvent être des variables simples, des valeurs numériques ou des variables tableaux. Dans le cas d‟une variable tableau calculée la taille du tableau est déterminée par la nature de la fonction ou la liste d‟arguments.
CALCUL %vari = #func ( arg1, arg2, ….., argn)
CALCUL %%tabi = #func ( arg1, arg2, ….., argn)
« func
» est l’identificateur d’une fonction accessible depuis la bibliothèque intégré au module de contrôle. Le nombre et le type des arguments dans la liste d’appel depuis de la nature de la fonction : ce peuvent être des variables simples, des valeurs numériques ou des variables tableaux. Dans le cas d’une variable tableau calculée la taille du tableau est déterminée par la nature de la fonction ou la liste d’arguments.
Les fonctions implantées dans le module de contrôle sont définies à l’annexe 1.
Une fonction particulièrement intéressante permet de calculer le modulo par 24 et ainsi de créer une variable correspondant à l'heure de la journée :
set %TIME = TIME
CALCUL %heure = #TMOD24 ( %TIME )
=> Ces deux lignes ont pour effet que la variable %heure contienne l'heure de la journée (si la simulation démarre à 0h, bien-sûr, sinon il faut lui ajouter l'heure de début de simulation)
Cette fonctionnalité est donc très puissante : toute nouvelle fonction nécessite néanmoins l’intervention du développeur pour son implantation.
NB : les lignes d’instruction SET et CALCUL ne doivent pas forcément être séparées pas des lignes blanches.
Une instruction conditionnelle est construite de la façon suivante :
ITYPE
) et son identifiant (ID
).Tableau n°2 : syntaxe d'une instruction conditionnelle
Remarques :
if ( ) and/or ( ) then ( )
endif
if ( ) and/or ( ) then ( )
endif
Un groupe peut donc contenir plusieurs lignes d'instruction. Le programme traite chaque ligne en séquence à chaque pas de temps de régulation.
L'action est activée si la condition logique ( cond 1 ) et/ou la condition logique ( cond2 )) est/sont satisfaite(s).
La tableau suivant liste les actionneurs régulables, leur ITYPE et les paramètres qui sont régulables.
Tableau n°3 : actionneurs régulables, ITYPE et paramètres régulables
Elément |
Table |
ITYPE |
Paramètres régulables |
Définition des paramètres |
Canalisation |
Pipe |
CANA |
STATUT |
0 si fermée, 1 si ouverte |
Vanne |
Valve |
VANNE |
ALPS |
Fraction d'ouverture de la vanne (entre 0 et 1) |
Consommation |
User_Node |
CONSO |
ALPQ |
Fraction du débit nominal (entre 0 et 1) |
Piézométrie imposée |
Imposed piezometry |
ZO |
ZO |
Cote piézométrique (mNGF) |
Régulateur de débit |
Flow Regulator |
REGQ |
QCONS ALPS |
Débit de consigne en m3/h Fraction d'ouverture de la vanne (entre 0 et 1) |
Régulateur de pression |
Pressure Regulator |
REGP |
HCONS ALPS |
Pression de consigne Fraction d'ouverture de la vanne (entre 0 et 1) |
Clapet anti-retour |
Check Valve |
CLPT |
ALPS |
Fraction d'ouverture du clapet (entre 0 et 1) |
Pompe |
Pump |
POMP |
QCONS HCONS ALPR |
Débit de consigne en m3/h Pression de consigne au refoulement en m Fraction de la vitesse de rotation de la pompe |
Réservoir |
Tank |
CHAT |
ALPS1 ALPS2 ZCHAT |
Fraction d'ouverture du clapet d'alim. (entre 0 et 1) Fraction d'ouverture du clapet de vidange (entre 0 et 1) Niveau d'eau dans le réservoir |
Commentaire :
QINC
» permet de superposer à un point de consommation donné un débit supplémentaire correspondant généralement à un soutirage d’une borne incendie. Un scénario « incendie » peut ainsi être facilement simulé via cette commande (cf. 3.5 ci-après)ZCHAT
» permet de spécifier le maintien d’un niveau d’eau donné dans un réservoir pendant une plage de temps par exemple. Cette instruction est spécialement utile dans le cas où l’on souhaite imposer un niveau initial donné dans un réservoir à l’instant de démarrage effectif de la simulation (généralement t=0). Les temps négatifs servent dans ce cas à atteindre un régime d’équilibre du modèle tout en imposant le niveau d’eau souhaité dans le réservoir.CLREG
» permet de moduler la concentration « objectif » en un point de consigne. Cette concentration est régulée par le module de régulation implanté dans l’élément CONS0.CLCONC
» permet d’imposer un flux d’injection de chlore en définissant la concentration associée au débit d’injection.A noter que :
CLREG
n’est acceptée que si le point d’injection en défini en mode régulée.CLCONC
n’est acceptée que si le point d’injection en défini en mode non régulé.CLREG
et CLCONC
restent effectives dans le mode de calcul découplé de qualité découplé.
Une instruction conditionnelle est de la forme :
Si (COND1) et/ou (COND2) alors (ACTION)
a - Syntaxe des conditions
Les conditions COND1
et COND2
sont des comparaisons entre deux variables d'état, de la forme : VAR-A GT/LT VAR-B
où VAR-A
et VAR-B
peuvent être :
SET
ou CALCUL
(voir paragraphe idoine)TIME
exprimée en heures relatives à la date de début de simulationDT
exprimé en heures.et où :
GT
signifie “supérieur”LT
signifie “inférieur”GE
signifie “supérieur ou égal”LE
signifie “inférieur ou égal”EQ
signifie “égal”NE
signifie “différent”Ce paramètre est exprimé par la juxtaposition de deux champs comme suit :
Tableau n°4 : paramètres hydrauliques existant et syntaxes
Q |
+ ID du point de contrôle (nœuds, singularité ou liaison) sans ‘quotes’ |
ZAM | |
ZAV | |
HAM | |
HAV | |
DH |
Les règles de cohérence suivantes s'appliquent, selon la grandeur invoquée :
Tableau n°5 : paramètres hydrauliques existant, objets compatibles et signification
si grandeur = Q | Le point de contrôle est nécessairement une liaison latérale : QLIAIS est alors le débit passant par la liaison. |
si grandeur = ZAM |
Le point de contrôle est nécessairement une extrémité d'une liaison ou l'amont ou l'aval immédiat d'une singularité. ZAM : cote du nœud amont de la liaison ou cote en amont immédiat singularité ZAV : cote du nœud aval de la liaison ou cote en aval immédiat singularité HAM: pression statique au nœud amont ou pression statique en amont immédiat singularité HAV: pression statique au nœud aval ou pression statique en aval immédiat singularité |
si grandeur = ZAV | |
si grandeur = HAM | |
si grandeur = HAV | |
si grandeur = DH | perte de pression entre le nœud amont et le nœud aval d'une liaison |
b - Syntaxe d'une instruction (action)
ACTION
est une commande de la forme :PARAM VAR-Action
où PARAM
est un des paramètres qu'il est possible de réguler pour l'actionneur de type ITYPE
. ces possibilités dépendent du type d'élément et sont présentées dans le tableau n°1 de la présente page.
L'instruction couvre les cas possibles suivants :
VAR-Action
peut être :
DEFAUT
: cette déclaration a pour effet d'activer le mode de pilotage par défaut déclaré dans le modèle de base, ce qui est pratique dans le cas d'un état contraint : en fin de séquence d'état contraint, le programme va automatiquement réactiver le pilotage initial en vigueur, sans que l'opérateur n'ait besoin de se rappeler les paramètres associés.c - Exemple
POMP '4_P_Cesson'
IF ( TIME LT 0 ) THEN ( ALPR 1. ) ENDIF
IF ( TIME GT 0 ) AND ( %nivRPere GT 113.7 ) THEN ( ALPR 0. ) ENDIF
IF ( TIME GT 0 ) AND ( %nivRPere LT 113.05 ) THEN ( ALPR 1. ) ENDIF
REGQ '4_REGQ_1'
IF ( TIME GT 0 ) THEN ( QCONS 0. ) ENDIF
IF ( TIME GT 4 ) THEN ( QCONS 28. ) ENDIF
IF ( TIME GT 6.5 ) THEN ( QCONS 0. ) ENDIF
L'instruction : IF ( cond1 ) [AND / OR] [( cond2 )] THEN ( action )
peut tout à fait être remplacée par l'instruction : action
.
Dans ce cas l'instruction est exécutée sans condition.
NB : ne pas entourer cette instruction de parenthèses s'il n'existe pas de condition.
Afin d’augmenter la lisibilité du fichier de régulation, on peut introduire le signe « ! » sur n’importe qu’elle ligne : les caractères de la ligne inscrits à droite de ce signe sont ignorés.
Par ailleurs, le programme s’arrête de lire le fichier lorsqu’il rencontre une ligne commençant par les caractères « - - - - -» (un caractère « -» suffit). La commande FIN provoque le même résultat. Pour le moment, le fichier est lu dans son intégralité.
Ces deux instructions ont pour objet de faciliter le traçage des algorithmes de contrôle en phase de mise au point.
L’instruction DEBUG
n’apparaît en principe qu’une seule fois dans le fichier de contrôle, avec la syntaxe suivante :
DEBUG tdeb tfin dt_debug
Les trois paramètres sont des valeurs numériques exprimées en heures :
tdeb
est la date de début de l’affichage des résultats dans la phase de régime transitoire,tfin
est la date de fin de l’affichage des résultats dans la phase de régime transitoire,dt_debug
est la durée de simulation séparant deux affichages.L’instruction DEBUG
:
L’instruction SHOW
est définie comme suit :
SHOW %i ‘commentaire’
Lors de l’exécution la valeur prise par la variable %i sera affichée tous les dt_debug
pas de temps, accompagnée du commentaire contenu dans « commentaire » et du temps de calcul. Une pause est introduite après chaque pas de temps d’affichage.
Une métacommande est une instruction affectant le mode de lecture des fichiers de contrôle.
Une métacommande est identifiée par la présence du caractère « $ » en tête de ligne : ce caractère peut être placé dans une colonne quelconque mais ce doit être le premier caractère de la ligne.
Les métacommandes reconnues dans la version actuelle sont :
Un groupe de commande est constitué par :
- une commande SELECT
- une ou plusieurs commandes CASE
- une commande END SELECT
Une commande CASE est suivie d’un groupe quelconque d’instruction. Ce groupe est là uniquement si une des valeurs affichées dans la ligne de commande est égale à ivalue
.
ivalue
: nombre entier
ivali
: nombres entiers délimités par le séparateur « ; » (n ≤ 20)
Exemple
$ SELECT (2)
$ CASE (0 ; 1)
{ groupe 1 d’instruction }
$ CASE (0 ; 2)
{ groupe 2 d’instructions }
$ END SELECT
Dans cet exemple, seul le groupe 2 d’instructions sera lu, les instructions du groupe 1 sont ignorées.
On peut définir autant de groupes qu’on le désire.
Formulation alternative :
Le programme reconnaît également la liste d’instructions suivantes :
« $ » : SELECT
« $ » : CASE (Cres1; Cres2 ; Cres3, …)
« $ » : END SELECT
Les différences avec la formulation précédente sont les suivantes :
SELECT
Le groupe d’instructions à la suite de la metacommande CASE
est exécuté si un des paramètres de la liste correspond à un des noms de réseaux listés dans le fichier SCENARIO.NOM
. Ce fichier est produit par Express'eau au début de chaque nouvelle simulation.
Cette procédure alternative permet de conserver les mêmes structures de fichiers de commande , que l’on travaille en mode « Réseau » ou en mode « Complexe ».
Cette métacommande est utilisée dans le cas particulier d’un scénario d’incendie. Elle permet de générer facilement une série d’instructions simulant en une seule fois tous les scénarios de soutirage correspondant à diverses configurations d’incendie.
Il est obligatoire que la première instruction lue dans le fichier soit : « $ QINC
»
La structure du fichier est définie au format « CSV ». Le fichier se compose :
Une ligne de commentaire est utile pour préciser les 5 champs renseignés aux lignes suivantes : « Tdeb ; Tfin ; Cid_reseau ; Cid_el ; Qinc ;
». Les noms des champs peuvent être quelconques. Par contre l’ordre dans lequel sont rentrés les paramètres doit être respecté comme suit :
Tdeb – Tfin
: intervalle de temps relatif pendant lequel le soutirage Qinc est appliqué,Cid_el
: nom de l’élément ; il est obligatoirement de type Q0 ou Qv,Cid_reseau
: nom du réseau auquel appartient l’élément.Qinc
: débit soutiré sur l’intervalle de temps [Tdeb Tfin]
, en m3/h. en dehors de cet intervalle ce débit est nul. Il s’ajoute au débit de prélèvement normal défini dans l’élément.Les lignes blanches entre deux lignes d’instructions sont admises. Elles sont ignorées par le programme.
Cette métacommande permet également de définir un hydrogramme de soutirage ou d’injection au droit d’un point de consommation. Il convient dans ce cas d’utiliser un élément Q0 et de définir par défaut q0=0. En cas d’injection le débit est négatif. Cette fonctionnalité est utile dans l’étape d’un calage d’un modèle.
En pratique la structure d’un tel fichier est détectée lors de l’exécution du programme Xeau.exe. Chaque ligne est alors transformée dans un format de lecture compris par la routine de décodage du module de contrôle.
Cette métacommande permet d’imposer une courbe d’évolution temporelle d’une pression à un nœud.
Il est obligatoire que la première instruction lue dans le fichier soit : « $ Z0
»
La structure du fichier est définie au format « *.CSV ». Le fichier se compose :
Une ligne de commentaire est utile pour préciser les 5 champs renseignés aux lignes suivantes : « Tdeb ; Tfin ; Cid_reseau ; Cid_el ; Z0 ;
». Les noms des champs peuvent être quelconques. Par contre l’ordre dans lequel sont rentrés les paramètres doit être respecté comme suit :
Tdeb – Tfin
: intervalle de temps relatif pendant lequel le soutirage Qinc est appliqué,Cid_el
: nom de l’élément ; il est obligatoirement de type Z0,Cid_reseau
: nom du réseau auquel appartient l’élément.Z0
: cote piézo. imposée sur l’intervalle de temps [Tdeb Tfin]
, en mNGF. En dehors de cet intervalle la cote retenus est celle définie par défaut dans l’élément Z0.Les lignes blanches entre deux lignes d’instructions sont admises. Elles sont ignorées par le programme.
Cette fonctionnalité est utile dans l’étape d’un calage d’un modèle.
En pratique la structure d’un tel fichier est détectée lors de l’exécution du programme Xeau.exe. Chaque ligne est alors transformée dans un format de lecture compris par la routine de décodage du module de contrôle.
Si le fichier de contrôle est détecté, les tâches de calcul se déroulent comme suit :
Chaque instruction de contrôle est lue et compilée par le programme.
Au début de chaque pas de temps de calcul, le module de contrôle est appelé. Les instructions sont analysées en séquence et actualisées. Lorsqu'une instruction conditionnelle est vérifiée, le module de contrôle appelle la routine du module hydraulique concerné et celle-ci actualise le paramètre transmis par le module de contrôle.
Tous les modules sont équipés de temporisation pour assurer des variations progressives d'état.
Deux remarques importantes :
REGQ ‘VAL2 _ ANTOB92_RQ2’
IF ( TIME LT 3.0 ) THEN ( QREG 0.5 )
IF ( TIME GT 3.0 ) THEN ( QREG 4.0 )
IF ( TIME GT 4.0 ) THEN ( QREG 1.0 )
Avec ces instructions :
Syntaxe :
! définition de la courbe de remplissage
SET %%1 = 10 12 14 16 ! cote bassin
SET %%2 = 0 10000 15000 30000 ! volume bassin
SET %1 = Z NOD-BAS1
! calcul du volume de remplissage correspondant à la cote %1
CALCUL %2 = NTERP ( %1 %1%1 %%2 )
! fermeture de la vanne VAL1_VAN3 si volume de remplissage supérieur à 20000 m3
VA ‘VAL1_VAN3’
IF ( %2 GT 20000 ) THEN ( ALPS 0 )
Syntaxe :
IF ( TIME LT 3.0 ) THEN
RGQ ‘VALANTOB’
QREGUL 0.5
ENDIF
IF ( TIME GT 3.0 ) THEN
IF ( Z FRES57 LT 38.5 ) THEN
RGQ ‘VALANTOB’
QREGUL 0.5
ENDIF
IF ( Z FRE57 GT 40.0 ) THEN
RGQ ‘VALANTOB’
QREGUL 4.0
ENDIF
ENDIF