Measurement Studio for .NET Languages

cancel
Showing results for 
Search instead for 
Did you mean: 

Buffered digital events Counter using sample clock source

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!

0 Kudos
Message 1 of 1
(4,945 Views)