{ "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": "in progress", "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": "1666", "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": "1*variable(PID_Bureau_Ki,0)" }, "order": "11" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Precedente", "value": "1*variable(PID_Bureau_Erreur,0)" }, "order": "12" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Integration_Precedente", "value": "1*variable(PID_Bureau_Erreur_Integration,0)" }, "order": "13" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Variation_Precedente", "value": "1*variable(PID_Bureau_Erreur_Variation,0)" }, "order": "14" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Saturation_Precedente", "value": "1*variable(PID_Bureau_Erreur_Saturation,0)" }, "order": "15" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Vanne_Precedente", "value": "1*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": "#Kd#\/#Kp#" }, "order": "0" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Ti", "value": "#Kp#\/#Ki#" }, "order": "1" }, { "type": "element", "subtype": null, "expression": "1827", "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(#Ti#*#Td#)" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Ts", "value": "1*#Ti#" }, "order": "4" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur", "value": "#Consigne#-#Mesure#" }, "order": "5" }, { "type": "element", "subtype": null, "expression": "1828", "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": "#Ki_Precedent#*#Erreur_Integration_Precedente#\/#Ki#" }, "order": "7" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "0", "background": "0", "name": "Erreur_Integration", "value": "#Erreur_Integration_Corrigee#+#Te#*#Erreur#" }, "order": "8" }, { "type": "element", "subtype": null, "expression": "1829", "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": "#Erreur_Integration_Corrigee#+#Te#*(#Erreur#+#Erreur_Precedente#)\/2" }, "order": "10" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "0", "background": "0", "name": "Erreur_Integration", "value": "#Erreur_Integration_Corrigee#+#Te#*(#Erreur#-#Erreur_Saturation_Precedente#\/1)" }, "order": "11" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "0", "background": "0", "name": "Erreur_Integration", "value": "#Erreur_Integration_Corrigee#+#Te#*(#Erreur#+#Erreur_Precedente#)\/2-#Te#*#Erreur_Saturation_Precedente#\/1" }, "order": "12" }, { "type": "element", "subtype": null, "expression": "1830", "options": [], "order": "13", "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": "#N# == 0", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "element", "subtype": null, "expression": "1831", "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": "(#Erreur#-#Erreur_Precedente#)\/(#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": "(#Td#*#Erreur_Variation_Precedente#+#N#*(#Erreur#-#Erreur_Precedente#))\/(#Td#+#N#*#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": "1700", "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": "#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": "#Kp#*#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": "1702", "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": "#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": "#Ki#*#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": "#Position#" }, "order": "1" } ] } ] } }, { "type": "element", "subtype": null, "expression": "1701", "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": "#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": "#Kd#*#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": "#Terme_C#+#Terme_P#+#Terme_I#+#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": "1833", "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": "1834", "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": "#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": "1835", "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": "#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": "#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": "(#Vanne_Ideale#-#Vanne#)\/#Kp#" }, "order": "0" }, { "type": "element", "subtype": null, "expression": "1839", "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": "1840", "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": "#Erreur_Integration#-(#Ti#\/#Ts#)*#Te#*#Erreur_Saturation#" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "Erreur_Integration", "value": "#Erreur_Integration#-(#Ti#\/#Ts#)*#Te#*(#Erreur_Saturation#+#Erreur_Saturation_Precedente#)\/2" }, "order": "4" } ] } ] }, { "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": "floor(#Ki#*1000000)\/1000000" }, "order": "0" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur", "value": "floor(#Erreur#*1000000)\/1000000" }, "order": "1" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Integration", "value": "floor(#Erreur_Integration#*1000000)\/1000000" }, "order": "2" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Variation", "value": "floor(#Erreur_Variation#*1000000)\/1000000" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Erreur_Saturation", "value": "floor(#Erreur_Saturation#*1000000)\/1000000" }, "order": "4" }, { "type": "action", "subtype": null, "expression": "variable", "options": { "enable": "1", "background": "0", "name": "PID_Bureau_Vanne", "value": "floor(#Vanne#*1000000)\/1000000" }, "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": "#Mode# matches \"\/PID\/\"", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "element", "subtype": null, "expression": "1794", "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": "1796", "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": [] } ] } ] }