/// <summary> /// creates a new read channel suckaz /// </summary> /// <param name="channelName"></param> /// <param name="isCounter"></param> public void CreateReadTask() { DestroyReaderTask(); ReaderWaitHandle = new System.Threading.ManualResetEvent(true); ReaderTask = new Task("IntensityReader"); ReaderTask.SynchronizeCallbacks = SynchronizeCallbacks; ReaderTask.Stream.Timeout = Timeout; // Creates Input Channel task after checking channel type string cname = new String(ChannelName.Where(Char.IsLetter).ToArray()); if (!IsCounter) { this.ReaderTask.AIChannels.CreateVoltageChannel(ChannelName, "IntensityReader " + cname, AITerminalConfiguration.Differential, -10, 10, AIVoltageUnits.Volts); AnalogReader = new AnalogMultiChannelReader(ReaderTask.Stream); AnalogReader.SynchronizeCallbacks = SynchronizeCallbacks; } else { this.ReaderTask.CIChannels.CreateCountEdgesChannel(ChannelName, "CounterReader " + cname, CICountEdgesActiveEdge.Rising, 10, CICountEdgesCountDirection.Up); this.ReaderTask.CIChannels.All.CountEdgesTerminal = InputTerminal; this.ReaderTask.CIChannels.All.CountEdgesCountResetTerminal = "/CARD/PFI0"; CounterReader = new CounterMultiChannelReader(ReaderTask.Stream); CounterReader.SynchronizeCallbacks = SynchronizeCallbacks; } LastReadDataChunk = null; // configureing the clock. ReaderTask.Timing.ConfigureSampleClock(TimeBaseTerminal, SamplingFrequency, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples); ReaderTask.Control(TaskAction.Verify); }
private void btnStart_Click(object sender, EventArgs e) { try { #region NNInit IDMotorExperiment _experiment = new IDMotorExperiment(); xmlConfig = new XmlDocument(); xmlConfig.Load("IDMotor.config.xml"); _experiment.Initialize("IDMotor", xmlConfig.DocumentElement); _activationScheme = ExperimentUtils.CreateActivationScheme(xmlConfig.DocumentElement, "Activation"); XmlReader xr = XmlReader.Create(genomeFile); List <NeatGenome> _genomeList = _experiment.LoadPopulation(xr); _genomeDecoder = new NeatGenomeDecoder(_activationScheme); neatGenome = _genomeList[0]; box = _genomeDecoder.Decode(neatGenome); #endregion if (chkMotor.Checked) { #region Encoder Init digitalTask = new Task("digitalTask"); double zIndexValue = Convert.ToDouble(zIndexValueTextBox.Text); int pulsePerRev = Convert.ToInt32(pulsePerRevTextBox.Text); zIndexEnable = zIndexEnabledCheckBox.Checked; switch (decodingTypeComboBox.SelectedIndex) { case 0: //X1 encoderType = CIEncoderDecodingType.X1; break; case 1: //X2 encoderType = CIEncoderDecodingType.X2; break; case 2: //X4 encoderType = CIEncoderDecodingType.X4; break; } switch (zIndexPhaseComboBox.SelectedIndex) { case 0: //A High B High encoderPhase = CIEncoderZIndexPhase.AHighBHigh; break; case 1: //A High B Low encoderPhase = CIEncoderZIndexPhase.AHighBLow; break; case 2: //A Low B High encoderPhase = CIEncoderZIndexPhase.ALowBHigh; break; case 3: //A Low B Low encoderPhase = CIEncoderZIndexPhase.ALowBLow; break; } digitalTask.CIChannels.CreateAngularEncoderChannel(counterComboBox.Text, "", encoderType, zIndexEnable, zIndexValue, encoderPhase, pulsePerRev, 0.0, CIAngularEncoderUnits.Radians); digitalTask.Control(TaskAction.Verify); digitalReader = new CounterMultiChannelReader(digitalTask.Stream); digitalTask.Start(); #endregion #region Vout Init waveTask = new Task("ControlVoltageTask"); waveTask.AOChannels.CreateVoltageChannel(physicalChannelComboBox.Text, "", Convert.ToDouble(minimumTextBox.Text), Convert.ToDouble(maximumTextBox.Text), AOVoltageUnits.Volts); // verify the task before doing the waveform calculations waveTask.Control(TaskAction.Verify); writer = new AnalogSingleChannelWriter(waveTask.Stream); waveTask.Start(); #endregion } box.ResetState(); actualPos = 0; n = 0; tmrRefresh.Enabled = true; btnStart.Enabled = false; btnStopDemo.Enabled = true; motorPos = 0; ti = DateTime.Now; ta = ti; if (csFile != null && ControlSignal == null) { ControlSignal = unpackControlSignal(csFile); } i = 0; if (!chckBoxWarmUp.Checked) { csvWriter = new StreamWriter(dataFile); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }