Bonjour,
Actuellement, j'utilise la carte NI PCI 6528 en acquisition de signal. une fonction recupere l'état des entrées à un moment donné.
Mes besoins ont changé et j'aurais besoin de conseil sur la façon d'utiliser ma carte :
Ma carte PCI-6528 est sur un PC maitre, j'utilise 2 ports pour relier mon PC maitre à un PC client (quand le premier port est à 1 cela signifie que j'ai une info sur le deuxieme port).
Plusieurs PC client sont ainsi connectés au PC maitre sur la carte PCI-6528.
Chaque PC Client fourni à un moment une information sur le port2(0 ou 1) en mettant le port1 à 1. Les PC clients ne fournissent pas l'info en même temps. (a T0:aucune info, a T1:info du PC1 et PC3, a T2:aucune info, a T3: info du PC2...)
J'aurais besoin de récuperer sur une periode donnée, l'information provenant des différents PC clients.
Pour l'instant j'ai fait une fonction qui scrute mes ports en continue le plus rapidement possible mais cela a plusieurs inconvenients : utilisation du processeur 100% et je loupe plusieurs mesures (la carte est plus rapide que le PC).
J'ai pensé à deux solutions mais je ne sais pas comment les inplementer :
 - utiliser un thread qui attend que la carte lui transmette l'etat des ports dés qu'il y a une modification sur un etat.
 - récuperer sur la carte à un moment donné un tableau contenant les valeurs de tous les ports depuis la derniere lecture
Pour l'instant, j'opterais plus pour al deuxieme solution mais laquelle me conseilleriez vous ? avez vous des exemples pour programmer de telles fonctions ?
Voici le code que j'utilise pour l'instant : 
#include 
#include 
#include 
#include 
#pragma comment(lib, "NIDAQmx")
using namespace std;
int main(int argc, char *argv[])
{
int32	read,bytesPerSamp;
uInt8   data[100];
TaskHandle	mytaskHandle=0;
int     sizeOfData=100,error;
char		errBuff[2048]={'\0'};
int32		i;
    
DAQmxErrChk (DAQmxCreateTask("",&mytaskHandle));
DAQmxErrChk (DAQmxCreateDIChan(mytaskHandle,"Dev1/port0/line0:7","",DAQmx_Val_ChanForAllLines));
DAQmxErrChk (DAQmxStartTask(mytaskHandle));
DAQmxErrChk (DAQmxReadDigitalLines(mytaskHandle,1,10.0,DAQmx_Val_GroupByChannel,data,sizeOfData,&read,&bytesPerSamp,NULL));
DAQmxErrChk (DAQmxStopTask(mytaskHandle));
DAQmxErrChk (DAQmxClearTask(mytaskHandle));
	
Error:
	if( DAQmxFailed(error) )
		DAQmxGetExtendedErrorInfo(errBuff,2048);
	if( mytaskHandle!=0 )
	{
		DAQmxStopTask(mytaskHandle);
		DAQmxClearTask(mytaskHandle);
	}
	if( DAQmxFailed(error) )
		printf("DAQmx Error: %s\n",errBuff);
	else
	    for(i=0;i<8;++i)
			printf("Données acquise, channel %d: 0x%X\n",i,data[i]);
    system("PAUSE");	
    return 0;
}
Merci de votre aide !!!
David MARQUIS (Proko)Message Edité par Proko le 03-23-2005 04:18 AM