예제 #1
0
        static int Main(string[] args)
        {
            var rawAdData = new short[short.MaxValue - short.MinValue];

            for (short i = short.MinValue; i < short.MaxValue; ++i)
            {
                rawAdData[i - short.MinValue] = i;
            }

            var voltage = new double[rawAdData.Length];

            var res = D2KDASK.D2K_Register_Card(D2KDASK.DAQ_2213, 0);

            if (res < 0)
            {
                Console.Error.WriteLine("Failed to register card.");
                return(1);
            }

            ushort cardNumber = (ushort)res;

            const int Channels = 2;
            var       channels = new ushort[Channels];
            var       ranges   = new ushort[Channels];

            for (int i = 0; i < Channels; ++i)
            {
                channels[i] = (ushort)i;
                ranges[i]   = D2KDASK.AD_B_10_V;
            }

            // Is it possible to call this function like this?
            // D2KDASK.D2K_AI_ContVScale(D2KDASK.AD_B_10_V, rawAdData, voltage, voltage.Length);
            // Why is card number necessary for such a simple function?
            res = D2KDASK.D2K_AI_ContVScale(cardNumber, D2KDASK.AD_B_10_V,
                                            rawAdData, voltage, voltage.Length);
            if (res != D2KDASK.NoError)
            {
                Console.Error.WriteLine("D2K_AI_ContVScale failed: {0}.", res);
                D2KDASK.D2K_Release_Card(cardNumber);
                return(1);
            }

            // Output: 305.17578125
            // It is about ADRange / (short.MaxValue + 1) * 1e6.
            for (int i = 0; i < voltage.Length; ++i)
            {
                Console.WriteLine("{0}", DoubleConverter.ToExactString(voltage[i] / rawAdData[i] * 1e6));
            }

            var scale = 10.0 / (short.MaxValue + 1);

            var rawAdData2 = new short[]
            {
                -32767, -32766, -10000,
                -1000, -2000, -3000,
                -1, -2, -3,
                1, 2, 3,
                1000, 2000, 3000,
                32767, 32766, 10000,
            };
            var voltage2 = new double[rawAdData2.Length];

            res = D2KDASK.D2K_AI_ContVScale(cardNumber, D2KDASK.AD_B_10_V,
                                            rawAdData2, voltage2, voltage2.Length);
            if (res != D2KDASK.NoError)
            {
                Console.Error.WriteLine("D2K_AI_ContVScale failed: {0}.", res);
                D2KDASK.D2K_Release_Card(cardNumber);
                return(1);
            }

            for (int i = 0; i < rawAdData2.Length; ++i)
            {
                Console.WriteLine("{0} {1} {2}",
                                  rawAdData2[i],
                                  DoubleConverter.ToExactString(voltage2[i]),
                                  DoubleConverter.ToExactString(rawAdData2[i] * scale));
            }

            D2KDASK.D2K_Release_Card(cardNumber);

            Util.Pause();

            return(0);
        }