示例#1
0
        public void Post()
        {
            //FORWARD WHEELCHAIR
            double Voltagevalue0, Voltagevalue1;

            Voltagevalue0 = 2.77;
            Voltagevalue1 = 2.5;

            NationalInstruments.DAQmx.Task analogOut0 = new NationalInstruments.DAQmx.Task();
            NationalInstruments.DAQmx.Task analogOut1 = new NationalInstruments.DAQmx.Task();

            AOChannel ChanelAO0, ChanelAO1;

            ChanelAO0 = analogOut0.AOChannels.CreateVoltageChannel("dev2/ao0", "ChanelAO0", 0, 5, AOVoltageUnits.Volts);
            ChanelAO1 = analogOut1.AOChannels.CreateVoltageChannel("dev2/ao1", "ChanelAO1", 0, 5, AOVoltageUnits.Volts);

            AnalogSingleChannelWriter writer0 = new AnalogSingleChannelWriter(analogOut0.Stream);

            writer0.WriteSingleSample(true, Voltagevalue0);


            AnalogSingleChannelWriter writer1 = new AnalogSingleChannelWriter(analogOut1.Stream);

            writer1.WriteSingleSample(true, Voltagevalue1);
        }
 public override void AcquisitionStarting()
 {
     // initialise the output hardware
     outputTask = new Task("analog output");
     if (!Environs.Debug)
     {
         AnalogOutputChannel oc =
             (AnalogOutputChannel) Environs.Hardware.AnalogOutputChannels[(string)settings["channel"]];
         oc.AddToTask(outputTask, oc.RangeLow, oc.RangeHigh);
         writer = new AnalogSingleChannelWriter(outputTask.Stream);
         writer.WriteSingleSample(true, 0);
     }
     scanParameter = 0;
     //go gently to the correct start position
     if ((string)settings["scanMode"] == "up" || (string)settings["scanMode"] == "updown")
     {
         if ((string)settings["flyback"] == "overshoot") rampOutputToVoltage((double)settings["overshootVoltage"]);
         rampOutputToVoltage((double)settings["start"]);
     }
     if ((string)settings["scanMode"] == "down" || (string)settings["scanMode"] == "downup")
     {
         if ((string)settings["flyback"] == "overshoot") rampOutputToVoltage((double)settings["overshootVoltage"]);
         rampOutputToVoltage((double)settings["end"]);
     }
 }
示例#3
0
        internal ChannelOutput(double samplingRate, double outputRefreshTime, double inputRefreshTime, Task spikeTask, String NIDevice, int NIChannel)
        {
            //Compute buffer length, instantiate buffer
            int multiple = (int)(Math.Round(outputRefreshTime / inputRefreshTime)); //Get number of input buffer reads that approximate the desired output rate

            if (multiple < 1)
            {
                multiple = 1;                                                             //Ensure the multiple is at least 1
            }
            int bufferLength = (int)((double)multiple * inputRefreshTime * samplingRate); //Calculate length

            buffer = new double[bufferLength];

            //Create new task
            analogOutputTask = new Task("Playback Analog Output Task");
            analogOutputTask.AOChannels.CreateVoltageChannel(NIDevice + "/ao" + NIChannel, "",
                                                             -10.0, 10.0, AOVoltageUnits.Volts);
            analogOutputTask.Timing.ReferenceClockSource = spikeTask.Timing.ReferenceClockSource;
            analogOutputTask.Timing.ReferenceClockRate   = spikeTask.Timing.ReferenceClockRate;
            analogOutputTask.Timing.ConfigureSampleClock("", samplingRate,
                                                         SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, bufferLength);
            analogOutputTask.Control(TaskAction.Verify);

            //Create writer
            analogOutputWriter = new AnalogSingleChannelWriter(analogOutputTask.Stream);
            analogOutputWriter.SynchronizeCallbacks = false;
        }
示例#4
0
        public void shot()
        {
            try
            {
                using (Task myTask = new Task())
                {
                    if (checkShot())
                    {
                        myTask.AOChannels.CreateVoltageChannel("Dev1", "aoChannel",
                                                               Convert.ToDouble(-10), Convert.ToDouble(10),
                                                               AOVoltageUnits.Volts);

                        AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(myTask.Stream);

                        writer.WriteSingleSample(true, Convert.ToDouble(0));
                        System.Threading.Thread.Sleep(1);
                        writer.WriteSingleSample(true, Convert.ToDouble(5));
                        System.Threading.Thread.Sleep(1);
                        writer.WriteSingleSample(true, Convert.ToDouble(0));
                        shotAvailable = false;

                        //Timer On
                        // Create a timer with 2.5 sec interval.
                        aTimer = new System.Timers.Timer(2500);
                        // Hook up the Elapsed event for the timer.
                        aTimer.Elapsed  += OnTimedEvent;
                        aTimer.AutoReset = false;
                        aTimer.Enabled   = true;
                    }
                }
            }
            catch (DaqException ex)
            {
            }
        }
示例#5
0
        public void Apply_Voltage(Parameters Parameters_Instance, double voltage)
        {
            MainWindow.WindowInstance.Dispatcher.BeginInvoke(new MainWindow.Append_Log_Delegate(MainWindow.WindowInstance.Append_Log),
                                                             "Applling voltage " + voltage.ToString() + "\n"
                                                             );
            try
            {
                outputTask = new Task("OutputTask");
                outputTask.AOChannels.CreateVoltageChannel(Parameters_Instance.Output_Channel,
                                                           "",
                                                           Parameters_Instance.Output_Channel_MinVoltage,
                                                           Parameters_Instance.Output_Channel_MaxVoltage,
                                                           AOVoltageUnits.Volts);

                outputTask.Control(TaskAction.Verify);
                // TODO:: check if timing is necessary
                Output_Writer_Single = new AnalogSingleChannelWriter(outputTask.Stream);
                Output_Writer_Single.WriteSingleSample(true, voltage);
                outputTask.Done += new TaskDoneEventHandler(Apply_Voltage_Done);
            }
            catch (Exception ex)
            {
                StopTask();
                MessageBox.Show(ex.Message);
            } finally
            {
                if (outputTask != null)
                {
                    outputTask.Stop(); outputTask.Dispose(); outputTask = null;
                }
            }
        }
        private void bgwGetWL_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            // Do the work (i.e. get the wavelength)
            while (true)
            {
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    Wavelength   = CLGetLambdaReading(HandleBristolWavemeter);
                    PiezoVoltage = ReaderAI.ReadSingleSample();
                    if (IsLockEnabled)
                    {
                        double newPiezoVoltage = LaserLockPID.AddDataPoint(Wavelength, BristolWavemeter.Properties.Settings.Default.AcquisitionPeriod, PiezoVoltage);
                        using (Task myTask = new Task())
                        {
                            myTask.AOChannels.CreateVoltageChannel(string.Format("dev1/ao{0}", Properties.Settings.Default.AnalogOutputPiezo), "PiezoVoltageAO", -3, 3, AOVoltageUnits.Volts);
                            AnalogSingleChannelWriter myWriter = new AnalogSingleChannelWriter(myTask.Stream);
                            myWriter.WriteSingleSample(true, Convert.ToDouble(newPiezoVoltage));
                        }
                        IsLocked = (Math.Abs(LaserLockPID.LastWavelengthError) < Properties.Settings.Default.LockThreshold);
                        labelPiezoVoltage.ForeColor = (Math.Abs(newPiezoVoltage) >= 2.9) ? Color.Red : Color.Black;
                    }
                    worker.ReportProgress(5);   // report 5% progress
                    Thread.Sleep(BristolWavemeter.Properties.Settings.Default.AcquisitionPeriod);
                }
            }
        }
示例#7
0
 public override void AcquisitionStarting()
 {
     // initialise the output hardware
     outputTask = new Task("analog output");
     if (!Environs.Debug)
     {
         AnalogOutputChannel oc =
             (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[(string)settings["channel"]];
         oc.AddToTask(outputTask, oc.RangeLow, oc.RangeHigh);
         writer = new AnalogSingleChannelWriter(outputTask.Stream);
         writer.WriteSingleSample(true, 0);
     }
     scanParameter = 0;
     //go gently to the correct start position
     if ((string)settings["scanMode"] == "up" || (string)settings["scanMode"] == "updown")
     {
         if ((string)settings["flyback"] == "overshoot")
         {
             rampOutputToVoltage((double)settings["overshootVoltage"]);
         }
         rampOutputToVoltage((double)settings["start"]);
     }
     if ((string)settings["scanMode"] == "down" || (string)settings["scanMode"] == "downup")
     {
         if ((string)settings["flyback"] == "overshoot")
         {
             rampOutputToVoltage((double)settings["overshootVoltage"]);
         }
         rampOutputToVoltage((double)settings["end"]);
     }
 }
示例#8
0
        public override void AcquisitionStarting()
        {
            //connect to the hardware controller
            hardwareControl = new DecelerationHardwareControl.Controller();

            // initialise the output hardware, full scale -10 to 10 volts
            outputTask = new Task("analog output");
            if (!Environs.Debug)
            {
                AnalogOutputChannel oc =
                    (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[(string)settings["channel"]];
                oc.AddToTask(outputTask, -10, 10);
                writer = new AnalogSingleChannelWriter(outputTask.Stream);
                if (!Blocked())
                {
                    writer.WriteSingleSample(true, 0);
                }
            }
            scanParameter = 0;
            //go gently to the correct start position
            if (((string)settings["scanMode"] == "up" || (string)settings["scanMode"] == "updown") && !Blocked())
            {
                rampOutputToVoltage((double)settings["start"]);
            }
            if (((string)settings["scanMode"] == "down" || (string)settings["scanMode"] == "downup") && !Blocked())
            {
                rampOutputToVoltage((double)settings["end"]);
            }
        }
示例#9
0
        /// <summary>
        /// Method for outputing a voltage on the DAQ
        /// </summary>
        /// <param name="task">NI-DAQ output task</param>
        /// <param name="voltage">Voltage to output.
        /// Note must be between the limits outMax and outMin.
        /// The range is limited elsewhere in the code</param>
        private void SetAnalogOutput(Task task, double voltage)
        {
            AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(task.Stream);

            writer.WriteSingleSample(true, voltage);
            task.Control(TaskAction.Unreserve);
        }
示例#10
0
        /// <summary>
        /// Start a constant output by the DAQ device. This function starts a task named "OutputTask",
        /// Don't forget to stop it when it's no longer needed.
        /// </summary>
        /// <param name="voltage">the requested voltage to apply</param>
        public void StartConstantOutputTask(double voltage)
        {
            int samplesPerChannel = 2500;
            int sampleRate = 2500;

            //
            // generate output array 
            //
            m_functionGenerator = new FunctionGenerator(samplesPerChannel, voltage, voltage);
            
            //
            // get the properties required for the output task
            //
            ContinuousAOTaskProperties outputProperties = new ContinuousAOTaskProperties(null, sampleRate, samplesPerChannel, voltage);
            
            //
            // create the output task
            //
            m_outputTask = m_daqController.CreateContinuousAOTask(outputProperties);

            //
            // create the writer of the output task
            //
            writer = new AnalogSingleChannelWriter(m_outputTask.Stream);

            //
            // write static voltage
            //
            writer.WriteMultiSample(true, m_functionGenerator.ConstWave);
        }
示例#11
0
        /// <summary>
        /// Starts laser read and write tasks
        /// </summary>
        static void StartLaserTasks()
        {
            _laserWriteTask = new System.Threading.Tasks.Task(() =>
            {
                Task writeTask        = new Task("LaserWrite");
                double[] firstSamples = LaserFunction(0, _rate);
                writeTask.AOChannels.CreateVoltageChannel("Dev2/AO2", "", 0, 10, AOVoltageUnits.Volts);
                writeTask.Timing.ConfigureSampleClock("", _rate, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples);
                writeTask.Stream.WriteRegenerationMode = WriteRegenerationMode.DoNotAllowRegeneration;
                AnalogSingleChannelWriter dataWriter   = new AnalogSingleChannelWriter(writeTask.Stream);
                dataWriter.WriteMultiSample(false, firstSamples);
                writeTask.Start();
                long start_sample = _rate;
                while (!_writeStop.WaitOne(100))
                {
                    double[] samples = LaserFunction(start_sample, _rate);
                    if (samples == null)
                    {
                        break;
                    }
                    dataWriter.WriteMultiSample(false, samples);
                    start_sample += _rate;
                }
                writeTask.Dispose();
                Task resetTask = new Task("LaserReset");
                resetTask.AOChannels.CreateVoltageChannel("Dev2/AO2", "", 0, 10, AOVoltageUnits.Volts);
                AnalogSingleChannelWriter resetWriter = new AnalogSingleChannelWriter(resetTask.Stream);
                resetWriter.WriteSingleSample(true, 0);
                resetTask.Dispose();
            });

            _laserReadTask = new System.Threading.Tasks.Task(() =>
            {
                Task read_task = new Task("laserRead");
                read_task.AIChannels.CreateVoltageChannel("Dev2/ai16", "Laser", AITerminalConfiguration.Differential, -10, 10, AIVoltageUnits.Volts);
                read_task.Timing.ConfigureSampleClock("", _rate, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples);
                read_task.Start();
                AnalogSingleChannelReader laser_reader = new AnalogSingleChannelReader(read_task.Stream);
                while (!_readStop.WaitOne(10))
                {
                    var nsamples = read_task.Stream.AvailableSamplesPerChannel;
                    if (nsamples >= 10)
                    {
                        double[] read = laser_reader.ReadMultiSample((int)nsamples);
                        lock (_laser_aiv_lock)
                        {
                            foreach (double d in read)
                            {
                                //Simple exponential smoother
                                _laser_aiv = 0.9 * _laser_aiv + 0.1 * d;
                            }
                        }
                    }
                }
                read_task.Dispose();
            });
            _laserWriteTask.Start();
            _laserReadTask.Start();
        }
示例#12
0
 public void setupMasterVoltageOut()
 {
     masterOutputTask = new Task("rampfeedback");
     masterChannel    = (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels["rampfb"];
     masterChannel.AddToTask(masterOutputTask, masterChannel.RangeLow, masterChannel.RangeHigh);
     masterOutputTask.Control(TaskAction.Verify);
     masterWriter = new AnalogSingleChannelWriter(masterOutputTask.Stream);
 }
        public BristolWavemeterApplication()
        {
            InitializeComponent();
            MainThread = this;
            //int dllVersion = CLGetDllVersion(); // had to change the target system to x64 (from x86) to make this work, weird (?)
            HandleBristolWavemeter = CLOpenUSBSerialDevice(Properties.Settings.Default.WavemeterCOMPort);   // returns a handle to the Bristol Wavemeter (CL device)
            bgwGetWL.WorkerSupportsCancellation = true;
            bgwGetWL.WorkerReportsProgress      = true;

            TaskAI = new Task();
            TaskAI.AIChannels.CreateVoltageChannel(string.Format("dev1/ai{0}", Properties.Settings.Default.AnalogInputPiezo), "PiezoVoltageAI", AITerminalConfiguration.Differential, -3, 3, AIVoltageUnits.Volts);
            ReaderAI = new AnalogSingleChannelReader(TaskAI.Stream);

            TaskAO = new Task();
            TaskAO.AOChannels.CreateVoltageChannel(string.Format("dev1/ao{0}", Properties.Settings.Default.AnalogOutputPiezo), "PiezoVoltageAO", -3, 3, AOVoltageUnits.Volts);
            //TaskAO.Timing.ConfigureSampleClock("", sampleRate, SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, numberOfSamples);    // I'm asking for 100 Hz, it is 1000 Hz
            WriterAO = new AnalogSingleChannelWriter(TaskAO.Stream);

            // remoting server
            ServiceHost Host;

            try
            {
                Host = new ServiceHost(typeof(WavemeterMATLABObject), new Uri[] { new Uri(String.Format("net.tcp://localhost:{0}", Properties.Settings.Default.ServerPort)) });
                Host.AddServiceEndpoint(typeof(IWavemeterMATLABObject), new NetTcpBinding(SecurityMode.None), Properties.Settings.Default.ServerName);
                Host.Open();
            }
            catch (Exception e) { MessageBox.Show(this, e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }


            //Data series for the chart
            series1 = new System.Windows.Forms.DataVisualization.Charting.Series
            {
                Name              = "Series1",
                Color             = System.Drawing.Color.Teal,
                IsVisibleInLegend = false,
                IsXValueIndexed   = true,
                ChartType         = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline
            };
            chart1.Series.Add(series1);
            chart1.ChartAreas[0].AxisY.Maximum           = 1570;
            chart1.ChartAreas[0].AxisY.Minimum           = 1520;
            chart1.ChartAreas[0].AxisY.LabelStyle.Format = "###0.0000";

            //Setup the PID controller and interface
            LaserLockPID                       = new WavemeterPID();
            LaserLockPID.G                     = Properties.Settings.Default.G;
            numericUpDownPIDGain.Value         = Convert.ToDecimal(Properties.Settings.Default.G);
            LaserLockPID.Kp                    = Properties.Settings.Default.Kp;
            numericUpDownPIDProportional.Value = Convert.ToDecimal(Properties.Settings.Default.Kp);
            LaserLockPID.Kd                    = Properties.Settings.Default.Kd;
            numericUpDownPIDDerivative.Value   = Convert.ToDecimal(Properties.Settings.Default.Kd);
            LaserLockPID.Ki                    = Properties.Settings.Default.Ki;
            numericUpDownPIDIntegral.Value     = Convert.ToDecimal(Properties.Settings.Default.Ki);

            //System.Media.SoundPlayer mySoundPlayer = new System.Media.SoundPlayer(LINQS.BristolWavemeter.Properties.Resources.LINQStartupSound);
            //mySoundPlayer.Play();
        }
 public void ConfigureCavityScan(int numberOfSteps, bool autostart)
 {
     outputCavityTask = new Task("CavityPiezoVoltage");
     cavityChannel =
                 (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[cavityChannelName];
     cavityChannel.AddToTask(outputCavityTask, 0, 10);
     outputCavityTask.Control(TaskAction.Verify);
     cavityWriter = new AnalogSingleChannelWriter(outputCavityTask.Stream);
 }
 public void ConfigureCavityScan(int numberOfSteps, bool autostart)
 {
     outputCavityTask = new Task("CavityPiezoVoltage");
     cavityChannel    =
         (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[cavityChannelName];
     cavityChannel.AddToTask(outputCavityTask, 0, 10);
     outputCavityTask.Control(TaskAction.Verify);
     cavityWriter = new AnalogSingleChannelWriter(outputCavityTask.Stream);
 }
示例#16
0
        public int WriteAnalogChannel(string lines, string name, int freq, int samples, int cycles, string sigtype, double ampl, double min, double max)
        {
            int       res             = 0;
            Task      analogWriteTask = new Task();
            AOChannel ch;

            if (max == 0)
            {
                max = 10;
            }

            try
            {
                // Create the task and channel
                //myTask = New Task()
                ch = analogWriteTask.AOChannels.CreateVoltageChannel(lines, "", min, max, AOVoltageUnits.Volts);

                // Verify the task before doing the waveform calculations
                analogWriteTask.Control(TaskAction.Verify);

                // Calculate some waveform parameters and generate data
                //Dim fGen As New FunctionGenerator( _
                //    analogWriteTask.Timing, _
                //    freq.ToString, _
                //    samples.ToString, _
                //    cycles.ToString, _
                //    sigtype, _
                //    ampl.ToString)

                //Configure the sample clock with the calculated rate
                //analogWriteTask.Timing.ConfigureSampleClock( _
                //    "", _
                //    fGen.ResultingSampleClockRate, _
                //    SampleClockActiveEdge.Rising, _
                //    SampleQuantityMode.ContinuousSamples, 1000)

                // Write the data to the buffer
                AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(analogWriteTask.Stream);
                //writer.WriteMultiSample(False, fGen.Data)
                //Dim res As IAsyncResult
                //res = writer.BeginWriteMultiSample(False, fGen.Data, AddressOf _WriteAnalogChannelComplete, 0)
                analogWriteTask.Start();
                writer.WriteSingleSample(false, 2.5);

                //Start writing out data
                //analogWriteTask.Start()
                analogWriteTask.Stop();
            }
            catch (DaqException ex) {
                DaqError(ex.Message);
                res = -1;
            }
            finally {
                analogWriteTask.Dispose();
            }
            return(res);
        }
示例#17
0
        public void RunDAQ()
        {
            DigitalEdgeStartTriggerEdge triggerEdge = DigitalEdgeStartTriggerEdge.Rising;

            try
            {
                string s = string.Empty;
                s          = _name == "/ai1" ? "etalon" : "measured";
                inputTask  = new NationalInstruments.DAQmx.Task(s);
                outputTask = new NationalInstruments.DAQmx.Task(s + "_output");

                inputTask.AIChannels.CreateVoltageChannel(sInputName, "", AITerminalConfiguration.Pseudodifferential, inputDAQMinValue, inputDAQMaxValue, AIVoltageUnits.Volts);
                outputTask.AOChannels.CreateVoltageChannel(sOutputName, "", outputDAQMinValue, outputDAQMaxValue, AOVoltageUnits.Volts);

                inputTask.Timing.ConfigureSampleClock("", dRateIO, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, iInputOutputSamples);
                outputTask.Timing.ConfigureSampleClock("", dRateIO, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, iInputOutputSamples);

                outputTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger(terminalNameBase + "ai/StartTrigger", triggerEdge);

                inputTask.Control(TaskAction.Verify);
                outputTask.Control(TaskAction.Verify);

                outputData = fGen.Data;

                writer = new AnalogSingleChannelWriter(outputTask.Stream);
                writer.WriteMultiSample(false, outputData);

                StartTask();
                outputTask.Start();
                inputTask.Start();

                //inputCallback = new AsyncCallback(InputReady);
                reader = new AnalogSingleChannelReader(inputTask.Stream);


                //------------ТЕСТОВЫЙ КУСОК------------ ЧТЕНИЕ В ЭТОМ ЖЕ ПОТОКЕ--
                double[] data = reader.ReadMultiSample(iInputOutputSamples);

                BufReadDAQReceived?.Invoke(data);
                StopTask();
                //----------------------------------------------------------------



                /*// Use SynchronizeCallbacks to specify that the object
                 * // marshals callbacks across threads appropriately.
                 * reader.SynchronizeCallbacks = bSynchronizeCallbacks;
                 *
                 * reader.BeginReadMultiSample(iInputOutputSamples, inputCallback, inputTask);*/
            }
            catch (Exception ex)
            {
                StopTask();
                WarningDAQUpdate?.Invoke(ex.Message);
            }
        }
        public TemperatureController(double timeStep, string tempUnits, string aiChannel, AIVoltageUnits aiUnits, string aoChannel, AOVoltageUnits aoUnits) : base(timeStep)
        {
            sensor    = new TempSensor(aiChannel, aiUnits, tempUnits);
            writeTask = new NationalInstruments.DAQmx.Task();
            writer    = new AnalogSingleChannelWriter(writeTask.Stream);

            writeTask.AOChannels.CreateVoltageChannel(aoChannel, "", -10.0, 10.0, aoUnits);

            sensor.TemperatureCoefficient = 0.01; //temperature controller inherently contains a temp sensor with 0.01mV/K coefficient
        }
示例#19
0
        private void configureAnalogOutput()
        {
            analogOutputTask = new Task("phase lock analog output");
            AnalogOutputChannel outputChannel =
                (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels["phaseLockAnalogOutput"];

            outputChannel.AddToTask(analogOutputTask, VCO_LOW, VCO_HIGH);
            analogWriter = new AnalogSingleChannelWriter(analogOutputTask.Stream);
            analogWriter.WriteSingleSample(true, VCO_CENTRAL);                     // start out with the central value
        }
 public override void AcquisitionStarting()
 {
     if (!Environs.Debug)
     {
         analogTask = new Task(Channel);
         ((AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[Channel]).AddToTask(analogTask, 0, 5);
         analogTask.Control(TaskAction.Verify);
         writer = new AnalogSingleChannelWriter(analogTask.Stream);
     }
 }
示例#21
0
 //set Analog AO0 - voltage level
 public void set_voltage_AO(double volt_AO)
 {
     using (Task myTask = new Task())
     {
         AOChannel myAOChannel;
         myAOChannel = myTask.AOChannels.CreateVoltageChannel("dev1/ao0", "myAOChannel", 0, 5, AOVoltageUnits.Volts);
         AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(myTask.Stream);
         writer.WriteSingleSample(true, volt_AO);
     }
 }
示例#22
0
 public override void AcquisitionStarting()
 {
     if (!Environs.Debug)
     {
         analogTask = new Task(Channel);
         ((AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[Channel]).AddToTask(analogTask, 0, 5);
         analogTask.Control(TaskAction.Verify);
         writer = new AnalogSingleChannelWriter(analogTask.Stream);
     }
 }
 //This takes in a voltage. A bit cheezy, but I needed the laser
 // voltage to be set as soon value as soon as it gets configured.
 public void ConfigureSetLaserVoltage(double voltage)
 {
     outputLaserTask = new Task("FeedbackToLaser" + laserChannelName);
     laserChannel =
             (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[laserChannelName];
     laserChannel.AddToTask(outputLaserTask, laserChannel.RangeLow, laserChannel.RangeHigh);
     outputLaserTask.Control(TaskAction.Verify);
     laserWriter = new AnalogSingleChannelWriter(outputLaserTask.Stream);
     laserWriter.WriteSingleSample(true, voltage);
     //outputLaserTask.Start();
 }
示例#24
0
 public DaqAo(string channel)
 {
     _myAoChannel = _analogOutTask.AOChannels.CreateVoltageChannel(
         "dev3/" + channel,
         "myAOChannel",
         0,
         5,
         AOVoltageUnits.Volts
         );
     _writer = new AnalogSingleChannelWriter(_analogOutTask.Stream);
 }
示例#25
0
 //This takes in a voltage. A bit cheezy, but I needed the laser
 // voltage to be set as soon value as soon as it gets configured.
 public void ConfigureSetLaserVoltage(double voltage)
 {
     outputLaserTask = new Task("FeedbackToLaser");
     laserChannel    =
         (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[laserChannelName];
     laserChannel.AddToTask(outputLaserTask, -10, 10);
     outputLaserTask.Control(TaskAction.Verify);
     laserWriter = new AnalogSingleChannelWriter(outputLaserTask.Stream);
     laserWriter.WriteSingleSample(true, voltage);
     outputLaserTask.Start();
 }
示例#26
0
        private static void WriteAnalog(Task task, double voltage)
        {
            if (disposed)
            {
                return;
            }

            AnalogSingleChannelWriter write = new AnalogSingleChannelWriter(task.Stream);

            write.BeginWriteSingleSample(true, voltage, null, null);
        }
示例#27
0
        public void SetValue(double analogDataOut)
        {
            Task      analogOutTask = new Task();
            AOChannel myAOChannel;

            myAOChannel = analogOutTask.AOChannels.CreateVoltageChannel("dev31/ao0", "myAOChannel", 0, 5, AOVoltageUnits.Volts);
            AnalogSingleChannelWriter writer = new
                                               AnalogSingleChannelWriter(analogOutTask.Stream);

            writer.WriteSingleSample(true, analogDataOut);
        }
示例#28
0
 public SDLPS500Controller(string device, string aoName)
 {
     _controlOutput  = 0;
     _powerCashValid = true;
     _powerCashed    = 0;
     //Set up task and channel writer
     _aoTask = new Task("LaserOutput");
     _aoTask.AOChannels.CreateVoltageChannel(device + "/" + aoName, "LasOut", 0, 5, AOVoltageUnits.Volts);
     _aoWriter = new AnalogSingleChannelWriter(_aoTask.Stream);
     //Set output to 0
     _aoWriter.WriteSingleSample(true, 0);
 }
示例#29
0
        public void SetGain(double gain)
        {
            var niTask       = new NationalInstruments.DAQmx.Task();
            var analogOutput = niTask.AOChannels.CreateVoltageChannel(
                "Dev8/ao0",
                "SetGain",
                0,
                5,
                AOVoltageUnits.Volts
                );
            var writer = new AnalogSingleChannelWriter(niTask.Stream);

            writer.WriteSingleSample(true, gain);
        }
示例#30
0
        public void SetSetPoint(double temperature)
        {
            var gain         = PlantCalculations.CalcTemperatureToVolt(temperature);
            var niTask       = new NationalInstruments.DAQmx.Task();
            var analogOutput = niTask.AOChannels.CreateVoltageChannel(
                "Dev9/ao1",
                "SV",
                1,
                5,
                AOVoltageUnits.Volts
                );
            var writer = new AnalogSingleChannelWriter(niTask.Stream);

            writer.WriteSingleSample(true, Math.Min(Math.Max(gain, 1), 5));
        }
示例#31
0
        public override void TryInitialize()
        {
            try
            {
                _daqTask.AOChannels.CreateVoltageChannel(PhysicalChannelName, nameToAssignChannel: PhysicalChannelName,
                                                         minimumValue, maximumValue, units);
                DaqStream stream = _daqTask.Stream ?? throw new DaqException(Constants.ErrorMessages.INVALID_STREAM);

                _writer            = new AnalogSingleChannelWriter(stream);
                this.IsInitialized = true;
            }
            catch (DaqException ex)
            {
                Stop(ex);
            }
        }
示例#32
0
        /// <summary>
        /// Включение постоянной генерации сигнала. Чтение и контроль ошибок при этом производится в CALLBACK. Для завершения генерации используй метод StopDAQGeneration()
        /// </summary>
        public void RunDAQGeneration()
        {
            DigitalEdgeStartTriggerEdge triggerEdge = DigitalEdgeStartTriggerEdge.Rising;

            try
            {
                string s = string.Empty;
                s          = _name == "/ai1" ? "etalon" : "measured";
                inputTask  = new NationalInstruments.DAQmx.Task(s);
                outputTask = new NationalInstruments.DAQmx.Task(s + "_output");

                inputTask.AIChannels.CreateVoltageChannel(sInputName, "", AITerminalConfiguration.Pseudodifferential, inputDAQMinValue, inputDAQMaxValue, AIVoltageUnits.Volts);
                outputTask.AOChannels.CreateVoltageChannel(sOutputName, "", outputDAQMinValue, outputDAQMaxValue, AOVoltageUnits.Volts);

                inputTask.Timing.ConfigureSampleClock("", dRateIO, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, iInputOutputSamples);
                outputTask.Timing.ConfigureSampleClock("", dRateIO, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, iInputOutputSamples);

                outputTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger(terminalNameBase + "ai/StartTrigger", triggerEdge);

                inputTask.Control(TaskAction.Verify);
                outputTask.Control(TaskAction.Verify);

                outputData = fGen.Data;

                writer = new AnalogSingleChannelWriter(outputTask.Stream);
                writer.WriteMultiSample(false, outputData);

                StartTask();
                outputTask.Start();
                //inputTask.Start();

                inputCallback = new AsyncCallback(AnalogInCallback);
                reader        = new AnalogSingleChannelReader(inputTask.Stream);
                reader.SynchronizeCallbacks = true;
                //reader.BeginReadMultiSample(iInputOutputSamples, inputCallback, inputTask);
                reader.BeginReadWaveform(iInputOutputSamples, inputCallback, inputTask);



                //statusDAQtimer.Enabled = true;
            }
            catch (Exception ex)
            {
                StopTask();
                WarningDAQUpdate?.Invoke(ex.Message);
            }
        }
        public AnalogOutputWriter(int channel, double minVoltage, double maxVoltage)
        {
            try
            {
                myTask.AOChannels.CreateVoltageChannel(aoChannels[channel], "GenCurrent", minVoltage, maxVoltage, AOVoltageUnits.Volts);

                myChannelWriter = new AnalogSingleChannelWriter(myTask.Stream);
            }

            catch (Exception exception)
            {
                if (MessageBox.Show("Can't connect to USB-DAQ. Continue? ", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) == DialogResult.Cancel)
                {
                    Environment.Exit(0);
                }
            }
        }
示例#34
0
 //아날로그 출력 연결
 public void Connect_Output(ref string ErrorMsg)
 {
     try
     {
         Writetask.AOChannels.CreateVoltageChannel(ini.GetIniValue("NI", "Name") + "/ao0", "Analog Output", -10, 10, AOVoltageUnits.Volts);
         writer = new AnalogSingleChannelWriter(Writetask.Stream);
         Writetask.Control(TaskAction.Verify);
     }
     catch (DaqException de)
     {
         ErrorMsg = de.Message;
     }
     catch (Exception e)
     {
         ErrorMsg = e.Message;
     }
 }
示例#35
0
        public void Start()
        {
            analogsAvailable = true;
            // all the analog outputs are unblocked at the outset
            analogOutputsBlocked = new Hashtable();
            foreach (DictionaryEntry de in Environs.Hardware.AnalogOutputChannels)
            {
                analogOutputsBlocked.Add(de.Key, false);
            }

            aomChannel.AddToTask(outputTask, -10, 10);
            outputTask.Control(TaskAction.Verify);
            aomWriter = new AnalogSingleChannelWriter(outputTask.Stream);

            window            = new ControlWindow();
            window.controller = this;
            Application.Run(window);
        }
        public AnalogOutputWriter(int channel, double minVoltage, double maxVoltage)
        {
            try
            {
                myTask.AOChannels.CreateVoltageChannel(aoChannels[channel], "GenCurrent", minVoltage, maxVoltage, AOVoltageUnits.Volts);

                myChannelWriter = new AnalogSingleChannelWriter(myTask.Stream);

            }

            catch (Exception exception)
            {
                if (MessageBox.Show("Can't connect to USB-DAQ. Continue? ", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) == DialogResult.Cancel)
                {
                    Environment.Exit(0);
                }
            }
        }
示例#37
0
        private void btnWriteAnalogOut_Click(object sender, EventArgs e)
        {
            Task analogOutTask = new Task();

            AOChannel myAOChannel;

            myAOChannel = analogOutTask.AOChannels.CreateVoltageChannel("dev1/ao0", "myAOChannel", 0, 5, AOVoltageUnits.Volts);

            AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(analogOutTask.Stream);

            double analogDataOut;

            analogDataOut = Convert.ToDouble(txtAnalogOut.Text);

            writer.WriteSingleSample(true, analogDataOut);

            // kullanacaðýmýz zaman
            Form1 nesne1 = new Form1();
        }
        public void ConfigureCavityScan(int numberOfSteps, bool autostart)
        {
            outputCavityTask = new Task("CavityPiezoVoltage");
            cavityChannel =
                        (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[cavityChannelName];
            cavityChannel.AddToTask(outputCavityTask, 0, 10);
            outputCavityTask.AOChannels[0].DataTransferMechanism = AODataTransferMechanism.Dma;

            if (!autostart)
            {
                outputCavityTask.Timing.ConfigureSampleClock("", 500,
                SampleClockActiveEdge.Rising, SampleQuantityMode.FiniteSamples, 2 * numberOfSteps);
                outputCavityTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger(
                        (string)Environs.Hardware.GetInfo(cavityTriggerInputName), DigitalEdgeStartTriggerEdge.Rising);
            }

            outputCavityTask.Control(TaskAction.Verify);
            cavityWriter = new AnalogSingleChannelWriter(outputCavityTask.Stream);
        }
        public override void AcquisitionStarting()
        {
            //connect to the hardware controller
            hardwareControl = new DecelerationHardwareControl.Controller();

            // initialise the output hardware, full scale -10 to 10 volts
            outputTask = new Task("analog output");
            if (!Environs.Debug)
            {
                AnalogOutputChannel oc =
                    (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels[(string)settings["channel"]];
                oc.AddToTask(outputTask, -10, 10);
                writer = new AnalogSingleChannelWriter(outputTask.Stream);
                if (!Blocked()) writer.WriteSingleSample(true, 0);
            }
            scanParameter = 0;
            //go gently to the correct start position
            if (((string)settings["scanMode"] == "up" || (string)settings["scanMode"] == "updown") && !Blocked())
                rampOutputToVoltage((double)settings["start"]);
            if (((string)settings["scanMode"] == "down" || (string)settings["scanMode"] == "downup") && !Blocked())
                rampOutputToVoltage((double)settings["end"]);
        }
        internal ChannelOutput(double samplingRate, double outputRefreshTime, double inputRefreshTime, Task spikeTask, String NIDevice, int NIChannel)
        {
            //Compute buffer length, instantiate buffer
            int multiple = (int)(Math.Round(outputRefreshTime / inputRefreshTime)); //Get number of input buffer reads that approximate the desired output rate
            if (multiple < 1) multiple = 1; //Ensure the multiple is at least 1
            int bufferLength = (int)((double)multiple * inputRefreshTime * samplingRate); //Calculate length
            buffer = new double[bufferLength];

            //Create new task
            analogOutputTask = new Task("Playback Analog Output Task");
            analogOutputTask.AOChannels.CreateVoltageChannel(NIDevice + "/ao" + NIChannel, "",
                            -10.0, 10.0, AOVoltageUnits.Volts);
            analogOutputTask.Timing.ReferenceClockSource = spikeTask.Timing.ReferenceClockSource;
            analogOutputTask.Timing.ReferenceClockRate = spikeTask.Timing.ReferenceClockRate;
            analogOutputTask.Timing.ConfigureSampleClock("", samplingRate,
                            SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, bufferLength);
            analogOutputTask.Control(TaskAction.Verify);

            //Create writer
            analogOutputWriter = new AnalogSingleChannelWriter(analogOutputTask.Stream);
            analogOutputWriter.SynchronizeCallbacks = false;
        }
示例#41
0
        public void Start()
        {
            analogsAvailable = true;
            // all the analog outputs are unblocked at the outset
            analogOutputsBlocked = new Hashtable();
            foreach (DictionaryEntry de in Environs.Hardware.AnalogOutputChannels)
                analogOutputsBlocked.Add(de.Key, false);

            aomChannel.AddToTask(outputTask, -10, 10);
            outputTask.Control(TaskAction.Verify);
            aomWriter = new AnalogSingleChannelWriter(outputTask.Stream);

            window = new ControlWindow();
            window.controller = this;
            Application.Run(window);
        }
示例#42
0
 //Overload for using a calibration before outputting to hardware
 public void SetAnalogOutput(string channelName, double voltage, bool useCalibration)
 {
     AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(analogTasks[channelName].Stream);
     double output;
     if (useCalibration)
     {
         try
         {
             output = ((Calibration)calibrations[channelName]).Convert(voltage);
         }
         catch (DAQ.HAL.Calibration.CalibrationRangeException)
         {
             MessageBox.Show("The number you have typed is out of the calibrated range! \n Try typing something more sensible.");
             throw new CalibrationException();
         }
         catch
         {
             MessageBox.Show("Calibration error");
             throw new CalibrationException();
         }
     }
     else
     {
         output = voltage;
     }
     try
     {
         writer.WriteSingleSample(true, output);
         analogTasks[channelName].Control(TaskAction.Unreserve);
     }
     catch (Exception e)
     {
         MessageBox.Show(e.Message);
     }
 }
示例#43
0
 private void configureAnalogOutput()
 {
     analogOutputTask = new Task("phase lock analog output");
     AnalogOutputChannel outputChannel =
             (AnalogOutputChannel) Environs.Hardware.AnalogOutputChannels["phaseLockAnalogOutput"];
         outputChannel.AddToTask(analogOutputTask, VCO_LOW, VCO_HIGH);
         analogWriter = new AnalogSingleChannelWriter(analogOutputTask.Stream);
         analogWriter.WriteSingleSample(true, VCO_CENTRAL); // start out with the central value
 }
示例#44
0
 public void setupMasterVoltageOut()
 {
     masterOutputTask = new Task("rampfeedback");
     masterChannel=(AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels["rampfb"];
     masterChannel.AddToTask(masterOutputTask, masterChannel.RangeLow, masterChannel.RangeHigh);
     masterOutputTask.Control(TaskAction.Verify);
     masterWriter = new AnalogSingleChannelWriter(masterOutputTask.Stream);
 }
示例#45
0
        /// <summary>
        /// Initiate the output task writer, and apply an initial constant bias
        /// </summary>
        /// <param name="task">The output task that the writer will belong to</param>
        /// <param name="settings">The UI settings</param>
        private void InitiateOutputWriter(Task task, IVSettings settings)
        {
            //
            // generate output arrays
            //
            m_functionGenerator = new FunctionGenerator(settings.IVGeneralSettings.SamplesPerCycle,
                                                        settings.IVGeneralSettings.VoltageAmplitude,
                                                        settings.IVGeneralSettings.VoltageAmplitude);

            //
            // create the writer of the output task
            //
            writer = new AnalogSingleChannelWriter(m_outputTask.Stream);

            //
            // write static voltage
            //
            writer.WriteMultiSample(true, m_functionGenerator.ConstWave);
        }
 private void WriteSingleAnalog(NIDAQOutputStream stream, double value)
 {
     using (var t = new DAQTask())
     {
         t.AOChannels.CreateVoltageChannel(stream.PhysicalName, "", Device.AOVoltageRanges.Min(),
                                           Device.AOVoltageRanges.Max(), AOVoltageUnits.Volts);
         var writer = new AnalogSingleChannelWriter(t.Stream);
         writer.WriteSingleSample(true, value);
     }
 }
示例#47
0
 public void SetAnalogOutput(string channel, double value, bool useCalibration)
 {
     analogWriter = new AnalogSingleChannelWriter(analogTasks[channel].Stream);
     bool changeIt = true;
     double output = 0.0;
     if (useCalibration)
     {
         try
         {
             output = ((Calibration)calibrations[channel]).Convert(value);
         }
         catch (DAQ.HAL.Calibration.CalibrationRangeException)
         {
             MessageBox.Show("The number is outside the calibrated range. The value will not be updated.");
             changeIt = false;
         }
         catch
         {
             MessageBox.Show("Calibration error");
             changeIt = false;
         }
     }
     else
     {
         output = value;
     }
     if (changeIt)
     {
         try
         {
             analogWriter.WriteSingleSample(true, output);
             analogTasks[channel].Control(TaskAction.Unreserve);
         }
         catch (Exception e)
         {
             MessageBox.Show(e.Message);
         }
     }
 }
示例#48
0
        public void Start()
        {
            proportionalGain = 0;
            integralGain = 0;
            //            derivativeGain = 0;

            ui = new MainForm();
            ui.controller = this;

            // get access to ScanMaster and the DecelerationHardwareController
            RemotingHelper.ConnectScanMaster();
            RemotingHelper.ConnectDecelerationHardwareControl();

            scanMaster = new ScanMaster.Controller();
            hardwareControl = new DecelerationHardwareControl.Controller();
            fitter = new DAQ.Analyze.GaussianFitter();

            if (!Environs.Debug)
            {
                outputTask = new Task("LaserControllerOutput");
                laserChannel =
                        (AnalogOutputChannel)Environs.Hardware.AnalogOutputChannels["laser"];
                laserChannel.AddToTask(outputTask, -10, 10);
                outputTask.Control(TaskAction.Verify);
                laserWriter = new AnalogSingleChannelWriter(outputTask.Stream);

                inputTask = new Task("LaserControllerInput");
                cavityChannel = (AnalogInputChannel)Environs.Hardware.AnalogInputChannels["lockcavity"];
                cavityChannel.AddToTask(inputTask, -10, 10);
                cavityReader = new AnalogSingleChannelReader(inputTask.Stream);

                inputrefTask = new Task("ReferenceLaserControllerInput");
                cavityrefChannel = (AnalogInputChannel)Environs.Hardware.AnalogInputChannels["refcavity"];
                cavityrefChannel.AddToTask(inputrefTask, -10, 10);
                cavityrefReader = new AnalogSingleChannelReader(inputrefTask.Stream);
            }

            timerDelegate = new TimerCallback(TalkToHardwareControl);
            hardwareControlTimer = new System.Threading.Timer(timerDelegate, null, 5000, HARDWARE_CONTROL_TALK_PERIOD);

            Application.Run(ui);
        }
示例#49
0
        public void Start()
        {
            flowChannel.AddToTask(outputTask, 0, 5);
            outputTask.Control(TaskAction.Verify);
            flowWriter = new AnalogSingleChannelWriter(outputTask.Stream);

            flowmeterChannel.AddToTask(inputTask, 0, 5);
            inputTask.Control(TaskAction.Verify);
            flowReader = new AnalogSingleChannelReader(inputTask.Stream);

               // make the control window
               window = new ControlWindow();
               window.controller = this;

            Application.Run(window);
        }
示例#50
0
 /// <summary>
 /// Method for outputing a voltage on the DAQ
 /// </summary>
 /// <param name="task">NI-DAQ output task</param>
 /// <param name="voltage">Voltage to output. 
 /// Note must be between the limits outMax and outMin.
 /// The range is limited elsewhere in the code</param>
 private void SetAnalogOutput(Task task, double voltage)
 {
     AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(task.Stream);
     writer.WriteSingleSample(true, voltage);
     task.Control(TaskAction.Unreserve);
 }
示例#51
0
 // ---------------ZAPIS ANALOG-----------
 /// <summary>
 /// Metoda nastavuje/zapisuje cez AD prevodnik hodnotu value.
 /// </summary>
 /// <param name="value"></param>
 public void setAnalogOutput(double value)
 {
     Task analogOutTask = new Task();
     AOChannel myAOChannel;
     myAOChannel = analogOutTask.AOChannels.CreateVoltageChannel(
         prevodnikId + "/ao1",
         "myAOChannel",
         0,
         5,
         AOVoltageUnits.Volts
         );
     AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(analogOutTask.Stream);
     writer.WriteSingleSample(true, value);
 }