Widget Thermostat et PAC commandé en ModBus

Bonjour à tous,
Je vous partage ma programmation du jour :
PAC Thermostat Etage.drawio.pdf (126,2 Ko)

L’idée étant de piloter la température de consigne de la PAC via le Widget Thermostat de l’IPX tout en gardant la main sur cette consigne depuis la PAC.
J’affiche ensuite le thermostat sur un X-Display

Contexte :

  • la PAC gère 2 réseaux de plancher chauffant (étage et rdc).
  • le schéma présenté ici ne concerne qu’un seul réseau de plancher chauffant (nommé « Etage » ou « Z3 » dans les différents objets)
  • j’accède aux réglages de la PAC via l’Objet ModBus de l’IPX

Explication de la programmation :

  • Récupération des valeurs de la PAC :

une série d’objets impulsion déclenchent des Objets « ModBus Lecture » pour récupérer les valeurs interessante de la PAC toutes les 20 seconde.

  1. Consigne de Température ambiante (variable : « PAC Z3 T° Consigne RAW »)
  2. Relevé de la température ambiante de la zone (variable : « PAC Z3 T° HD ambiance RAW »)
  • Thermostat (encadré violet) :

La valeur actuelle de consigne de température est injecté dans l’entrée « Consigne » du thermostat via une fonction (« PAC Z3 Consigne ») qui transforme (X/10+0,01) la valeur fourni par la PAC.

La mesure de température actuelle de la zone fourni par la PAC est injecté dans l’entrée « Mesure » du thermostat via une fonction (« PAC Z3 T° HD ambiance ») qui transforme (X/100) la valeur.

  • Changement de consigne ? (encadré vert)

L’Objet Comparateur (« PAC Consigne T° Etage ») vérifie si la consigne a été modifié sur le thermostat.

En entrée :

  • A: Consigne sélectionnée sur le thermostat via une fonction (« Thermostat Z3 Consigne »).
    Je récupère la valeur gràce à son ID, cette variable ne peut pas fournir sa valeur par lien.
    Cette valeur est multiplié par 10 pour être comparable à la valeur reçu de la PAC.
  • B: Variable : « PAC Z3 T° Consigne RAW » = Consigne de Température ambiante fourni par la PAC et mis à jour toutes les 20 secondes

Si les 2 valeurs en entrée du comparateur sont différentes (opérateur « != »), sa sortie se met à 1.

  • Gestion ModBus (Encadré bleu)

Plusieurs objet ModBus ne doivent pas être déclenché en même temps. Sinon, le ModBus de l’IPX se met en erreur et il faut redémarrer l’IPX.
Afin d’éviter cela, les impulsions qui déclenche le ModBus à interval régulier (20s) en lecture puis en écriture déclenche également des objets Tempo (« Activité ModBus - Ecriture » & « Activité ModBus - Réception »). La sortie des Tempo me permettent de savoir si le ModBus est utilisé ou pas.

Règle « Envoie Consigne ModBus » : c’est cette règle qui déclenchera l’envoie de la nouvelle consigne à la PAC si 3 règles sont vrai :

  1. La consigne a été modifier sur le thermostat >> sortie comparateur « PAC Consigne T° Etage » à 1
  2. Pas d’activité en écriture du ModBus >> sortie Tempo « Activité ModBus - Ecriture » à 0
  3. Pas d’activité en lecture du ModBus >> sortie Tempo « Activité ModBus - Réception » à 0

Lorsque que ces 3 règles sont vérifié, l’entrée « Départ » de l’impulsion (« MAJ T° consigne Z3 ») passe à 1. Sinon, elle est à 0.

L’impulsion ainsi généré déclenche 2 Objets ModBus :

  1. Front montant (LINK) : l’Objet ModBus « WR2 - T° Consigne Z3 » envoie la consigne sélectionnez sur le thermostat à la PAC
  2. Front descendant (NOT) : l’Objet ModBus « READ 10-Z3 T° Consign » récupère la valeur fraichement écrite puis l’enregistre dans la variable « PAC Z3 T° Consigne RAW »

Si tout c’est bien passé, la sortie comparateur repasse à 0 puisque ses 2 entrées sont égale. L’ensemble est ainsi prêt pour une prochaine modification de la consigne sur le thermostat.

Merci à ceux qui auront eu le courage de me lire :wink: en espérant que cela puisse aider.
Si vous avez des questions ou des remarques, n’hésitez surtout pas. Je suis peut-être passé a côté de quelque chose.
Si vous voyez des optimisations possible, pareil, n’hésitez pas :wink:

PS : schéma réaliser sur Draw.io grâce au tuto de @fgtoul : 📐 DRAW.IO : Logiciel gratuit pour schémas et diagrammes interactifs

5 « J'aime »