Page 1 sur 1

[R] UDP Event ?!

Posté : dim. 27 nov. 2011 23:16
par cutprod
Bonjour a tous, toujours avec mes carte électroniques ...:)
Je travail sur une carte qui m’envoie des données par le protocole 'UDP" toute les x millisecondes,
les données contiennent les noms et valeurs des différentes sorties ou entrées analogiques et digitales.
Pour l'instant je me suis contenté d'enfermer dans une boucle des =

Code : Tout sélectionner

$data_recv = UDPRecv($socket, 50,2)

  If $data_recv <> "" Then
        message("["& $data_recv[1]&" : "&$data_recv[2] &"]" &@CRLF& $data_recv[0] &@CRLF)
            
            If $data_recv[0] = "Digital INPUT = LOW" Then
                GUICtrlSetData($Label2,"LOW")
            Else
                GUICtrlSetData($Label2,"HIGH")
            EndIf

    EndIf
 
Ce qui j'en suis sur n'est pas très élégant!!
Est ce que quelqu'un a une idée et peut m'aider a faire un mode événement pour la réception des données?
Que le script ne soit pas prisonnier dans une boucle?
J'ai vu que notre ami "matwachich" en a développer pour c'est différents script sur le TCP, mais je ne parvient pas a extraire ce qui m' intéresse !
Peut être m'aidera t il :| (appel direct que très peu déguiser) :lol:

Re: [..] UDP Event ?!

Posté : dim. 27 nov. 2011 23:35
par Tlem
cutprod a écrit :Que le script ne soit pas prisonnier dans une boucle?
OnEvent Mode non ?

Re: [..] UDP Event ?!

Posté : lun. 28 nov. 2011 10:53
par mikell
Pour ne pas bloquer le script pourquoi ne pas lancer périodiquement la vérification avec un AdlibRegister ?

Re: [..] UDP Event ?!

Posté : lun. 28 nov. 2011 12:54
par cutprod
Merci pour vos réponses, Tlem ok pour "Opt("GUIOnEventMode"), mais ou je défini la fonction a appeler en rapport avec les data envoyer (string avec un nom pour la mesure et sa valeur, ca c'est moi qui le défini dans la programmation de la carte)
les datas envoyer ressemble a ca = "AI_1=1020" ou "AI_2=445" ....
mikell, ok pour le "AdlibRegister" mais si un paquet arrive quand la fonction appelé par le adlib n'écoute pas ? le paquet et perdu ?
Il faudrait un buffer ?

Re: [..] UDP Event ?!

Posté : lun. 28 nov. 2011 13:05
par Iste
cutprod a écrit :mikell, ok pour le "AdlibRegister" mais si un paquet arrive quand la fonction appelé par le adlib n'écoute pas ? le paquet et perdu ?
Pensez bien que c'est géré par AutoIt. Il serait impensable de nous demander de faire un UDPRecv() exactement au moment ou l'on recoit l'info

Par contre, ce qu'il faut penser, c'est que l'envoi n'est peut etre pas fini, donc While $data_recv <> ""

Re: [..] UDP Event ?!

Posté : lun. 28 nov. 2011 14:03
par sksbir
Bonjour

perso, je ne vois pas où est le problème à enfermer ta requete de lecture dans une boucle.

normalement, tu as ouvert le canal de communication en dehors de la boucle, et les données émises par ta "carte" sont donc bufferisées. A ce moment, rien n'interdit de faire une boucle qui contient la lecture du buffer, et d'autres choses à monitorer par exemple.... Il n'y a pas d'obligation à travailler en temps réel (les données peuvent attendre "un petit peu" dans le buffer) , et ça tombe bien d'ailleurs, car autoit n'est pas vraiment fait pour ça...

Re: [..] UDP Event ?!

Posté : lun. 28 nov. 2011 15:43
par Tlem
Je ne connais pas la teneur du script en entier, mais si on passe en mode événementiel, il y à une boucle While/Wend qui ne sert qu'à attendre.
Donc en utilisant le test comme vous l'avez fait, rien n’empêche le déclenchement d'événement (sauf analyse des paquets UDP trop longue).

Après, tout dépend de votre gestion de paquets. Il faudrait connaitre la structure et le séquentiel. Si c'est juste pour modifier l'état d'un label comme dans votre exemple, alors la solution ci-dessus sera largement suffisante. :mrgreen:

Re: [..] UDP Event ?!

Posté : lun. 28 nov. 2011 22:32
par cutprod
Merci a tous pour vos réponses, je pense que vous avez bien raison vu que les paquets ne contiennent que très peut de data une boucle suffira... après il faudrai que le script continu a traiter les paquets entrants pendant l'exécution dune fonction trop longue...
Mais vu que le petit script que je fais et a but éducatif pour les utilisateurs novice (de la carte électronique) ca va aller!! :)
Merci a tous pour votre aide, je poste le tout dans [EX] dés que c'est propre.