Plutot que de le faire en privé, je donne les indications ici pour augmenter la réactivité du régulateur meme si ce n est pas vraiment le sujet de la discussion, je verrais plus tard si ca vaut le coup de creer une nouvelel discussion.
Avant de rentrer dans le vif du sujet, un peu de théorir rapide sur le regulateur PID
Les abreviations pour s'y retrouver
Pv = Process Value c'est la mesure qu'on veut controler , dans notre cas la puissance
Sp= Set Point c est la consigne que l on souhaite,dans le cas du routeur c est le terme ( que je trouve mal traduit) Seuil Pw dans les actions
Out la sortie du regulateur qui va piloter le triac ou le ssr
Error = Pv-Sp ; c est don cl ecart qu on a entre ce que l'on mesure et ce qu'on souhaite , idealement il faudrait toujours que cette error soit à zero
Kp = Coefficient Proportionnel
Ki = Coefficient Integral
Kd = Coefficient Derivée
L'algorithme PID (très simplifié)
Out = Kp*Error + Ki*∑(Error) dt + Kd *delta (error) / dt
Sans rentrer dans les details, si Kp, Ki ou Kd sont mal reglés on a soit :
- un fonctionnement très mou , c est à dire à que la sortie réagit trop lentement et la mesure très longue à atteindre la consigne
- un fonctionnement instable, c'est à dire que la sortie varie trop rapidement entre 0 et 100
Il faut donc trouver un compromis pour etre entre les 2 types de fonctionnement
Dans le cas du Routeur je propose une modification de l'algorithme de base pour avoir un comportement très reactif quand on a une erreur importante ( passage d'un nuage ou arret/march ed un gros consommateur) mais qui redevient moins agressif quand on l erreur est proche de zero pour eviter de faire le yoyo entre 0 et 100% , normalement c'est le role de l 'action Kd, mais dans le cas du routeur comem on peut avoir [delta (error) / dt] quasiment infini , André à fortemetn filtré ce terme , ce qui introduit du retard , et finalement participe à destabiliser la boucle plus qu a la stabiliser
Bon coté pratique voici les modifications suggerées , je ne peux pas vous mettre les bon numeros de ligne car je n ai pas forcement le programme d'origine sur la base d'une V16.09
Tout ce passe dans le fichier Solar_Routeur_V....et plus particulierement dans la
void GestionOverproduction()
Rechercher la ligne
float Kp, Ki, Kd;
Ajouter la ligne
float knl; //LBE Gain Variable
Rechercher la ligne
ErrorPw = Puissance - SeuilPw;
Ajouter les lignes
float abs_e = fabs(ErrorPw);
float ErrorKpw = (abs_e < 30) ? ErrorPw/100: ErrorPw; //bande "presque" morte pour l action P
// comme la sortie ne peut varier que de 1% en 1% sur un CE de 3000W on ne peut pas controller mieux que 3000/100 = 30W
// cela réduit les sauts permanent de 1 % qui font des ecarts de 30 w pour le moindre ecart
knl= 2-1.5*exp(-abs_e/100) ;// c 'est ici la formule "magique"
// Je vous mets en image plus loin le tracé de cette fonction pour comprendre son fonctionnement
un peu plus bas rechercher
IntegrErrorPw[i] += ErrorPw * Ki;
Modifier
IntegrErrorPw[i] += knl*ErrorPw * Ki;
un peu plus bas rechercher
Propor[i] = Kp * Errorpw;
Modifier
Propor[i] = Knl*Kp * ErrorKpw;
si on est proche de l erreur on réduit fortement l action integrale pour eviter les petites oscillations autour de la consigne, pour les memes raisons on réduit aussi fortement voir on annule l'action Proportionnelle si l erreur <30w
Quand l erreur est autour de 160 on globalement le meme reglage qu avant pour que le fonctionnement siot stabel
Par contre si l erreur augmente beaucoup on a l action integrale et proportionnelle qui sont multiplié par 2 rendant le regulateur hyper actif quand l ecart est grand , mais la régulation reste stable car les parametres diminue au fur et a mesure
Pour utiliser cet algorithme , vous prenez vos parametres actuels qui vont bien , et vous les mulitpliez par 0.8 environ