Modem Téléinfo et Windev (Linky mode Standard)

de | 17 février 2018

Programmation sous windev pour la lecture des données Linky (paramétrage en mode standard)

Déclarations des paramètres du Port Com dans une structure (code du projet)

//**********
// PORTCOM *
//**********
STPortCom est une Structure
PortNum est un entier
Baud est un entier
BitsDonnées est un entier
Parité est un entier
BitsStop est un entier
DtrDsr est un entier
RtsCts est un entier
XonXoff est un entier
BufferIn est un entier
BufferOut est un entier
FIN
PortCom est une STPortCom
PortCom.PortNum = 7
PortCom.Baud = 9600
PortCom.BitsDonnées = 7
PortCom.Parité = 1
PortCom.BitsStop = 0
PortCom.DtrDsr = 0
PortCom.RtsCts = 0
PortCom.XonXoff = 0
PortCom.BufferIn = 32768
PortCom.BufferOut = 32768

Laphrasemagique est une chaine
Laphrasemagique = « 1 » + « , » + « 1 » + « , » + « ‘ » + « Interface USB -> Compteur » + « ‘ » + « , »
Ce sont des virgules et il y en a 3 (obligatoirement)

Une fenêtre windev avec 3 boutons:

Bouton : Ouverture du portcom
sOuvre(PortCom.PortNum, PortCom.BufferIn,PortCom.BufferOut, sTimeoutDéfaut, Vrai)
SI ErreurDétectée ALORS
Son(sonSystèmeArrêtCritique)
ToastAffiche(« Impossible d’ouvrir le port COM «  + PortCom.PortNum)
SINON
// Fixe paramètres
sFixeParamètre(PortCom.PortNum, PortCom.Baud, PortCom.Parité, PortCom.BitsDonnées, PortCom.BitsStop, PortCom.DtrDsr, PortCom.RtsCts, PortCom.XonXoff)
ToastAffiche(« Port Com Ouvert et paramétré » + PortCom.PortNum)
FIN

Bouton : Scrutation du port
sEcrit(PortCom.PortNum, laphrasemagique)
sEvénement(PortCom.PortNum, sEveCaractèreReçu, lectureportcom)

Bouton : Fermeture du PortCom
sFerme(PortCom.PortNum)

La procédure de scrutation

span style= »color: #000000; »>PROCEDURE lectureportcom()
LOCAL
LaTailleduBuffer est un entier
LaLectduBuffer est une chaîne
LeContduBuffer est une chaîne
lhTimeOut est une Heure = HeureSys()
BOUCLE
LaTailleduBuffer = sDansFileEntrée(PortCom.PortNum)
LaLectduBuffer = sLit(PortCom.PortNum, LaTailleduBuffer)
LeContduBuffer += LaLectduBuffer
// SORTIE AUTOMATIQUE APRES 500 millisecondes *
SI (HeureDifférence(lhTimeOut, HeureSys()) > 500) ALORS
SORTIR
FIN
FIN
Trace(« le buffer » + LeContduBuffer)
RETOUR

Avec ça, après avoir appuyé sur ouvre et sur scrutation, vous verrez apparaitre une fenêtre jaune contenant la trace du compteur…
Après, vous pouvez affiner votre programme  en sélectionnant la bonne information dans la trame

<\n>EASD03<TAB>000000000<TAB> »<\r><\n>EASD04<TAB>000000000<TAB>#<\r><\n>EAIT<TAB>000036206<TAB>V<\r><\n>ERQ1<TAB>000000548<TAB>L<\r>
// On se positionne sur la partie qui contient l’index de production (EAIT) en vérifiant qu’on a bien un morceau de trame « complet » (test présence EADS04 avant et ERQ1 Après…
SI ChaîneOccurrence(lecontdubuffer,« EASD04 ») >= 1 ET chaîneOccurrence(lecontdubuffer,« EAIT ») >= 1 ET ChaîneOccurrence(lecontdubuffer,« ERQ1 ») >= 1 ALORS
DebExtr01 = Position(lecontdubuffer,« EAIT »,1)
Extrait01 = «  »
// 17c c’est plus ou moins la fin du tag EAIT
POUR i = 1 A 17
// on ne garde que les chiffres
SI Milieu(lecontdubuffer,(DebExtr011)+i,1) >= Caract(48) ET milieu(lecontdubuffer,(DebExtr011)+i,1) <= Caract(57) ALORS
Extrait01 = Extrait01 + Milieu(Bufferlu,(DebExtr011)+i,1)
ToastAffiche(« Index lu : «  + extrait01)

FIN
FIN
FIN

Auteur: LANTERI MASSA Jean-Jacques www.lesjardinsdusoft.com