Panneaux solaires et automatismes de consommation

Je n'ai pas d'organigramme, le programme s'est fait "au fil de l'eau"... Mais je peux en faire un si cela semble nécessaire
 
Bonjour,
Je n'en fais pas non plus, mais ici, ça aiderait à mieux voir l'organisation du programme. Mais c'est pas grave.
MM
 
Bonjour,
Il est permis d'être étonné que le picaxe puisse être en attente des codes ,$C9,$D4,$A0 (qui devraient correspondre
aux caractères I,T, et espace de l'étiquette du Linky,) alors que ce compteur n'utilise pas la table ASCII étendue!
Sur 8 bits, ce sont toujours des caracteres ASCII. et je ne comprends pas pourquoi certains caractères et pas d'autres, auraient un problème soit disant lié à la parité!
Dans une trame USART, le bit de parité est optionnel, et le nombre de bits d'une trame n'a rien à voir et peut varier entre 5 et 9.

Bizarrement, l'appel de l'étiquette PAPP est conforme, hormis le code espace en fin.
J'ignore donc la source qui vous a fait écrire cela dans le programme.

Concernant les goto, il y en a une cinquantaine ! et seulement 5 gosub. Donc la vingtaine de return du programme ne correspond pas à grand chose hormis de compliquer encore plus la structure du programme.
Fort heureusement ces returns sont ignorés lors lors du déroulement du programme, dans votre cas.

Pour terminer, avec STGE, j'ai indiqué que d'autres données très intéressantes pouvaient être utilisées , en particulier pour des séquences de délestage. Tout le monde n'est pas contraint d'utiliser le mode historique.
Je ne pense pas avoir d'explications de la part de l'auteur de ce programme mystérieux, au vu de votre seule réponse qui est que votre programme fonctionne à merveille. Et si tout le monde est content, sans se poser de question, tout est parfait.
Bonne continuation.
 
Bon, je suis un incompris de PieM ...

Pour les codes d'attente dans le SERIN, il m'avait semblé avoir apporté des infos : Dans cette instruction, il est précisé dans la doc que l'on teste la réception du "qualifier" sur 0-255, donc 8 bits. La table ASCII standard est sur 7 bits, le Linky envoie sur 7 bits + parité paire, d'où la nécessité de coder en Hexa. J'avais essayé avec les caractère ASCII de l'éditeur : ça ne fonctionne pas. Le code Hexa correspond au caractère attendu AVEC UNE PARITé PAIRE, donc sur 8 bits. Mais il y a peut-être une autre manière ???

Pour les GOTO , oui, mes S/P en sont pleins, je ne sais pas bien faire autrement de manière simple pour moi qui vient de débuter. Ce n'est peut-être pas élégant et source d'erreur, mais tous ces goto finissent sur un return du S/P, je ne vois pas là aucun "miracle" ??

Concernant le mode Historique ou Standard, j'ai dû aussi en parler quelque part : L'Historique est par défaut et surtout me concernant (et probablement nombre d'abonnés), j'ai un gestionnaire qui a une dizaine d'année, et n'est pas compatible avec le nouveau mode. Je n'ai pas envie de changer cet appreil (300 ou 400€), et le mode Standard n'apporte pas grand' chose à mon avis.
La vitesse de com est effectivement plus grande mais la trame est immense et les calculs du compteur doivent être les mêmes (1s d'intégration il me semble). Donc je ne pense pas que ça puisse booster le temps de réponse. Mais il ne doit pas il y avoir de difficulté particulière à passer à 9600 bp/s dans le programme.

Concernant la partie puissance du dispositif, je vais peut-être changer le "fusil d'épaule". Je viens de me procurer un bloc gradateur de puissance (chez Thomann) : les premiers essais sont très concluants concernant l'absence de parasitage et d'interférences (c'est prévu pour !!!).
On peut le commander par un 0-5V. Je vais prochainement le mettre en test en situation réelle (il faut juste passer l'ampli op du montage en suiveur en enlevant la résistance du - op de 33,2k vers la masse pour sortir 0-5V).
Le coût du bloc d'une soixantaine d'€ est très compétitif avec ce que l'on peut faire (relais + dissipateur + condos + inductances ...), pour un résultat bien meilleur et de plus je ne sais pas où l'on peut trouver les inductances vraiment appropriées pour une telle réalisation.
Il faudrait peut-être envisager de piloter en DMX, ce qui est plus répandu et un grand standard : quelqu'un a peut-être déjà développé un convertisseur 0-5 ou 0-10V (le 0-10V était très employé en éclairage scénique il y a quelques années) vers DMX512 ??

Je reste dans l'attente d'un message de MGU
 
Je reste dans l'attente d'un message de MGU
Bonjour,
J'ai été un peu occupé par le projet de chimere322 avec son pilotage de four. Ton projet est plus complexe et mes connaissances en PPV et Linky sont limitées. Je ne m'intéresse donc qu'à la forme et non au fond.
Pour m'y retrouver, j'essaye de faire un organigramme pour repérer les principales fonctions. Mais comme tu connais ce programme mieux que moi, tu irais sans doute plus vite ;)
MM
 
Hello MGU,
Il n'y a rien de bien compliqué, il faut juste récupérer les infos dans la trame émise par le Linky (ou même les anciens compteurs électroniques, mais normalement il n'y en a plus).

Pour ce qui est d'un organigramme, OK, je vais m'y mettre (d'ici 1 ou 2 semaines)

En ce qui concerne la "consommation", je suppose que tu veux parler du courant d'entrée de pilotage (impédance d'entrée du bloc) ?
Aucune idée ... En fait il s'agit de se brancher sur l'entrée normalement prévue pour un "fader" extérieur. Ce fader est câblé via un jack 3,5 entre masse, et un +5V, curseur sur l'entrée de commande. Suite à un avis sur le site de Thomann, on peut effectivement entrer un signal 0-5V pour 0-100% de puissance. j'ai testé, ça fonctionne.
Je pense la présence de l'ampli indispensable pour préserver l'intégrité du signal issu du PWM et de l'intégrateur. D'où l'ampli en suiveur.

Je n'élimine pas pour autant la piste de mon montage initial pour la puissance (c'est beaucoup plus compact), je vais continuer mes investigations.
 
Hello MGU,
Il n'y a rien de bien compliqué, il faut juste récupérer les infos dans la trame émise par le Linky (ou même les anciens compteurs électroniques, mais normalement il n'y en a plus).
Pour ce qui est d'un organigramme, OK, je vais m'y mettre (d'ici 1 ou 2 semaines)
Bonjour,
C'est justement parce que ce programme est moins compliqué qu'il n'en a l'air que j'aimerais le rendre un peu plus lisible.
Un suiveur, pourquoi pas, mais si l'impédance d'entrée du bloc est déjà élevée, et si on augmente la vitesse du PWM, ici à 1kHz, à 2, voire 4kHz, le filtrage est très amélioré, avec ou sans suiveur.
Je pense avoir déjà simplifié le code, mais c'est pas fini....
MM
 
Last edited:
Pour le PWM, je ne vais pas y toucher, les résultats obtenus sont très bien, et ça remettrait aussi en cause les constantes de filtrage, mais bien sûr chacun peut revoir ...
L'ampli suiveur : une précaution d'usage (toujours) nécessaire en principe : ça, c'est mon passé de quelques années en électronique analogique industrielle. ça ne coûte pas cher et on est sûr d'avoir le bon signal et de ne pas avoir d'influence de l'entrée de l'étage suivant. Pour ce qui est pilotage du relais de chez INOREA, c'est nécessaire et obligatoire, car on a besoin de gain. Si c'est sur un bloc gradateur, je pense que c'est (toujours) préférable.
Mais là aussi, chacun fera ce qu'il veut, et validera sa modif.
 
Bonjour, pas mal de temps de passé ...
Je reviens sur ce sujet avec un nouveau filtre pour le gradateur de ce projet (valable pour tout gradateur d'ailleurs ...). Il m'a fait pas mal gamberger et beaucoup de recherche et d'essai, mais voilà un dispositif qui donne satisfaction. Voir document joint.
En ce qui concerne l'organigramme promis, je l'ai commencé, j'espère le finir d'ici qq jours (ce sera dessiné "main", car pas de logiciel ad'hoc). Toutes mes excuses à MGU pour le délai.
 

Attachments

En ce qui concerne l'organigramme promis, je l'ai commencé, j'espère le finir d'ici qq jours (ce sera dessiné "main", car pas de logiciel ad'hoc). Toutes mes excuses à MGU pour le délai.
Bonjour,
J'ai essayé aussi de dégager les fonctions principales, mais sans finaliser. Merci pour les excuses, mais il n'y a vraiment pas de quoi. Pour info, il y a un module organigramme dans PE6, que je n'ai jamais utilisé, je préfère écrire en basic.
A bientôt
MM
 
Comme promis, en pièce jointe l'organigramme (pas très joli, mais fait main). Je n'ai pas fait les organigrammes des S/P qui restes simples à suivre et assez commentés me semble-t-il. Du coup, oui, il semble qu'il y a bien des simplifications à faire ...
Je reste à dispo.
PS: aucun message de l'initiateur de ce post depuis le début de mon projet, il n'est plus intéressé ???
 

Attachments

Comme promis, en pièce jointe l'organigramme (pas très joli, mais fait main). Je n'ai pas fait les organigrammes des S/P qui restes simples à suivre et assez commentés me semble-t-il. Du coup, oui, il semble qu'il y a bien des simplifications à faire ...
Je reste à dispo.
PS: aucun message de l'initiateur de ce post depuis le début de mon projet, il n'est plus intéressé ???

Merci, je vais voir ce que je peux faire.
Il y a bien longtemps que l'on a pas vu BESQUEUT sur ce forum, dommage, il est très compétent.
A +
MM.
 
Bonjour, je reviens sur ce sujet avec mon programme légèrement modifié ... J'ai rajouté quelques lignes afin d'émettre quelques valeurs "clés" calculées ou reçues de la TIC sur la ligne série, ceci à des fins de contrôle, suivi, mise au point. Pour ceci j'ai dû un peu modifier le schéma d'origine (rajouté une 22k en provisoire sur le cuivre pour l'instant). J'ai réalisé ça car j'ai une demande d'une autre réalisation pour un ami. Ce rajout permet donc aussi téléchargement de programme. Je le passe en PJ. Et je reste dans l'attente des nouvelles de MGU (rien depuis début Août ??)
 

Attachments

Bonjour, je reviens sur ce sujet avec mon programme légèrement modifié ... J'ai rajouté quelques lignes afin d'émettre quelques valeurs "clés" calculées ou reçues de la TIC sur la ligne série, ceci à des fins de contrôle, suivi, mise au point. Pour ceci j'ai dû un peu modifier le schéma d'origine (rajouté une 22k en provisoire sur le cuivre pour l'instant). J'ai réalisé ça car j'ai une demande d'une autre réalisation pour un ami. Ce rajout permet donc aussi téléchargement de programme. Je le passe en PJ. Et je reste dans l'attente des nouvelles de MGU (rien depuis début Août ??)
Bonjour Jarrige,
Je n'ai pas beaucoup travaillé sur ton programme, une explication....la flemme et si le programme fonctionne et donne satisfaction tel quel, il est un peu risqué de vouloir en modifier l'esthétique. Par ex, je remplacerais W0 par W13, (je réserve b0 et b1 à la découpe en variables "bit" (0 ou 1), ce qui ne change rien.
Je vois aussi des "goto" qui se terminent par des "return".... il faut faire très attention au dépassements de piles
Si tu veux afficher des valeurs, peut être un petit LCD 2004?
Pour faire une autre réalisation, pourquoi pas un PCB sur JLCPCB ? (5 circuits pour qques euros, qualité pro)
Je vais m'y remettre.
MM
 
Last edited:
Salut MGU,
Pour "l'esthétique" du programme, je reste en attente de tes modifs, et oui, attention ... C'est vrai que ça fonctionne bien comme ça depuis maintenant environ 8 mois. Je confirme que je peux valider toute nouvelles modifs sur mon montage, d'autant que maintenant avec la com, c'est facile de reprogrammer le PICAXE in-situ.
Oui, il y a des tests avec sauts dans les S/P, donc des GOTO, et à la fin un RETURN ... Je suppose que tu veux parler des S/P "aug" et "dim"
Je ne vois pas pourquoi il y aurait un problème de pile du processeur... La pile sert lors du GOSUB pour stoker l'adresse de retour, pas en cas de saut à ma connaissance !!. Mais je reste à l'écoute d'autre(s) idée(s) pour faire la même chose sans GOTO (A un moment, j'ai essayé de voir avec SELECT CASE, sans rien de concluant avec la suite des tests à faire sur les 2 variables).
Un LCD, peut-être, ce LCD se pilote en I2C (jamais utilisé), mais il y a une visualisation du niveau de commande du CE, ce qui me semble suffisant pour "l'utilisateur".
L'émission des valeurs précitées sur la com est juste pour faire des vérifs de l'évolution des variables en fonctionnement. Il suffit de brancher le jack de l'AXE27 et de démarrer le terminal dans PE6 et ça ne coûte absolument rien de plus.
Je vais modifier mon routage sous TCI pour ajouter la 22k et une prise jack.
Pour un autre routage et des CI "pros", il faudrait que d'autres personnes soient intéressées .
Comme beaucoup de particuliers se sont lancés dans le PV et en auto-conso, c'est d'ailleurs assez étonnant de n'avoir aucun "bricoleur" qui n'ait envie de construire ce dispositif ...
A+
 
Salut MGU,
Pour "l'esthétique" du programme, je reste en attente de tes modifs, et oui, attention ... C'est vrai que ça fonctionne bien comme ça depuis maintenant environ 8 mois. Je confirme que je peux valider toute nouvelles modifs sur mon montage, d'autant que maintenant avec la com, c'est facile de reprogrammer le PICAXE in-situ.
Oui, il y a des tests avec sauts dans les S/P, donc des GOTO, et à la fin un RETURN ... Je suppose que tu veux parler des S/P "aug" et "dim"
Je ne vois pas pourquoi il y aurait un problème de pile du processeur... La pile sert lors du GOSUB pour stoker l'adresse de retour, pas en cas de saut à ma connaissance !!. Mais je reste à l'écoute d'autre(s) idée(s) pour faire la même chose sans GOTO (A un moment, j'ai essayé de voir avec SELECT CASE, sans rien de concluant avec la suite des tests à faire sur les 2 variables).
Un LCD, peut-être, ce LCD se pilote en I2C (jamais utilisé), mais il y a une visualisation du niveau de commande du CE, ce qui me semble suffisant pour "l'utilisateur".
L'émission des valeurs précitées sur la com est juste pour faire des vérifs de l'évolution des variables en fonctionnement. Il suffit de brancher le jack de l'AXE27 et de démarrer le terminal dans PE6 et ça ne coûte absolument rien de plus.
Je vais modifier mon routage sous TCI pour ajouter la 22k et une prise jack.
Pour un autre routage et des CI "pros", il faudrait que d'autres personnes soient intéressées .
Comme beaucoup de particuliers se sont lancés dans le PV et en auto-conso, c'est d'ailleurs assez étonnant de n'avoir aucun "bricoleur" qui n'ait envie de construire ce dispositif ...
A+
Bonjour,
TCI est simple d'utilisation, mais ne permet pas la génération de fichiers Gerber compatibles avec JLCPCB (aux prix pratiqués, faire des PCB soi-même n'a aucun intérêt). J'utilise maintenant DipTrace, convivial et gratuit.
J'ai simplement dit qu'il fallait faire attention au mélange des genres gosub goto.
J'ai fait quelques simplifications d'attribution de variables.
MM
 
Salut MGU,
J'ai utilisé TCI4, et il y a bien un onglet Gerber ... jamais essayé.
Question : qui est JLCPCB ? C'est un fabricant de PCB ? pour amateur ? il travaille donc à partir d'un fichier Gerber ? et c'est juste pour de la fabrication de CI ou aussi du routage ???
Je ne sais pas éventuellement comment faire à l'avenir, mais comme j'ai tout le matériel et les consommables,
Merci de me renseigner !!
 
JLCPCB est sans doute le fabriquant de PCB le plus connu:
Pour 2 euros, il te fabrique 5 PCB taille 10x10 cm , qualité pro, verni épargne, trous, double faces et tout et tout
Faibles FdP si on choisit bien le mode de livraison.

DipTrace est un logiciel de conception de CI, plusieurs modules traçage, de circuits, PCB, double face, routage automatique (non obligatoire), gratuit en version "non profit":
TCI a des Gerbers, mais non suffisants et incompatibles avec JLCPCB ou Kicad par ex.
MM
 
Je ne suis pas vraiment entré dans le programme, mais voici un aperçu des modifs envisageables:
La def des variables infonuit et creneau:
Code:
#picaxe 14M2;  
    symbol Amp=b4; valeur courant (apres calcul) TIC,on utilise b2 et b3 pour la reception, b4 non utilise
    symbol Papp=b9; indicateur puissance apparente (apres calcul) TIC, on utilise b5,b6,b7,b8 pour la reception
    symbol cumul=w7; mot 16 bits cumul pour calcul energie
    symbol boucles=b17; mot 8 bits nb boucles cumul energie;
    symbol charge=b18; consigne niveau de charge par potentiometre
    symbol puiss=w10;pour calcul puissance injectee
    symbol pce=w13;valeur puissance chauffe-eau dans mot 16 bits (octets b0 et b1)
    symbol infonuit=pinC.1    ;; test entree jour/nuit sur C.1
    symbol creneau=pinC.2 ; test entree creneau horaire sur C.2 : contact ouvert >>entree etat bas = chauffe
    high B.1; LED jaune eteinte
    high B.3; LED rouge eteinte
Y a t il une différence de fonctionnement entre cette variante de la sub "energie" et l'original?
Code:
energie:     ;
    ; Emission valeur energie atteinte (en 1/100 heure equivalent pleine puissance)
    ; On emploie le mot puiss et les octets b5, b6, b7 utilises pour la reception TIC
    ; pour la conversion afin de mettre une virgule entre les digits    ;
    puiss = boucles
    puiss = puiss*100/51; mise a l'echelle (boucles = 51 pour 1H pleine puissance)
    BINTOascii puiss,b5,b6,b7
    sertxd ("Temps chauffe equivalent pleine puissance = ",b5,",",b6,b7," H",$0A,$0D)    ;
    if pce>=100 then
        ; on ne fait rien si pce<100, la conduction du gradateur est negligeable   
        puiss=PCE: puiss=puiss/10; mise a l'echelle
        puiss=puiss*puiss; mise au carre
        puiss=puiss/10; mise a l'echelle
        cumul=cumul+puiss
        if cumul >= 32670 then     ;
             boucles=boucles+1
            cumul=0
        endif
    endif   
    return

MM
 
Last edited:
Voici la sub "DIM" modifiée, dis ce que tu en penses
Code:
Dim:
        if Amp>=7 and PCE>=400 then
            PCE=PCE-400
        elseif Amp>=6 and PCE>=200 then
            PCE=PCE-200
        elseif Amp>=5 and PCE >=100 then
            PCE=PCE-100
        elseif Amp>=4 and PCE>=50 then
            PCE=PCE-50
        elseif Amp>=3 and PCE>=30 then
            PCE=PCE-30
        elseif PCE>=5 then
            PCE=PCE-5
        endif
        return
MM
 
Last edited:
La sub diminj:
Code:
diminj:
    if Amp=0 and PCE >= 20 then
        PCE=PCE-20
    elseif Amp> 0 and PCE >= 10 then
        PCE=PCE-10
    elseif Amp > 0 and PCE >= 5 then
        PCE=PCE-5    
    elseif Amp > 0 then 
        PCE=0
    endif
   return
A vérifier, bien sûr...
MM
 
Il y a "aug" aussi:
Code:
aug:
    if Amp >= 7 and PCE < 800 then
        PCE=PCE + 100
    elseif Amp >= 6 and PCE <850 then 
        PCE =PCE+ 50
    elseif Amp>=5 and PCE< 860 then
        PCE =PCE + 40
    elseif Amp >=4 and PCE < 870 then
         PCE =PCE +30
    elseif Amp>=3 and PCE <890 then
        PCE=PCE+10
    elseif PCE < 900 then
        PCE=PCE+5
    endif
    return
MM
 
Hello,
Voici une synthèse des modifs apportées, celles déjà citées et quelques autres. "Normalement", le fonctionnement général n'est pas modifié,
Mais j'espère que la lisibilité est améliorée. En gros, il y a une bascule entre "jour" et "nuit".
Code:
#picaxe 14M2
#no_data
symbol rang=b1
symbol Amp=b4; valeur courant (apres calcul) TIC,on utilise b2 et b3 pour la reception, b4 non utilise
symbol Papp=b9; indicateur puissance apparente (apres calcul) TIC, on utilise b5,b6,b7,b8 pour la reception
symbol boucles=b17; mot 8 bits nb boucles cumul energie;
symbol charge=b18; consigne niveau de charge par potentiometre
symbol cumul=w11; mot 16 bits cumul pour calcul energie
symbol puiss=w12;pour calcul puissance injectee
symbol pce=w13;valeur puissance chauffe-eau dans mot 16 bits (octets b0 et b1)
symbol infonuit=pinC.1    ;; test entree jour/nuit sur C.1
symbol creneau=pinC.2 ; test entree creneau horaire sur C.2 : contact ouvert >>entree etat bas = chauffe
high B.1; LED jaune eteinte
high B.3; LED rouge eteinte
init:
    PWMOUT B.2,OFF;sortie pwm a l'arret
    cumul=0 :boucles=0:pce=0
    sertxd ("Version programme :2_3_outdata mod4",$0A,$0D)
jour:
    do     
        if Infonuit = 0 then nuit ; test entree jour/nuit sur C.1
        ; test entree creneau horaire sur C.2 : contact ouvert >>entree etat bas = chauffe
        if creneau = 0 then demchauff; dans creneau chauffage
        pwmout B.2,OFF;arret chauffe
        low B.1: low B.3; pour cligno des 2 led
        pause 500
        high B.1:High B.3
        pause 500
        pce=0; pour reprise ulterieure dans prochain creneau horaire valide
    loop
;
demchauff:
    SERIN [3000,norecep],C.0,T1200,($C9,$C9,$4E,$53,$D4,$A0),b2,b3,Amp;reception de la valeur
    ;intensite instantanee avec "qualifier" correspondant a l'etiquette IINST et space en
    ;tenant compte de la parite paire de la TIC.
    ;I en amperes, recue sur 3 caracteres en ascii unite en b4, dizaines en b3 (b2= centaines inutilisee)
    ;
    high B.1; reset LED erreur com
    low B.3; LED reception OK on
    ;
    ; on masque les 1/2 octets de poids fort >>> on ne garde que la valeur 0-9 en bin de chaque octet
    b4=b4 and %00001111                                                ;
    b3=b3 and %00001111                                                ;
    b3= b3*10; b3 contient les dizaines                            ;<=> Amp=10*b3+Amp (à vérifier..)
    Amp=Amp+b3; Amp contient la valeur globale intensite    ;
    sertxd ("Intensite lue TIC = ",#Amp," A ",$0A,$0D); emission intensite lue en provenance de la TIC
    ;
    SERIN [3000,norecep],C.0,T1200,($50,$41,$50,$50,$A0),b5,b6,b7,b8,Papp; reception de la valeur
    ;de P apparente avec "qualifier" correspondant a l'etiquette "PAPP" et "space" et tenant compte
    ;de la parite paire de la TIC.
    ;P apparente en VA,recue sur 5 caract.si P=0 tous les caracteres sont a 0 ascii >>> en injection
    ;
    high B.3; LED reception OK off (pour cligno ...)
    ;
    ; on masque les 1/2 octets de poids fort >>> on ne garde que la valeur 0-9 en bin de chaque octet
    b5=b5 and %00001111
    b6=b6 and %00001111
    b7=b7 and %00001111
    b8=b8 and %00001111
    Papp= Papp and %00001111
    Papp=Papp+b8+b7+b6+b5; somme de toutes les valeurs

        if Papp<>0 then
            rang=0
        elseif Amp>=3 then
            rang=1
        elseif Amp<2 then 
            rang=2
        endif
    on rang gosub dim,aug,Diminj    ;retour après le on gosub
    ; intensite dispo =2A, on ne change pas la puissance

    PWMOUT PWMDIV4,B.2,249,pce; ecriture puissance
    ; emission valeur % puissance CE
    puiss=pce:puiss=puiss/9; mise a l'echelle
    sertxd ("Niveau commande chauffe eau = ",#puiss,"%",$0A,$0D)    ;
    gosub energie; calcul energie
    readadc B.5,charge; lecture consigne charge
    if boucles >= charge then goto finchauff; on est arrive a la consigne de chauffe
    ;
goto jour; nouvelle boucle

;____________________________________________________________________________
;Fin de chauffe en journee, on attend le passage nuit, puis le retour en jour
;pour nouveau cycle
;____________________________________________________________________________
finchauff:
    pwmout B.2,OFF;sortie pwm a l'arret
    low B.3; LED reception OK en permanent indique fin de chauffe;
    do                    ; attente passage en nuit
        pause 1000     
    loop while infonuit=1
    do
        pause 1000
    loop while infonuit=0 ;attente passage en jour
    high B.3
goto init
;____________________________________
;Chauffe et/ou fin de chauffe en nuit
;____________________________________
nuit: ;
    do
        if infonuit=1 then jour ; entree en mode jour
        ; test de l'entree nuit (cas de coupure de tension et d'init calybox en jour) 
        readadc B.5,charge; lecture consigne charge
        IF boucles>= charge then goto finnuit; test energie totale envoyee(en journee et ou nuit en cours)
        pause 900; pause totale env. 1,85s pour sp calcul energie, equivalent a une boucle TIC en journee
        low B.1; cligno led rouge,indique chauffe nuit en cours
        pause 900
        high B.1
        pce=900; puissance chauffe au maxi
        PWMOUT PWMDIV4,B.2,249,pce
        gosub energie; calcul energie
    loop
finnuit:
    PWMOUT B.2,OFF; pwm a l'arret
    low B.3; LED jaune "reception OK" on permanent indique fin de chauffe
    high B.3
    do
        pause 1000
    loop while infonuit=0
goto init
;
;______________________________________________________________________________
; S/P augmentation de puissance en fonction de I dispo et du niveau en cours
; La variable Amp contient la derniere valeur de courant lue depuis la TIC
; A la sortie,la variable PCE contient la valeur puissance pour le PWM
;______________________________________________________________________________
Aug:
    if amp >= 7 and pce < 800 then
        pce=pce + 100
    elseif amp >= 6 and pce <850 then
        pce =pce+ 50
    elseif amp>=5 and pce< 860 then
        pce =pce + 40
    elseif amp >=4 and pce < 870 then
         pce =pce +30
    elseif amp>=3 and pce <890 then
        pce=pce+10
    elseif pce < 900 then
        pce=pce+5
    endif
    return
;;
;______________________________________________________________________________________
 ;S/P diminution de puissance en fonction du niveau de I en cours en injection (0 ou 1A)
; La variable Amp contient la derniere valeur de courant lue depuis la TIC
;______________________________________________________________________________________
;
diminj:
    if amp=0 and pce >= 20 then
        pce=pce-20
    elseif amp> 0 and pce >= 10 then
        pce=pce-10
    elseif amp > 0 and pce >= 5 then
        pce=pce-5 
    elseif amp > 0 then
        pce=0
    endif
    return
;;___________________________________________________________________________________
; S/P diminution de puissance en fonction de I soutiree (P apparente non nulle)et/ou
; du niveau en cours
; La variable Amp contient la derniere valeur de courant lue depuis la TIC
; A la sortie,la variable PCE contient la valeur puissance pour le PWM
;___________________________________________________________________________________
Dim:
    if amp>=7 and pce>=400 then
        pce=pce-400
    elseif amp>=6 and pce>=200 then
        pce=pce-200
    elseif amp>=5 and pce >=100 then
        pce=pce-100
    elseif amp>=4 and pce>=50 then
        pce=pce-50
    elseif amp>=3 and pce>=30 then
        pce=pce-30
    elseif pce>=5 then
        pce=pce-5
    endif
    return
;;__________________________________________________________________________________________________
;S/P cumul pour calcul energie
;
;Evaluation puissance injectee dans le CE : PCE est la valeur de commande du gradateur via le PWM et
;en consequence une image approximative de la valeur de la tension appliquee au CE
;Pour PCE = 100 a 900, le calcul de puissance donne = 10 a 810
;__________________________________________________________________________________________________
energie:     ;
    ; Emission valeur energie atteinte (en 1/100 heure equivalent pleine puissance)
    ; On emploie le mot puiss et les octets b5, b6, b7 utilises pour la reception TIC
    ; pour la conversion afin de mettre une virgule entre les digits    ;
    puiss = boucles
    puiss = puiss*100/51; mise a l'echelle (boucles = 51 pour 1H pleine puissance)
    BINTOascii puiss,b5,b6,b7
    sertxd ("Temps chauffe equivalent pleine puissance = ",b5,",",b6,b7," H",$0A,$0D)    ;
    if pce>=100 then
        ; on ne fait rien si pce<100, la conduction du gradateur est negligeable 
        puiss=pce: puiss=puiss/10; mise a l'echelle
        puiss=puiss*puiss; mise au carre
        puiss=puiss/10; mise a l'echelle
        cumul=cumul+puiss
        if cumul >= 32670 then     ;
             boucles=boucles+1
            cumul=0
        endif
    endif 
    return
;;
norecep:
    sertxd ("Erreur communication avec Linky",$0A,$0D)
    low B.1; allumage voyant erreur pas de reception
    PWMOUT B.2,OFF;arret ou confirmation arret pwm
    goto jour
    end
J'ai plusieurs niveaux d'évolutions si celle ci (niveau 4) a des problèmes, j'ai les précédentes
MM
 
Last edited:
Salut MM,
Avant d'essayer de télécharger le nouveau programme, je simule quelques routines. J'ai repéré un problème dans le test pour aiguillage vers les S/P augmentation et diminution de puissance, lorsque on ne doit rien faire : A=2 et Papp = 0.
J'ai rajouté une ligne else rang=3 pour sauter après les GOSUB, ça me semble la solution la plus "élégante" ?

if Papp<>0 then
rang=0
elseif Amp>=3 then
rang=1
elseif Amp<2 then
rang=2
else rang=3 ; intensite dispo =2A, on ne change pas la puissance
endif
on rang gosub dim,aug,Diminj
PWMOUT PWMDIV4,B.2,249,pce; ecriture puissance
 
Bien vu...
Il est vrai que rang aura la valeur 0 par défaut et ira donc sur la sub dim ; avec rang=3, le on gosub est ignoré et le programme continue à la ligne suivante. On peut aussi écrire rang=3 avant le test.
J'attends les autres "erreurs"
MM
 
Back
Top