コード例 #1
0
        public DeviceAccession()
        {
            //Az attributumok elérésénél a lockhoz a szinkronizációs objektum
            lockAttributes = new object();

            DAQ = DaqSystem.Local.LoadDevice("Dev1");
            DAQ.SelfCalibrate();

            ditask = new Task();
            dotask = new Task();
            aitask = new Task();

            chLeftEnd = ditask.DIChannels.CreateChannel("Dev1/port0/line0", "Left End", ChannelLineGrouping.OneChannelForEachLine);
            chRightEnd = ditask.DIChannels.CreateChannel("Dev1/port0/line1", "Right End", ChannelLineGrouping.OneChannelForEachLine);

            chMoveToLeft = dotask.DOChannels.CreateChannel("Dev1/port1/line0", "Move to the Left", ChannelLineGrouping.OneChannelForEachLine);
            chMoveToRight = dotask.DOChannels.CreateChannel("Dev1/port1/line1", "Move to the Right", ChannelLineGrouping.OneChannelForEachLine);

            chAngle = aitask.AIChannels.CreateVoltageChannel("Dev1/ai0", "Angle", AITerminalConfiguration.Rse, -10, 10, AIVoltageUnits.Volts);
            chPosition = aitask.AIChannels.CreateVoltageChannel("Dev1/ai1", "Position", AITerminalConfiguration.Rse, -10, 10, AIVoltageUnits.Volts);

            ditask.Start();
            dotask.Start();
            aitask.Start();

            digreader = new DigitalMultiChannelReader(ditask.Stream);
            digwriter = new DigitalMultiChannelWriter(dotask.Stream);
            anreader = new AnalogMultiChannelReader(aitask.Stream);
        }
コード例 #2
0
        private void ConfigureReadDI(int numberOfMeasurements, double sampleRate, bool triggerSense)
        {
            readDIsTask = new Task("readDIsTask");

            foreach (string inputName in digitalInputs)
            {
                DigitalInputChannel channel = (DigitalInputChannel)Environs.Hardware.DigitalInputChannels[inputName];
                channel.AddToTask(readDIsTask);
            }

            SampleClockActiveEdge       clockEdge   = SampleClockActiveEdge.Rising;
            DigitalEdgeStartTriggerEdge triggerEdge = triggerSense ? DigitalEdgeStartTriggerEdge.Rising : DigitalEdgeStartTriggerEdge.Falling;

            // Get the device that the analog inputs are on so we can use sample clock as well to sync timing
            string device = ((AnalogInputChannel)Environs.Hardware.AnalogInputChannels[analogInputs[0]]).Device;

            readDIsTask.Timing.ConfigureSampleClock(device + "/ai/SampleClock", sampleRate, clockEdge, SampleQuantityMode.FiniteSamples, numberOfMeasurements);
            readDIsTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger(device + "/ai/StartTrigger", triggerEdge);

            readDIsTask.Control(TaskAction.Verify);
            digitalReader = new DigitalMultiChannelReader(readDIsTask.Stream);

            // Commiting now apparently saves time when we actually run the task
            readDIsTask.Control(TaskAction.Commit);
        }
コード例 #3
0
        public void DAQDI()
        {
            NationalInstruments.DAQmx.Task digitalReadTask = DaqSystem.Local.LoadTask("Digital_Read_Multi");
            DigitalMultiChannelReader      DI_Channel      = new DigitalMultiChannelReader(digitalReadTask.Stream);

            do
            {
                Global.DI = DI_Channel.ReadSingleSampleSingleLine();
            } while (exit == false);
        }
コード例 #4
0
        /// <summary>
        /// Initializes the data reader board.
        /// </summary>
        internal DataControllerHulk()
        {
            logger.Info("Create: DataControllerHulk");

            // Create a task to check whether the PLC is OK

            checkPLCTask = new Task("CheckPLCTask");
            checkPLCTask.DIChannels.CreateChannel(ConfigurationManager.AppSettings["InputLineCheckPLC"],
                                                  "checkPLC", ChannelLineGrouping.OneChannelForEachLine);
            checkPLCTask.Timing.SampleTimingType   = SampleTimingType.OnDemand;
            checkPLCTask.Timing.SampleQuantityMode = SampleQuantityMode.ContinuousSamples;

            checkPLCReader = new DigitalSingleChannelReader(checkPLCTask.Stream);

            // Create a task to check the status of the safety light

            checkLightsTask = new Task("CheckLightsTask");
            checkLightsTask.DIChannels.CreateChannel(ConfigurationManager.AppSettings["InputLineCheckLights1"],
                                                     "checkLights1", ChannelLineGrouping.OneChannelForEachLine);
            checkLightsTask.DIChannels.CreateChannel(ConfigurationManager.AppSettings["InputLineCheckLights2"],
                                                     "checkLights2", ChannelLineGrouping.OneChannelForEachLine);
            checkLightsTask.Timing.SampleTimingType   = SampleTimingType.OnDemand;
            checkLightsTask.Timing.SampleQuantityMode = SampleQuantityMode.ContinuousSamples;

            checkLightsReader = new DigitalMultiChannelReader(checkLightsTask.Stream);

            // Create a task to check for MAYDAY signals

            checkMaydayTask = new Task("CheckMaydayTask");
            checkMaydayTask.DIChannels.CreateChannel(ConfigurationManager.AppSettings["InputLineCheckMayday1"],
                                                     "checkMayday1", ChannelLineGrouping.OneChannelForEachLine);
            checkMaydayTask.DIChannels.CreateChannel(ConfigurationManager.AppSettings["InputLineCheckMayday2"],
                                                     "checkMayday2", ChannelLineGrouping.OneChannelForEachLine);
            checkMaydayTask.Timing.SampleTimingType   = SampleTimingType.OnDemand;
            checkMaydayTask.Timing.SampleQuantityMode = SampleQuantityMode.ContinuousSamples;

            checkMaydayReader = new DigitalMultiChannelReader(checkMaydayTask.Stream);

            // Create a task for sending 'PC Ready' signals

            pcReadyTask = new Task("PCReadyTask");
            pcReadyTask.DOChannels.CreateChannel(ConfigurationManager.AppSettings["OutputLinePCReady"],
                                                 "pcReady", ChannelLineGrouping.OneChannelForEachLine);

            pcReadyWriter = new DigitalSingleChannelWriter(pcReadyTask.Stream);

            logger.Info("Data tasks initialized.");
        }
コード例 #5
0
ファイル: NIcDAQ.cs プロジェクト: alexdangles/tubes
 /// <summary>
 /// Perform DI task.
 /// </summary>
 /// <returns></returns>
 public bool[] DigitalRead()
 {
     if (digitalIn != null)
     {
         try
         {
             DigitalMultiChannelReader dr = new DigitalMultiChannelReader(digitalIn.Stream);
             return(dr.ReadSingleSampleSingleLine());
         }
         catch (DaqException de)
         {
             log.Write(de.Message);
         }
     }
     return(new bool[0]);
 }
コード例 #6
0
    public bool getLine(uint line)
    {
        Task      task        = new Task();
        string    devFullname = string.Format("{0}/port0/line{1}", name, line);
        DIChannel channel     = task.DIChannels.CreateChannel(devFullname, "", ChannelLineGrouping.OneChannelForEachLine);

        task.Start();
        DigitalMultiChannelReader reader = new DigitalMultiChannelReader(task.Stream);
        IAsyncResult result = reader.BeginReadSingleSamplePortUInt32(null, null);
        uint         value  = reader.EndReadSingleSamplePortUInt32(result).ElementAt(0);

        task.Stop();
        int shft = (int)line;

        return((value & (1u << shft)) == (1u << shft));
    }
コード例 #7
0
    public uint getPort()
    {
        Task      task        = new Task();
        string    devFullname = string.Format("{0}/port0/line0:31", name);
        DIChannel channel     = task.DIChannels.CreateChannel(devFullname, "", ChannelLineGrouping.OneChannelForEachLine);

        task.Start();
        DigitalMultiChannelReader reader = new DigitalMultiChannelReader(task.Stream);
        IAsyncResult result = reader.BeginReadSingleSamplePortUInt32(null, null);
        uint         value  = 0;
        var          bits   = reader.EndReadSingleSamplePortUInt32(result);

        foreach (uint bit in bits)
        {
            value += bit;
        }
        task.Stop();
        return(value);
    }
コード例 #8
0
        private IEnumerable<KeyValuePair<Channel, double[]>> ReadDigital(IList<Channel> input, int nsamples,
                                                                         CancellationToken token)
        {
            if (input.Count != DAQTasks.DIChannels.Count)
                throw new DaqException("Digital input count must match the number of configured digital channels.");

            int nIn = 0;

            var inputSamples = new UInt32[input.Count, 2 * nsamples];

            int transferBlock = Math.Min(nsamples, TRANSFER_BLOCK_SAMPLES);
            var inputData = new UInt32[input.Count, transferBlock];

            var reader = new DigitalMultiChannelReader(DAQTasks.DIStream);
            var ar = reader.BeginMemoryOptimizedReadMultiSamplePortUInt32(transferBlock, null, null, inputData);

            while (nIn < nsamples && input.Any())
            {
                if (token.IsCancellationRequested)
                    break;

                bool blockAvailable = DAQTasks.DIStream.AvailableSamplesPerChannel >= transferBlock;
                if (blockAvailable)
                {
                    int nRead;
                    inputData = reader.EndMemoryOptimizedReadMultiSamplePortUInt32(ar, out nRead);

                    for (int i = 0; i < input.Count; i++)
                    {
                        for (int j = 0; j < nRead; j++)
                        {
                            inputSamples[i, nIn + j] = inputData[i, j];
                        }
                    }
                    nIn += nRead;

                    if (nIn < nsamples)
                    {
                        ar = reader.BeginMemoryOptimizedReadMultiSamplePortUInt32(transferBlock, null, null, inputData);
                    }
                }
            }

            var result = new Dictionary<Channel, double[]>();
            var chans = DAQTasks.DIChannels.Cast<DIChannel>().ToList();

            foreach (Channel i in input)
            {
                var inData = new double[nIn];
                int chanIndex = chans.FindIndex(c => c.PhysicalName == i.PhysicalName);

                for (int j = 0; j < nIn; j++)
                {
                    inData[j] = inputSamples[chanIndex, j];
                }

                result[i] = inData;
            }

            return result;
        }