PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → balance de pesée sous windev 17
balance de pesée sous windev 17
Débuté par Raoul BLANC, 29 juil. 2018 07:56 - 3 réponses
Posté le 29 juillet 2018 - 07:56
J'utilise une balance Sartorius paramétrée "1200,O,7,1"
Un bout de programme de test m'a été fourni qui montre le bon fonctionnement de cette balance avec ce paramétrage.

Sous WinDev 17 ,je fixe le paramétrage comme suit :

sFerme(SAI_NumPor)

LigCom est un booléen = 0
LigCom = sOuvre(SAI_NumPor, TailleBufferEntrée,TailleBufferSortie, TempsAttentePort,Vrai)
SI LigCom = Faux ALORS
Erreur("Erreur d'ouverture de COM" + SAI_NumPor)
RETOUR
SINON
// Paramétrage de COM choisi
// sai_numport = 3, sai_vitesse = 1200, sai_parité = O'lettre), sai_nbrbit= 7, sai_stopbit = 1
SI sFixeParamètre( SAI_NumPor, SAI_Vitesse, SAI_Parité, SAI_NbrBit, SAI_StopBit ) = Faux ALORS
Info( "Erreur lors de sFixeParametre' : " + SAI_NumPor )
RETOUR
SINON
// Détection de caractères sur le port COM choisi
sEvénement(SAI_NumPor,sEveCaractèreReçu,"LecturePortSérie") // on active la procédure de lecture sur évenement

erreur("pas de lecture")
FIN
FIN


Lorsque sai_stopbit = 1 alors erreur("Erreur d'ouverture de COM" + SAI_NumPor)"
Lorsque sai_stopbit = 0 alors erreur("pas de lecture")
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 30 juillet 2018 - 13:14
Bonjour
Lorsque sai_stopbit = 0 ALORS Erreur("pas de lecture")

c'est normal avec sEvenement vous dite au pc : Quant un caractère va arriver sur le port com et ça quelque soit ou je me trouve dans la fenêtre, alors exécute la procédure LecturePortSérie.
et tout de suite après vous exécutez : Erreur("Pas de lecture")

la parité c'est un entier : 0 sans, 1 paire, 2 impaire

Vous oubliez de nous mettre le code de la procédure LecturePortSérie (dans sEvénement()) qui va être appelée lors de la réception d'un caractère
Posté le 31 juillet 2018 - 16:54
Merci de l'intérêt que vos portez à mon problème.

Je joins mon code revu et corrigé :

// la balance utilisée est un Sartorius paramétrée 1200,O,7,1
sFerme(SAI_NumPor)
LigCom est un booléen = sOuvre(SAI_NumPor, 2000,2000, TempsAttentePort,Vrai)
SI LigCom = Faux ALORS
Erreur("Erreur d'ouverture de COM" + SAI_NumPor)
RETOUR
SINON
// Paramétrage de COM choisi
// sai_numpor = 3, sai_vitesse = 1200, sai_parité = 2, sai_nbrbit = 7, sai_stopbit = 0
SI sFixeParamètre( SAI_NumPor, SAI_Vitesse, SAI_Parité, SAI_NbrBit, SAI_StopBit ) = Faux ALORS
Info( "Erreur lors de sFixeParametre' : " + SAI_NumPor )
RETOUR
SINON
// Détection de caractères sur le port COM choisi
sEvénement(SAI_NumPor,sEveCaractèreReçu,"LecturePortSérie") // on active la procédure de lecture sur évenement
FIN
FIN



PROCEDURE LecturePortSérie(sai_NumPort,sEveCaractèreReçu)

// temporiser 1 seconde
Multitâche(100)

i est un entier = 0
OctetsLus est un entier = sDansFileEntrée (SAI_NumPor)
ChaineLue est une chaîne = sLit (SAI_NumPor ,OctetsLus)

SAI_Pesée = ""
POUR i = 1 A OctetsLus
SAI_Pesée += ChaineLue[[i]]
FIN

// traitement en sortie de qte nette en kgs
SAI_QteN = SAI_Pesée / 1000
ExécuteTraitement(SAI_QteN,trtSortie)
...

Ce code me donne satisfaction, si ce n'est :
- la procédure 'lectureportsérie' ne s'exécute qu' après avoir cliqué sur un certain bouton de la balance
- j'aimerais voir défiler la pesée dans le champ de la fenêtre WinDev

Croyez-vous cela possible?

Merci
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 31 juillet 2018 - 18:25
Bonjour,
// temporiser 1 seconde
Multitâche(100)

Est complétement inutile car la procédure ne sera xécutée que si il y a au minimum 1 caractère dans le tampon.

quelle est la structure d'une trame envoyée par la balance ?

En général, la trame envoyée a un caractères fixe de «début de trame» et un caractère fixe de «fin de trame»

1° déclarez une variable globale myBufferRx est une chaine = ""
2° dans la procédure de réception LecturePortSérie()
a) mettre dans myBufferRx tout ce qu'il y a dans le buffer
myBufferRx += sLit (SAI_NumPor ,sDansFileEntrée (SAI_NumPor))
b) analyse myBufferRx en cherchant le caractère de début et le caractère de fin
si on à les deux alors on a une trame complète que l'on peut afficher et supprimer de myBufferRx
si on a fin mais pas début on supprime de myBufferRx du début jusqu'à la position du caractère de fin car on à pas une trame incomplète
si on début mais pas la fin alors ne fait rien (retour)