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,(DebExtr01–1)+i,1) >= Caract(48) ET milieu(lecontdubuffer,(DebExtr01–1)+i,1) <= Caract(57) ALORS
Extrait01 = Extrait01 + Milieu(Bufferlu,(DebExtr01–1)+i,1)
ToastAffiche(« Index lu : « + extrait01)
FIN
FIN
FIN
Auteur: LANTERI MASSA Jean-Jacques www.lesjardinsdusoft.com