Problème de réception de trame sous Labwindow

Fermé
Crhys29 Messages postés 4 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 23 novembre 2011 - 22 avril 2009 à 00:14
Bonjour, bonjour,

je me présente, je m'apelles Christophe je suis tout nouveau sur ce forum et tout nouveau dans le Labwindows CVI ^^'.
En effet, je suis actuellement en stage de deuxième année d'un DUT GEII et j'ai pour projet de programmer une interface sous Labwindows CVI 8.5.1.

En bref, je reçois une trame UDP de 542 octet toutes les 500 ms (via ethernet), je dois la réceptionner, l'analyser, et en tirer toutes les informations possibles.

Mais pour débuter je dois effectuer un petit programme qui ne se charge que d'établir la communication, de réceptionner les trames et de les compter dans un temps donné.

Le programme attaché vous présente mon main, deux fonctions callback appelées lors d'un clic sur les bouton "connexion" ou "déconnexion" de mon interface.

Le problème est que la valeur de 'Nb' augmente beaucoup beaucoup plus vite que prévu, je pensais qu'en utilisant cette technique, alors 'Nb' s'incrémenterai toute les 500ms...

Je précise que la trame reçu et identique à chaque réception.

Mon problème ne serai-t-il pas dû au fait que Event_Type soit tjr égal à UDP_DATAREADY et non toutes les 500 ms? (lors de l'envoie d'une nouvelle trames par l'émeetteur?)

Je cherche une solution pour compter mais trames depuis 1 semaine...sans trouver.
Comme unique solution, j'ai choisis de modifer la trame elle-même afin qu'un bits se modifie (passe de '0' à '1' puis de '1' à '0') à chaque envoie d'une nouvelles trames....

J'attend vos réponses, vos idées et vos conseils!
Merci et bonne continuation.

/*Algorithme-----------------------------------------------------------------------------------------------

//Test communication UDP, clignotement d'une Led à la cadence des réceptions (500 ms en théorie)

#include <cvirte.h>
#include <userint.h>
#include "TestCom.h"
#include <tcpsupp.h>
#include <toolbox.h>
#include <utility.h>
#include <udpsupp.h>
#include <string.h>
#include <UDPReaderWriterCommon.h>*/

static int panelHandle;
static int readerChannel = 0;
static int Nb=0;



int CVICALLBACK UDPCallback (unsigned channel, int eventType, int errCode, void *callbackData);


int main (int argc, char *argv[])
{

if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "TestCom.uir", PANEL)) < 0)
return -1;

DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}



int CVICALLBACK UDPCallback (unsigned channel, int eventType, int errCode, void *callbackData)
{
int size, error;

if(eventType==UDP_DATAREADY)
{
SetCtrlVal( panelHandle, PANEL_LED, 1);

size = UDPRead(channel, NULL, 0, 1000, NULL, NULL);

Nb++;

Ecriture de la valeur de Nb:

SetCtrlVal( panelHandle, PANEL_NB_TRAMES, Nb);

}
return 0;
}

//Après appuie sur le bouton "deconnexion"-------------------------------------------------------------

int CVICALLBACK FermerComEth (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{

case EVENT_COMMIT:

SetCtrlVal( panelHandle, PANEL_ConfigRecept_2, 1);
UDPMulticastUnsubscribe(readerChannel, "231.20.1.2", "66.21.200.120");
DisposeUDPChannel(readerChannel);
SetCtrlVal( panelHandle, PANEL_NB_TRAMES, 0);
SetCtrlVal( panelHandle, PANEL_LED, 0);

break;
}
return 0;
}


//Après appuie sur le bouton "connexion"-------------------------------------------------------------------

int CVICALLBACK OuvrirComEth (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{

int status;
switch (event)
{
case EVENT_COMMIT:

CreateUDPChannelConfig(50003, UDP_ANY_ADDRESS, 0, UDPCallback, NULL, &readerChannel);

status =UDPMulticastSubscribe(readerChannel, "231.20.1.2", "66.21.200.120");

if(status<0)
{ MessagePopup("Warning message", "Connexion ERROR");
SetCtrlVal( panelHandle, PANEL_ConfigRecept_1, 0);
SetCtrlVal( panelHandle, PANEL_LED, 0);
}

else
{
SetCtrlVal( panelHandle, PANEL_ConfigRecept_1, 1);
}
break;
}
return 0;
}

int CVICALLBACK quitterAcqui (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:

QuitUserInterface (0);
break;
}
return 0;
}


Et le mot de la fin......Gazinière =)