|
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,
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) |
| |
| |
| | | |
|
| | | | |
| | |
|