{ "name": "PID", "isActive": "1", "group": "Regulation", "mode": "schedule", "schedule": "*\/5 * * * *", "trigger": [ "" ], "timeout": "0", "isVisible": "0", "display": { "name": "", "icon": "" }, "order": "9999", "description": "", "configuration": { "timeDependency": 0, "has_return": 0, "logmode": "default", "allowMultiInstance": "0", "syncmode": "0", "timeline::enable": "0" }, "state": "stop", "elements": [ { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "element", "subtype": null, "expression": "2052", "options": [], "order": "0", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "0" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "La période d'échantillonnage Te correspond à la période, exprimée en heure, où est exécuté le scénario\nSi le scénario est exécuté toutes les 5 minutes avec un cron = *\/5 * * * * pour la programmation du scénario, alors il faut que Te = 5\/60", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Te", "value": "5\/60" }, "order": "1" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Mode", "value": "#[Bureau][Radiateur][Mode]#" }, "order": "2" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Consigne", "value": "#[Bureau][Regulateur][T° Consigne]#" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Mesure", "value": "#[Bureau][Regulateur][T° Mesuree]#" }, "order": "4" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Kp", "value": "#[Bureau][Regulateur][Kp]#" }, "order": "5" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Ki", "value": "#[Bureau][Regulateur][Ki]#" }, "order": "6" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Kd", "value": "#[Bureau][Regulateur][Kd]#" }, "order": "7" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "N", "value": "#[Bureau][Regulateur][N]#" }, "order": "8" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Position", "value": "#[Bureau][Regulateur][Position]#" }, "order": "9" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Regulation", "value": "#[Bureau][Regulateur][Regulation]#" }, "order": "10" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Ki_Precedent", "value": "'variable(PID_Bureau_Ki,0)'" }, "order": "11" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Precedente", "value": "'variable(PID_Bureau_Erreur,0)'" }, "order": "12" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Integration_Precedente", "value": "'variable(PID_Bureau_Erreur_Integration,0)'" }, "order": "13" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Variation_Precedente", "value": "'variable(PID_Bureau_Erreur_Variation,0)'" }, "order": "14" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Saturation_Precedente", "value": "'variable(PID_Bureau_Erreur_Saturation,0)'" }, "order": "15" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Vanne_Precedente", "value": "'variable(PID_Bureau_Vanne,0)'" }, "order": "16" } ] } ] }, { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "1", "enable": "0" }, "order": "0", "expressions": [ { "type": "action", "subtype": null, "expression": "scenario", "options": { "enable": "0", "background": "0", "scenario_id": "315", "action": "start", "tags": "Te=\"#Te#\"\nMode=\"#Mode#\"" }, "order": "0" } ] } ] }, { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Td", "value": "'tag(Kd)'\/'tag(Kp)'" }, "order": "0" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Ti", "value": "'tag(Kp)'\/'tag(Ki)'" }, "order": "1" }, { "type": "element", "subtype": null, "expression": "2055", "options": [], "order": "2", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "Ts période d'intégration de l'erreur de saturation\nTs=[0.1*Ti;Ti]\nTs=Ti pour un PI\nTs=sqrt(Ti*Td) pour un PID, avec Td=Ti\/4 alors Ts=Ti\/2", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Ts", "value": "sqrt('tag(Ti)'*'tag(Td)')" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Ts", "value": "1*'tag(Ti)'" }, "order": "4" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur", "value": "'tag(Consigne)'-'tag(Mesure)'" }, "order": "5" }, { "type": "element", "subtype": null, "expression": "2056", "options": [], "order": "6", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "Le % d'ouverture de vanne due à l'erreur d'intégration doit rester constant lors d'un changement de Ki.\nOn recalcule l'erreur d'intégration qui va avec le nouveau Ki.", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Integration_Corrigee", "value": "'tag(Ki_Precedent)'*'tag(Erreur_Integration_Precedente)'\/'tag(Ki)'" }, "order": "7" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "0", "background": "0", "name": "Erreur_Integration", "value": "'tag(Erreur_Integration_Corrigee)'+'tag(Te)'*'tag(Erreur)'" }, "order": "8" }, { "type": "element", "subtype": null, "expression": "2057", "options": [], "order": "9", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "La méthode des trapèzes pour le calcul de l’intégration permet un calcul plus précis", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Integration", "value": "'tag(Erreur_Integration_Corrigee)'+'tag(Te)'*('tag(Erreur)'+'tag(Erreur_Precedente)')\/2" }, "order": "10" }, { "type": "element", "subtype": null, "expression": "2058", "options": [], "order": "11", "element": { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "'tag(N)' == 0", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "element", "subtype": null, "expression": "2059", "options": [], "order": "0", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "Pas de filtrage de la variation d'erreur si N=0 (inutilisable en pratique à cause du bruit des mesures et des échelons de consigne)", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Variation", "value": "('tag(Erreur)'-'tag(Erreur_Precedente)')\/'tag(Te)'" }, "order": "1" } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Variation", "value": "('tag(Td)'*'tag(Erreur_Variation_Precedente)'+'tag(N)'*('tag(Erreur)'-'tag(Erreur_Precedente)'))\/('tag(Td)'+'tag(N)'*'tag(Te)')" }, "order": "0" } ] } ] } } ] } ] }, { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "element", "subtype": null, "expression": "2061", "options": [], "order": "0", "element": { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "tag(Regulation) matches \"\/P\/\"", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Terme_P", "value": "'tag(Kp)'*'tag(Erreur)'" }, "order": "0" } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Terme_P", "value": "0" }, "order": "0" } ] } ] } }, { "type": "element", "subtype": null, "expression": "2062", "options": [], "order": "1", "element": { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "tag(Regulation) matches \"\/I\/\"", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Terme_I", "value": "'tag(Ki)'*'tag(Erreur_Integration)'" }, "order": "0" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Terme_C", "value": "0" }, "order": "1" } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Terme_I", "value": "0" }, "order": "0" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Terme_C", "value": "'tag(Position)'" }, "order": "1" } ] } ] } }, { "type": "element", "subtype": null, "expression": "2063", "options": [], "order": "2", "element": { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "tag(Regulation) matches \"\/D\/\"", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Terme_D", "value": "'tag(Kd)'*'tag(Erreur_Variation)'" }, "order": "0" } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Terme_D", "value": "0" }, "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Vanne_Ideale", "value": "'tag(Terme_C)'+'tag(Terme_P)'+'tag(Terme_I)'+'tag(Terme_D)'" }, "order": "3" } ] } ] }, { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "element", "subtype": null, "expression": "2065", "options": [], "order": "0", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "On limite l'ouverture de la vanne pour que la vanne ne sorte pas de l'intervalle de 0% à 100%.", "options": [], "order": "0" } ] } ] } }, { "type": "element", "subtype": null, "expression": "2066", "options": [], "order": "1", "element": { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "'tag(Vanne_Ideale)' < 0", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Vanne", "value": "0" }, "order": "0" } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [ { "type": "element", "subtype": null, "expression": "2067", "options": [], "order": "0", "element": { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "'tag(Vanne_Ideale)' > 99", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Vanne", "value": "99" }, "order": "0" } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Vanne", "value": "'tag(Vanne_Ideale)'" }, "order": "0" } ] } ] } } ] } ] } } ] } ] }, { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Saturation", "value": "('tag(Vanne_Ideale)'-'tag(Vanne)')\/'tag(Kp)'" }, "order": "0" }, { "type": "element", "subtype": null, "expression": "2069", "options": [], "order": "1", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "Si le régulateur possède une composante intégrale\nAlors on recalcule l'erreur d'intégration en lui retranchant une fraction (>=1) de l’intégration de l'erreur de saturation", "options": [], "order": "0" } ] } ] } }, { "type": "element", "subtype": null, "expression": "2070", "options": [], "order": "2", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "1" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "Avec un Ts=0.5*Ti, Ti\/Ts =2, l'erreur d'intégration diminue 2 fois plus avec l'erreur de saturation qu'elle augmente avec l'erreur, ainsi la vanne idéale revient vers les limites de la vanne réelle", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "0", "background": "0", "name": "Erreur_Integration", "value": "'tag(Erreur_Integration)'-('tag(Ti)'\/'tag(Ts)')*'tag(Te)'*'tag(Erreur_Saturation)'" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Integration", "value": "'tag(Erreur_Integration)'-('tag(Ti)'\/'tag(Ts)')*'tag(Te)'*('tag(Erreur_Saturation)'+'tag(Erreur_Saturation_Precedente)')\/2" }, "order": "4" } ] } ] }, { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "1", "enable": "0" }, "order": "0", "expressions": [ { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Ki", "value": "floor('tag(Ki)'*1000000)\/1000000" }, "order": "0" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur", "value": "floor('tag(Erreur)'*1000000)\/1000000" }, "order": "1" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Integration", "value": "floor('tag(Erreur_Integration)'*1000000)\/1000000" }, "order": "2" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Variation", "value": "floor('tag(Erreur_Variation)'*1000000)\/1000000" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Saturation", "value": "floor('tag(Erreur_Saturation)'*1000000)\/1000000" }, "order": "4" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Vanne", "value": "floor('tag(Vanne)'*1000000)\/1000000" }, "order": "5" } ] } ] }, { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Ki", "value": "'tag(Ki)'" }, "order": "0" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur", "value": "'tag(Erreur)'" }, "order": "1" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Integration", "value": "'tag(Erreur_Integration)'" }, "order": "2" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Variation", "value": "'tag(Erreur_Variation)'" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Saturation", "value": "'tag(Erreur_Saturation)'" }, "order": "4" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Vanne", "value": "'tag(Vanne)'" }, "order": "5" } ] } ] }, { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "tag(Mode) matches \"\/PID\/\"", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "element", "subtype": null, "expression": "2073", "options": [], "order": "0", "element": { "name": null, "type": "comment", "options": [], "order": "0", "subElements": [ { "name": null, "type": "comment", "subtype": "comment", "options": { "collapse": "0" }, "order": "0", "expressions": [ { "type": "comment", "subtype": null, "expression": "La régulation externe s'applique seulement avec les modes Confort\/Eco\/Absence.\nPas régulation externe pour le mode Hors Gel.", "options": [], "order": "0" } ] } ] } }, { "type": "element", "subtype": null, "expression": "2074", "options": [], "order": "1", "element": { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "#[Bureau][Radiateur][Vanne Actuelle]# != min(99,max(floor('variable(PID_Bureau_Vanne,0)'),0))", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "action", "subtype": null, "expression": "#[Bureau][Radiateur][Position Vanne]#", "options": { "enable": "1", "background": "0", "slider": "min(99,max(floor('variable(PID_Bureau_Vanne,0)'),0))" }, "order": "0" } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [] } ] } } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [] } ] } ] }