Ejemplo n.º 1
0
        public bool TTA_Collect_Data(short [,] data_out, int cycle)
        {
            //6. Daten auswerten*******************************************************************************************
            try
            {
                // vorhandene Daten auslesen
                AnalogWaveformSampleCollection <double> test = messInfo_NI_SinglePulse.EndReadWaveform(uebergabe_parameter_ReadWaveform).Samples;


                double factor = Math.Pow(2, 15) / (Range / 1000);
                //Mit 100mal Minimalwert beginnen. (Für umschaltpunkt suche)
                for (int counter = 0; counter < 100; counter++)
                {
                    data_out[cycle, counter] = short.MinValue;
                }
                //Daten in Binär (short umrechnen) & TTA übergeben
                for (int counter = 100; counter < test.Count; counter++)
                {
                    double helping_Double = test[counter].Value * factor;
                    data_out[cycle, counter] = (short)(helping_Double);
                }
                return(true);
            }
            catch (DaqException ex)
            {
                //Bei Fehler -> Fehlermeldung ausgeben (hier z.B. Timeout)
                MessageBox.Show(ex.Message);

                return(false);
            }
            finally
            {
                // Task beenden
                myTask_NI.Dispose();
            }
        }
Ejemplo n.º 2
0
        public override decimal Get_Constant_Voltage(TTA_measurement myTTA, ATIM_MainWindow GUI)
        {
            //Konstante Spannung über mehrere Samples messen



            //1. Daten-Felder definieren***************************************************************************************

            //Übergabe-Parameter für NI-Karte definieren
            IAsyncResult uebergabe_parameter_ReadWaveform_Constant = null;

            //Ausgangsdaten
            AnalogSingleChannelReader messInfo_NI_SinglePulse_Constant = null;

            // Task für Messung erzeugen
            NationalInstruments.DAQmx.Task myTask_NI_Constant = null;


            //2. NI-Karte scharf stellen***********************************************************************************
            try
            {
                myTask_NI_Constant = new NationalInstruments.DAQmx.Task("myTask_Constant");

                // Kanal erzeugen:
                //---------------------------------------------------------------------------------
                //physicalChannelName As String: z.B. Dev1/ai3
                //nameToAssignChannel As String: sollte leer bleiben (Zweck keine Ahnung)
                //terminalConfiguration As AITerminalConfiguration: Differential oder ähnlich
                //minimumValue As Double: z.B. -10 [V] untere Grenze
                //maximumValue As Double: z.B. 10 [V]
                //customScaleName As String:
                //---------------------------------------------------------------------------------
                myTask_NI_Constant.AIChannels.CreateVoltageChannel(VISA_or_Channel_Name, "",
                                                                   AITerminalConfiguration.Differential, -Range / 1000, Range / 1000, AIVoltageUnits.Volts);


                // Timing-Parameter definieren:
                //---------------------------------------------------------------------------------
                //signalSource As string: Wenn interne Clock verwendet wird ""
                //rate As double: Abtastfrequenz in Hz (Interne Clock)
                //activeEdge As SampleClockActiveEdge: Bei welcher Flanke der Clock abgetastet wird
                //sampleMode As SampleQuantityMode: Legt fest ob dauerhaft gemessen wird, oder bis
                //                                  nur eine endliche Anzahl (nächster Parameter)
                //samplesPerChannel As int: Anzahl der Samples
                //---------------------------------------------------------------------------------
                myTask_NI_Constant.Timing.ConfigureSampleClock("", Frequency, SampleClockActiveEdge.Rising,
                                                               SampleQuantityMode.FiniteSamples, (int)Frequency / 1000);


                // Trigger definieren
                //---------------------------------------------------------------------------------
                //Kein Trigger definieren --> Sofort starten
                //---------------------------------------------------------------------------------
                myTask_NI_Constant.Triggers.StartTrigger.ConfigureNone();

                //TimeOut anpassen
                myTask_NI_Constant.Stream.Timeout = 2000;

                // Verify the Task
                myTask_NI_Constant.Control(TaskAction.Verify);

                //Messwert-Ausgabe definieren
                messInfo_NI_SinglePulse_Constant = new AnalogSingleChannelReader(myTask_NI_Constant.Stream);

                // Use SynchronizeCallbacks to specify that the object
                // marshals callbacks across threads appropriately.
                messInfo_NI_SinglePulse_Constant.SynchronizeCallbacks = true;
                uebergabe_parameter_ReadWaveform_Constant             = messInfo_NI_SinglePulse_Constant.BeginReadWaveform((int)Frequency / 1000, null, null);
            }
            catch (DaqException ex)
            {
                //Bei Daq Exception soll die Fehlermeldung ausgegeben werden (z.B. kein Kanal, ...)
                MessageBox.Show(ex.Message);
                //Task beenden
                myTask_NI_Constant.Dispose();

                return(0);
            }


            //6. Daten auswerten*******************************************************************************************
            try
            {
                // vorhandene Daten auslesen
                AnalogWaveformSampleCollection <double> test = messInfo_NI_SinglePulse_Constant.EndReadWaveform(uebergabe_parameter_ReadWaveform_Constant).Samples;

                //Durchschnitt berechnen
                double average = 0;
                for (int counter = 0; counter < test.Count; counter++)
                {
                    average += test[counter].Value;
                }

                return((decimal)average / test.Count / myTTA.MyRack.Gain + myTTA.MyRack.U_offset / 1000);
            }
            catch (DaqException ex)
            {
                //Bei Fehler -> Fehlermeldung ausgeben (hier z.B. Timeout)
                MessageBox.Show(ex.Message);

                return(0);
            }
            finally
            {
                // Task beenden
                myTask_NI_Constant.Dispose();
            }
        }
Ejemplo n.º 3
0
        public override bool Measure_TTA_Several_Cycles(TTA_measurement myTTA, ATIM_MainWindow GUI)
        {
            //StatusBar anpassen
            GUI.StatusBar_TTA_Single(0, (int)myTTA.MyRack.Cycles);

            //1. Parameter für Messlänge senden********************************************************************************
            //Sampelzahl und Abtastfrequenz definieren (Times sind in ms deswegen /1000)
            int anzahl_samples = Convert.ToInt32(Frequency) / 1000
                                 * Decimal.ToInt32(myTTA.MyRack.Time_Heat + myTTA.MyRack.Time_Meas);
            //Sample überschuss, da Umschalten derzeit nicht richtig
            int sample_ueberschuss = 2000;

            //Trigger berechnen
            double trigger = decimal.ToDouble((numericUpDown_Trigger.Value - myTTA.MyRack.U_offset / 1000) * myTTA.MyRack.Gain);

            //2. Daten-Felder definieren***************************************************************************************

            //Übergabe-Parameter für NI-Karte definieren
            IAsyncResult uebergabe_parameter_ReadWaveform = null;

            //Ausgangsdaten
            AnalogSingleChannelReader messInfo_NI_SinglePulse = null;

            //Feld für Daten definieren (mit 100x max- beginnen)
            myTTA.Creat_RowDataField(100 + anzahl_samples + sample_ueberschuss);


            //3. Loop**********************************************************************************************************
            for (int i = 0; i < myTTA.MyRack.Cycles; i++)
            {
                //4. NI-Karte scharf stellen***********************************************************************************
                try
                {
                    // Task für Messung erzeugen
                    myTask_NI = new NationalInstruments.DAQmx.Task("myTask");


                    // Kanal erzeugen:
                    //---------------------------------------------------------------------------------
                    //physicalChannelName As String: z.B. Dev1/ai3
                    //nameToAssignChannel As String: sollte leer bleiben (Zweck keine Ahnung)
                    //terminalConfiguration As AITerminalConfiguration: Differential oder ähnlich
                    //minimumValue As Double: z.B. -10 [V] untere Grenze
                    //maximumValue As Double: z.B. 10 [V]
                    //customScaleName As String:
                    //---------------------------------------------------------------------------------
                    myTask_NI.AIChannels.CreateVoltageChannel(VISA_or_Channel_Name, "",
                                                              AITerminalConfiguration.Differential, -Range / 1000, Range / 1000, AIVoltageUnits.Volts);


                    // Timing-Parameter definieren:
                    //---------------------------------------------------------------------------------
                    //signalSource As string: Wenn interne Clock verwendet wird ""
                    //rate As double: Abtastfrequenz in Hz (Interne Clock)
                    //activeEdge As SampleClockActiveEdge: Bei welcher Flanke der Clock abgetastet wird
                    //sampleMode As SampleQuantityMode: Legt fest ob dauerhaft gemessen wird, oder bis
                    //                                  nur eine endliche Anzahl (nächster Parameter)
                    //samplesPerChannel As int: Anzahl der Samples
                    //---------------------------------------------------------------------------------
                    myTask_NI.Timing.ConfigureSampleClock("", Frequency, SampleClockActiveEdge.Rising,
                                                          SampleQuantityMode.FiniteSamples, anzahl_samples + sample_ueberschuss);


                    // Trigger definieren
                    //---------------------------------------------------------------------------------
                    //source As String: Herkuft des Triggers. Hier gleich wie Daten (Dev1/ai3)
                    //slope As AnalogEdgeStartTriggerSlope: Rising or Falling
                    //level As Double: Trigger Level (vorher bestimmt
                    //---------------------------------------------------------------------------------
                    myTask_NI.Triggers.StartTrigger.ConfigureAnalogEdgeTrigger(VISA_or_Channel_Name,
                                                                               AnalogEdgeStartTriggerSlope.Rising, trigger);


                    //Hysterese festlegen (keine Ahnung ob das Wichtig ist)
                    //---------------------------------------------------------------------------------
                    //Hysteresis as Double: Wert der Hysterese
                    //---------------------------------------------------------------------------------
                    myTask_NI.Triggers.StartTrigger.AnalogEdge.Hysteresis = 0.05;

                    //TimeOut anpassen
                    myTask_NI.Stream.Timeout = (Int32)(1.2m * (myTTA.MyRack.Time_Heat + myTTA.MyRack.Time_Meas));

                    // Verify the Task
                    myTask_NI.Control(TaskAction.Verify);

                    //Messwert-Ausgabe definieren
                    messInfo_NI_SinglePulse = new AnalogSingleChannelReader(myTask_NI.Stream);

                    // Use SynchronizeCallbacks to specify that the object
                    // marshals callbacks across threads appropriately.
                    messInfo_NI_SinglePulse.SynchronizeCallbacks = true;
                    uebergabe_parameter_ReadWaveform             = messInfo_NI_SinglePulse.BeginReadWaveform(anzahl_samples + sample_ueberschuss, null, null);
                }
                catch (DaqException ex)
                {
                    //Bei Daq Exception soll die Fehlermeldung ausgegeben werden (z.B. kein Kanal, ...)
                    MessageBox.Show(ex.Message);
                    //Task beenden
                    myTask_NI.Dispose();
                }

                //5. Puls starten**********************************************************************************************
                System.Threading.Thread.Sleep(300);
                myTTA.MyRack.SinglePuls_withDelay();
                System.Threading.Thread.Sleep(1000);

                //6. Daten auswerten*******************************************************************************************
                try
                {
                    // vorhandene Daten auslesen
                    AnalogWaveformSampleCollection <double> test = messInfo_NI_SinglePulse.EndReadWaveform(uebergabe_parameter_ReadWaveform).Samples;


                    double factor = Math.Pow(2, 15) / (Range / 1000);
                    //Mit 100mal Minimalwert beginnen. (Für umschaltpunkt suche)
                    for (int counter = 0; counter < 100; counter++)
                    {
                        myTTA.Binary_Raw_Files[i, counter] = short.MinValue;
                    }
                    //Daten in Binär (short umrechnen) & TTA übergeben
                    for (int counter = 100; counter < test.Count; counter++)
                    {
                        double helping_Double = test[counter].Value * factor;
                        myTTA.Binary_Raw_Files[i, counter] = (short)(helping_Double);
                    }

                    //Gleich in Graph ausgeben
                    GUI.Add_Series_to_RAW(myTTA, i);
                }
                catch (DaqException ex)
                {
                    //Bei Fehler -> Fehlermeldung ausgeben (hier z.B. Timeout)
                    MessageBox.Show(ex.Message);

                    return(false);
                }
                finally
                {
                    // Task beenden
                    myTask_NI.Dispose();
                }

                //7. StatusBar anpassen****************************************************************************************
                GUI.StatusBar_TTA_Single(i + 1, (int)myTTA.MyRack.Cycles);
            }
            return(true);
        }