Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

trigger en c

Bonjour, 

J'utilise une carte PCI 6534 où les lignes 0:15 sont mode output et les lignes 16:31 sont en mode input. J'écris un programme en c qui doit permettre d'éffectuer des émissions sur les lignes 0:15 suite à la réception d'un bit sur une des lignes prédefinis 16:31.

 

Je suis coincé sur la mise en place du trigger. Je pensais utiliser directement la ligne de reception du bit en trigger sur l'émission et donc utiliser la fonction DAQmxCfgDigEdgeStartTrig(taskHandle,"/Dev1/line16",DAQmx_Val_Raising)); mais apparemment je ne peux pas utiliser une ligne définit en lecture pour trigger une émission.

 

J'essaye donc de définir le trigger sur la réception et transmettre celui-ci à la configuration de l'émission. Pour le moment j'ai défini un trigger pattern en lecture mais je ne trouve pas de solution pour utiliser ce trigger pour démarrer l'émission. Je pensais relier le trigger pattern à RTSI0 et donc y avoir acces en écriture mais je ne sais pas si c'est faisable.

 

Je suis coincé sur ce problème.

 

Merci de votre aide.

 

Voici le code :

 

int daqmxSendData(uInt8 data[], int size, int mode){
int error=0;
TaskHandle taskHandle=0,triggerHandle=0;
char errBuff[2048]={'\0'};
uInt8 data2[16];
int err;
int32 read,bytesPerSamp;
/*********************************************/
// DAQmx Configure Code
/*********************************************/
DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
DAQmxErrChk (DAQmxCreateTask("",&triggerHandle));
DAQmxErrChk (DAQmxCreateDOChan(taskHandle,"Dev1/line0:15","",DAQmx_Val_ChanForAllLines));
DAQmxErrChk (DAQmxCreateDIChan(triggerHandle,"Dev1/line16","",DAQmx_Val_ChanForAllLines));

DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,size));

DAQmxErrChk ( DAQmxCfgSampClkTiming(triggerHandle,"",1000.0,DAQmx_Val_Rising, DAQmx_Val_ContSamps,size));


if(mode == 1)
{
printf("trigger");

 

DAQmxErrChk (DAQmxCfgDigEdgeStartTrig(taskHandle,"/Dev1/RTSI0",DAQmx_Val_Rising));

DAQmxErrChk ( DAQmxCfgDigPatternStartTrig (triggerHandle, "/Dev1/line16:31","XXXX XXXX XXXX XXX1" , DAQmx_Val_PatternMatches));



}

DAQmxErrChk (DAQmxSetWriteRegenMode(taskHandle,DAQmx_Val_AllowRegen));
DAQmxErrChk (DAQmxRegisterDoneEvent(taskHandle,0,DoneCallback,NULL));
DAQmxErrChk (DAQmxWriteDigitalLines(taskHandle,size,0,10.0,DAQmx_Val_GroupByChannel,data,NULL,NULL));




/*********************************************/
// DAQmx Start Code
/*********************************************/
DAQmxErrChk (DAQmxStartTask(taskHandle));
DAQmxErrChk (DAQmxStartTask(triggerHandle));


printf("Generating digital output continuously. Press Enter to interrupt\n");
getchar();


Error:
if( DAQmxFailed(error) )
DAQmxGetExtendedErrorInfo(errBuff,2048);
if( taskHandle!=0 || triggerHandle!=0) {
/*********************************************/
// DAQmx Stop Code
/*********************************************/
DAQmxStopTask(taskHandle);
DAQmxClearTask(taskHandle);
DAQmxStopTask(triggerHandle);
DAQmxClearTask(triggerHandle);
}
if( DAQmxFailed(error) )
printf("DAQmx Error: %s\n",errBuff);
return 0;
}

 

0 Compliments
Message 1 sur 2
5 402 Visites

Bonjour AlexxP,

 

La configuration de ta tâche DAQmx de génération sur un Port numérique avec un trigger sur RTSI0 devrait ressembler à ça:

 

DAQmxCreateTask("DAQTaskInProject", &taskOut);

 

DAQmxCreateDOChan(taskOut, "Dev4/port0", SortieNumérique", DAQmx_Val_ChanForAllLines);


DAQmxSetChanAttribute(taskOut, "SortieNumérique", DAQmx_DO_InvertLines, 0);

 

DAQmxCfgSampClkTiming(taskOut, "", 1000, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 100);

 

DAQmxSetWriteAttribute(taskOut, DAQmx_Write_RegenMode, DAQmx_Val_AllowRegen);

 

DAQmxCfgDigEdgeStartTrig(taskOut, "RTSI0", DAQmx_Val_Rising);

 

Je vous souhaite une bonne journée,
Cordialement,

 

Sabri JATLAOUI

Sabri JATLAOUI - Certified LabVIEW Architect - Certified LabVIEW Developer
0 Compliments
Message 2 sur 2
5 364 Visites