Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Parametrages complexe des actions
#1
Bonjour,

J'ai depuis plusieurs mois le routeur fonctionnel.

Pour le moment le fonctionnement est simple.

Je route le surplus vers un radiateur via le triac.

J'ai d'autres radiateurs tous pilotable à distance (fil pilote ou prise commandée).


En fonction de ensoleillement, j'allume manuellement un premier radiateur dès que j'ai 600w de surplus que le triac ne peut plus router.

Ensuite dès que j'ai 600w supplémentaire, j'éteins le radiateur de 600w pour en allumer un de 1200w.

Puis dès que j'ai de nouveau 600w de surplus, je rallume le radiateur de 600w en plus de celui de 1200w.

le triac permet de router le petit surplus pour consommer le max du solaire.

lorsque la production baisse je fait le chemin inverse en arrêtant petit à petit les radiateurs (600w puis 1200w, puis du coup rallumage du 600w et extinction).

Petite subtilité, à certains moments, le radiateur de 1200w se coupe car il a atteint sa température max, je switcherais bien à ce moment vers un autre de meme puissance.


J'aimerais automatiser ça mais je n'arrive pas à comprendre finement le fonctionnement de la partie action du routeur.

Si une bonne âme pouvait me donner quelques conseils !

Par avance merci.

Bonne journée
Routeur Version : 11.00_RMS
Source des mesures de puissance : UxI
Répondre
#2
Tentative:
action "triac 1200W": route sur Pw=0W (je suppose que la charge fait 1200W; 50%, ça fait 600W)
action "radiateur 600W": se déclenche pour minimum 1min si "triac 1200W" > 50%, se coupe si Pw > 100W. Le triac devrait chuter à 0% quand il se déclenche.
action "radiateur 1200W": se déclenche pour minimum 1min si "triac 1200W" > 70%, se coupe si Pw > 150W. Normalement, "radiateur 600W" est plus prioritaire car son seuil de déclenchement est plus bas (50% vs 70%)

Il faudra ajuster pour que les petites variations n'aient pas trop d'impact.
Répondre
#3
Bonsoir Ludovic,

Merci de cette réponse rapide.

Ai-je bien traduit votre explication ?

Ne pas tenir compte de la pompe piscine.

   

Encore merci

Fred
Routeur Version : 11.00_RMS
Source des mesures de puissance : UxI
Répondre
#4
Ajoutez: ON si Pw < 50W, OFF si Pw > 100W (voir 200W au début pour prendre de la marge)
Vous ferez des essais.

A combien est la charge sur le triac? il faut qu'elle soit de minimum 1200W si vous voulez mettre 50% pour déclencher le radiateur de 600W. Si on prend un peu de marge, il faudrait que les 50% représentent 700W à 800W minimum afin que le démarrage d'un petit appareil ne fasse pas franchir le seuil d'arrêt (si c'est OFF sur Pw>100W, cela fera 200W à 300W de marge de battement). Le choix du seuil de démarrage (50% ou 70%) va donc influencer la stabilité du système.

Autre remarque, la réactivité à 50 me semble élevée; commencez par mettre 10 pour éviter les oscillations.
Répondre
#5
Bonjour,

Désolé de cette question mais le rajoute votre proposition suivante à quoi ?

" Ajoutez: ON si Pw < 50W, OFF si Pw > 100W (voir 200W au début pour prendre de la marge)"

Cdt

Fred
Routeur Version : 11.00_RMS
Source des mesures de puissance : UxI
Répondre
#6
Dans vos paramètres actuels, vous avez sur le radiateur 600W:
Off si Pw>100W et On si Pw<0W
Il faut remplacer le 0W par 50W car le triac régule sur 0W. Pour être certain que le SSR s'active quand le % du triac sera > 50%, il faut aussi que la condition Pw<xx soit satisfaite.

Dans le code, toutes les conditions qu'on ajoute (sur la température, la durée de chauffe, ou l'ouverture en%), sont en fait traitées comme des conditions d'annulation.
ConditionsOk est initialisé à Vrai, et les tests qui suivent ne peuvent que faire passer la valeur à Faux.
Ensuite, si ConditionsOk est toujours à Vrai, alors les paramètres de régulation (on/off, triac...) s'appliquent.

bool ConditionsOk;
for (int i = 0; i < NbPeriode; i++) {
if (Heure >= Hdeb[i] && Heure <= Hfin[i]) {
ConditionsOk = true;
if (Temperature > -100.0) {
if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) { // on applique un hystérésis dont les valeurs sont Tinf et Tsup
if (Tempx10 > Tinf[i] && Tempx10 > Tsup[i]) Tseuil = Tinf[i];
if (Tempx10 < Tinf[i] && Tempx10 < Tsup[i]) Tseuil = Tsup[i];
if (Tempx10 > Tseuil) { ConditionsOk = false; }
} else {
if (Tinf[i] <= 1000 && Tempx10 > Tinf[i]) { ConditionsOk = false; }
if (Tsup[i] <= 1000 && Tempx10 < Tsup[i]) { ConditionsOk = false; }
}
}
if (Ltarfbin > 0 && (Ltarfbin & Tarif[i]) == 0) ConditionsOk = false;
if (SelAct[i] != 255) { //On conditionne à une autre action
if (Hmin[i] != 0 && (Hmin[i] > ExtHequiv || ExtValide == 0)) ConditionsOk = false;
if (Hmax[i] != 0 && (Hmax[i] < ExtHequiv || ExtValide == 0)) ConditionsOk = false;
if (Ooff[i] != 0 && ((int(Ooff[i]) >= ExtOuvert && Retard != 100) || ExtValide == 0)) ConditionsOk = false; //Inferieur au seuil bas
if (O_on[i] != 0 && ((int(O_on[i]) > ExtOuvert && Retard == 100) || ExtValide == 0)) ConditionsOk = false; //Inferieur au seuil haut et pas encore ouvert
}
if (ConditionsOk) S = Type[i];
}
}
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)