Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

PCI 6601 tareas

BUeno días,

 

tengo un problema para poner en marcha estas tareas.

 

defino 3 tareas. una tarea para leer 3 salidas digitales ( que me funciona bien) y otras dos , esto es, una para generar un tren de impulsos que para ello utilizo el counter 0 y la otra para leer una entrada digital. utilizo los counters para realizar el filtrado de la señal.

 

El código es el siguiente: (me da problema al poner en marcha la últimas dos tareas que me dice que el recurso ya está reservado). Cuál es el problema? el filtraje? no puedo utilizar dos contadores?

 

Agradezco vuestra ayuda.

 

//    DAQmxErrChk(DAQmxCreateTask("",&taskMarchaCiclo));
    DAQmxErrChk(DAQmxCreateTask("",&taskModoAutomatico));
    DAQmxErrChk(DAQmxCreateTask("",&taskSalidasDigitales));
    DAQmxErrChk(DAQmxCreateTask("",&taskTrigger));
//    DAQmxErrChk(DAQmxCreateTask("",&taskFaseA));



   
    //tarea para crear tren de impulsos

    //DAQmxErrChk(DAQmxCreateCOPulseChanFreq(taskTrigger,"Dev1/ctr0","",DAQmx_Val_Hz,DAQmx_Val_Low,0.0,25,0.5));//limite 534
    DAQmxErrChk (DAQmxCreateCOPulseChanTicks(taskTrigger,"Dev1/ctr0","","/Dev1/PFI39",DAQmx_Val_Low,0,4,4));
    DAQmxErrChk(DAQmxCfgImplicitTiming(taskTrigger,DAQmx_Val_FiniteSamps,125));
    DAQmxErrChk(DAQmxRegisterDoneEvent(taskTrigger,0,DoneCallback,NULL));

    DAQmxErrChk(DAQmxSetCOCtrTimebaseDigFltrEnable(taskTrigger,"Dev1/ctr0",0));
    DAQmxErrChk(DAQmxSetCOCtrTimebaseDigFltrMinPulseWidth(taskTrigger,"Dev1/ctr0",0.000005));
    DAQmxErrChk(DAQmxSetCOCtrTimebaseDigFltrEnable(taskTrigger,"Dev1/ctr0",1));


    //tareas para leer Inputs digitales
    //borrar DAQmxErrChk (DAQmxCreateDIChan(taskMarchaCiclo,"Dev1/port0/line0:1","MarchaCiclo",DAQmx_Val_ChanForAllLines ));
   

   
   
   
    //borrar DAQmxErrChk (DAQmxCreateDIChan(taskModoAutomatico,"Dev1/port0/line1","ModoAutomatico",DAQmx_Val_ChanForAllLines ));
    DAQmxErrChk (DAQmxCreateCICountEdgesChan(taskModoAutomatico,"Dev1/ctr1","",DAQmx_Val_Rising,0,DAQmx_Val_CountUp));
    DAQmxErrChk (DAQmxSetCICountEdgesTerm (taskModoAutomatico,"Dev1/ctr1","/Dev1/PFI0"))

    DAQmxErrChk (DAQmxSetCICountEdgesDigFltrEnable (taskModoAutomatico,"Dev1/ctr1",0));
    DAQmxErrChk (DAQmxSetCICountEdgesDigFltrMinPulseWidth(taskModoAutomatico , "Dev1/ctr1", 0.000005));
    DAQmxErrChk (DAQmxSetCICountEdgesDigFltrEnable (taskModoAutomatico,"Dev1/ctr1",1));

    //tarea para escribir Outputs digitales
    DAQmxErrChk (DAQmxCreateDOChan(taskSalidasDigitales,"Dev1/port0/line8:10","Salidas digitales",DAQmx_Val_ChanForAllLines ));


    //tarea para filtrar las entradas digitales


    //tareas Start
    //DAQmxErrChk (DAQmxStartTask(taskMarchaCiclo));
    DAQmxErrChk (DAQmxStartTask(taskTrigger));
    DAQmxErrChk (DAQmxStartTask(taskModoAutomatico));
    DAQmxErrChk (DAQmxStartTask(taskSalidasDigitales));

0 kudos
Mensaje 1 de 2
3.235 Vistas

Buenas tardes Buruaga,

 

Normalmente este tipo de errores nos da cuando iniciamos una tarea sin finializarla y que utiliza los mismos recursos. Por ejemplo si en todos utilizaras el mismo contador esto te puede provocar este error.

 

Otra razón puede ser que al momento de que inicializas la tarjeta, solo inicializas uno de los canales y luego la intentas inicializar nuevamente, esto te dejará reservada la tarjeta en la primer tarea.

 

Te recomendaría primero cerrar la referencia o borrar el canal virtual y así no tendrás problemas al iniciar la nueva tarea!

 

Saludos,

Luis Elias
NI VeriStand and HIL Product Manager
0 kudos
Mensaje 2 de 2
2.684 Vistas