05-06-2014 10:30 PM - edited 05-06-2014 10:40 PM
Hi
I am using visual studio c# with daqmx .net class library and my device is USB-6363
I want to make a program that count buffered digital events using sample clock source.
Counting buffered digital events and Generating sample clock source are conducted in same device (USB-6363).
I wrote code as below.
Task TaskPulseGen = new Task(); Task TaskCounter = new Task(); try { int NumData = 10; int NumCounterRead = 0; double Rate = 10; // Setting Pulse Generation Task COChannel ChannelPulseGen = TaskPulseGen.COChannels.CreatePulseChannelFrequency("Dev1/ctr0", "Pulse Generation", COPulseFrequencyUnits.Hertz, COPulseIdleState.Low, 0, Rate, 0.5); ChannelPulseGen.PulseTerminal = "/Dev1/PFI10"; TaskPulseGen.Timing.ConfigureImplicit(SampleQuantityMode.FiniteSamples, NumData); // Setting Count Task uint[] DataCounter = new uint[NumData]; CIChannel ChannelCounter = TaskCounter.CIChannels.CreateCountEdgesChannel("/Dev1/ctr1", "", CICountEdgesActiveEdge.Rising, 0, CICountEdgesCountDirection.Up); ChannelCounter.CountEdgesTerminal = "/Dev1/PFI0"; TaskCounter.Timing.ConfigureSampleClock("/Dev1/PFI10", Rate, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples); TaskCounter.Stream.Timeout = 5000; CounterReader ReaderCounter = new CounterReader(TaskCounter.Stream); // Task Start ReaderCounter.MemoryOptimizedReadMultiSampleUInt32(NumData, ref DataCounter, out NumCounterRead); // Wait for the 10 sample clocks (Timeout occur) TaskPulseGen.Start(); // Genrate 10 Pulse signals (Sample clocks) Console.WriteLine("Data"); for (int i = 0; i < NumData; i++) { Console.WriteLine("Buff {0} : {1}",i, DataCounter[i]); } } catch (DaqException exception) { Console.WriteLine(exception.Message); TaskPulseGen.Dispose(); TaskCounter.Dispose(); }
Finite pulses are generated, and counter has same number of buffer with pulses.
When program is started, It is stoped at “MemoryOptimizedReadMultiSampleUInt32”.
Because “MemoryOptimizedReadMultiSampleUInt32” is wait for getting pulse signal. So it can’t be continued to implement code.
I have tried using thread to solve this problem. I put “MemoryOptimizedReadMultiSampleUInt32” on other thread, and it can continue to implement code.
But it has risk. When pulse generation task is excuted first before count task is ready to get pulse signal, Counter missed some pulse signal. And it makes same problem.
Is there any solution for this problem?
Please help me.
Thanks!