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); }
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); }
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); }
/// <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."); }
/// <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]); }
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)); }
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); }
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; }