Zachariah Rabatah Zachariah Rabatah - 1 month ago 17
C# Question

Reading CI Frequency In C# With NI USB-6363

Working LabVIEW Code

Attached above is LabVIEW code that I have successfully used in the past to read frequency data from a device. I also usually use the Start Task VI between my property node and while loop.

I am trying to code this in C#. So far I have successfully been able to code analog Output's and analog Input's on my device, USB-6363, (so I know I am able to write and read data from the device successfully with C#).

I have also used multimeters (Grainger link at bottom of post) to read frequency data (Orange Hz mode that the device is set to in the picture).

However, my C# code seems to be having issues reading the frequency data. My C# code is attached. When I try running this program I get the following error. This is the same error that I get when using the example program called 'MeasDigFreqBuffCont_ExtClk_ArmStart.2013'. The code I show is just creating the task, I do call the code later in my program in a different section and that is how I am getting the error.

------------------------------------------------- Begin Error Code -------------------------------------------------


{Error=-200077 Message="Requested value is not a supported value for
this property. The property value may be invalid because it conflicts
with another property.\n\nProperty:
NationalInstruments.DAQmx.CIChannel.FrequencyDivisor\nRequested Value:
1\nPossible Values: 4 to 4294967295\nChannel Name: Digital
Frequency\n\nTask Name: _unnamedTask<0>\n\nStatus Code: -200077"}


------------------------------------------------- End Error Code --------------------------------------------------

In the example program it asks for a sample clock source (A PFI channel from the device). However in the LabVIEW code it does not ask for this. Is this example maybe more in detail than what I am trying to do?

Task frequencyInput = new Task();

frequencyInput.CIChannels.CreateFrequencyChannel(
"Dev1/ctr0",
"Digital Frequency",
200,
15000,
CIFrequencyStartingEdge.Rising,
CIFrequencyMeasurementMethod.DynamicAveraging,
0.001,
1,
CIFrequencyUnits.Hertz
);


frequencyInput.CIChannels["Digital Frequency"].FrequencyTerminal = "/Dev1/PFI0";

CounterSingleChannelReader counterFreq = new CounterSingleChannelReader(frequencyInput.Stream);


double counterFreqData = counterFreq.ReadSingleSampleDouble();

txtPFI0.Text = Convert.ToString(counterFreqData);


FLUKE (R) Fluke-115 Compact - Basic Features Digital Multimeter, 14° to 122°F Temp. Range

Answer

Formatting the error message:

Requested value is not a supported value for this property. The property value may be invalid because it conflicts with another property.

Property: NationalInstruments.DAQmx.CIChannel.FrequencyDivisor
Requested Value: 1
Possible Values: 4 to 4294967295

Task Name: _unnamedTask<0>
Status Code: -200077

According to the documentation, you are asking the device to use an invalid divisor. Change your 1 to a 4:

frequencyInput.CIChannels.CreateFrequencyChannel(
                "Dev1/ctr0",
                "Digital Frequency",
                200,
                15000,
                CIFrequencyStartingEdge.Rising,
                CIFrequencyMeasurementMethod.DynamicAveraging,
                0.001,
   /* here */   4,
                CIFrequencyUnits.Hertz
                );

NI installs C# examples for DAQmx, and it includes one for measuring frequency:

C:\Users\Public\Documents\National Instruments\NI-DAQ\Examples\DotNET4.0\Counter\Measure Digital Frequency\MeasDigFrequency_LowFreq1Ctr\CS