Search code examples
c#labviewdata-acquisition

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


Solution

  • 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