[R] Aquisition port COM: Comment sortir d'une boucle while

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
asheen
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 10 févr. 2015 12:38
Status : Hors ligne

[R] Aquisition port COM: Comment sortir d'une boucle while

#1

Message par asheen »

Bonjour à toutes et tous,

Je développe une simple application qui permets de récupérer des données transmises vis le port COM / RS232. J'utilise pour cela l'UDF _CommMG.

J'ai différents boutons sur mon application:
- Bouton de connexion au port COM (opérationnelle)
- Bouton de lancement d'acquisition : Bouton_START (opérationnelle)
- Bouton de fin d'acquisition: Bouton_STOP (problème !!)

J'affiche les données dans un champs "Edit1". Jusque là tout va bien :D .La phase d'initialisation est ok, les données sont transmises à l'edit1 et les valeurs s'affichent ligne par ligne.

J'ai une structure de programme de type "switch case" en fonction des choix de l'utilisateur. Ci dessous le "case" pour le bouton START ainsi que la fonction associée:
► Afficher le texte
Mon problème réside dans le fait que je ne sais pas comment sortir de la boucle while/wend quand l'utilisateur appuie sur le bouton stop ; J 'ai tenté divers algo. à base de if/then , do/until ...etc .. sans résultats. Le programme boucle à l’infinie sur l'acquisition des données.

Est ce que quelqu’un pourrait me proposer une structure de code permettant de tester l'appuie sur le bouton stop dans la boucle while/wend. Si l'utilisateur appuie sur ce bouton stop pendant l’acquisition alors le processus d'acquisition est stoppé.

Je vous remercie par avance !!!

Cordialement,
Modifié en dernier par asheen le lun. 23 févr. 2015 11:18, modifié 2 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Aquisition port COM: Comment sortir d'une boucle wh

#2

Message par mikell »

Faut passer en mode évènementiel (ou GUIRegisterMsg($WM_COMMAND, ...) éventuellement)
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
asheen
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 10 févr. 2015 12:38
Status : Hors ligne

Re: [..] Aquisition port COM: Comment sortir d'une boucle wh

#3

Message par asheen »

Bonsoir,

Merci Mikell de ta réactivité et d'avoir pris le temps de regarder mon code de plus près.

J 'ai tenté de coder en utilisant le mode événementiel (je découvre :D cette méthode). Cependant quand je tente d'intégrer ton idée dans mon programme, la fonction switch / case et en particulier "GUIGetMsg()" ne fonctionne plus en faisant des recherches j'ai découvert que le mode événementiel: Opt("GuiOnEventMode", 1 n 'est pas" compatible" avec GuiGetMsg(): c 'est soit lun , soit l'autre en somme... Voici le lien vers la source en question http://www.autoitscript.com/forum/topic ... entmode-1/.

Voici mon script au complet qui donnera une meilleur idée de ce que je veux faire.
► Afficher le texte

Peut etre faut-il que je reprenne toute la structure de mon programme. J 'ai tenté d'activer, puis de désactiver le mode événementiel dans la boucle while d'acquisition, sans résultats (un peu trop simple sans doute ^^). Je pense que l'on peut sortir de la boucle while dans le "Case $ButtonSTART " sans utiliser le mode évènementiel...

Votre aide me serai d'un grand secours!

Merci d'avance
Modifié en dernier par asheen le lun. 23 févr. 2015 11:13, modifié 1 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Aquisition port COM: Comment sortir d'une boucle wh

#4

Message par orax »

Pour éviter de reprendre toute la structure, une solution est de changer le Switch en Select pour avoir quelque chose comme ça :
► Afficher le texte
Ensuite il faudra ajouter GUICtrlSetOnEvent pour chaque contrôle créé. Par exemple :

Code : Tout sélectionner

Global $ButtonCONNECTION = GUICtrlCreateButton("Connection", 50, 5, 120, 25)
GUICtrlSetOnEvent(-1, "_events")
Global $ButtonDISCONNECTION = GUICtrlCreateButton("Disconnection", 50, 35, 120, 25)
GUICtrlSetOnEvent(-1, "_events")
...
Sinon il y a WM_COMMAND comme évoqué précédemment par le monsieur en vert : :mrgreen:
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
asheen
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 10 févr. 2015 12:38
Status : Hors ligne

Re: [..] Aquisition port COM: Comment sortir d'une boucle wh

#5

Message par asheen »

Salut la communauté,

Merci pour vos différents retour: Mikelle , Orax,... Après avoir étudié vos réponses j 'ai réécrit mon code.

Voici la procédure : cliquer sur "connection", puis sur "disconnection" et enfin "Start acquisition" , normalement une succession de 0 doit apparaitre dans l'edit1 (car il n'y a pas de données recu le port COM1)

le code désormais:
► Afficher le texte
Mais le problème persiste, le programme ne prend pas en compte l'appui sur le bouton stop lorsqu'il est dans la boucle while du bouton start bien que j'ai implémenté la function "stop" comme proposé par Mikell

La programmation demande de la patience et de la persévérance, ^^ merci d'avance pour vos éclairage, si quelqu'un a une solution...

Merci encore!
Modifié en dernier par asheen le lun. 23 févr. 2015 11:13, modifié 5 fois.
asheen
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 10 févr. 2015 12:38
Status : Hors ligne

Re: [..] Aquisition port COM: Comment sortir d'une boucle wh

#6

Message par asheen »

Bonjour à toutes et tous !

Après avoir repris mon code , j 'ai pu faire en sorte de "sortir" de la ma boucle while/wend à l'aide de vos précieux conseils. J 'ai utilisé la commande WM_COMMAND pour l'interruption comme proposé par Mikell.

Le sujet peut être notifié comme résolue.

Merci Mikell c 'est nikel ! :D, merci également Orax !

Longue vie à la communauté !
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [R] Aquisition port COM: Comment sortir d'une boucle while

#7

Message par Anthony »

Bonjour asheen et à tous,

Je serai intéressé par ton code car jusqu'à maintenant (pas mal de temps) je n'ai pas réussi une seule communication avec mon appareil voir lien...
http://www.autoitscript.fr/forum/viewto ... =3&t=13953
J'ai pourtant fait un grand nombre de recherches mais sans succès :cry: je cherche juste un petit code qui fonctionne.

Merci à tous ;)
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Répondre