public void Update_Voltage_Plot_for_Sensitivity(Sensitvity_Measurement mySensitivity) { chartControl_DATA_Top.Invoke((MethodInvoker) delegate { //Punkte aktualisieren chartControl_DATA_Top.RefreshData(); //Bei bedarf die y-Achse verlängern //Min und Max finden decimal help_min = decimal.MaxValue; decimal help_max = decimal.MinValue; foreach (var messreihe in mySensitivity.Voltage_Values) { foreach (var messpunkt in messreihe) { if (messpunkt.Voltage < help_min) { help_min = messpunkt.Voltage; } if (messpunkt.Voltage > help_max) { help_max = messpunkt.Voltage; } } } XYDiagram test = (XYDiagram)chartControl_DATA_Top.Diagram; test.AxisY.WholeRange.MaxValue = help_max; //Zugelassener Bereich test.AxisY.VisualRange.MaxValue = help_max; //Sichtbarrer Bereich test.AxisY.WholeRange.MinValue = help_min; //Zugelassener Bereich test.AxisY.VisualRange.MinValue = help_min; //Sichtbarrer Bereich }); }
/// <summary> /// Retruns true if no error occured while sending the settings /// </summary> public override bool Setting_for_Sensitivity(Sensitvity_Measurement mySensitivity) { //1. Error Counter zurücksetzen************************************************************************************************************** uint error_Sum = 0; //2. Mess-Einstellungen anpassen************************************************************************************************************* error_Sum += Activate_Chanel_0(); error_Sum += Diff_Channel_0to1(); error_Sum += Input_1MOhm_Channel_0(); error_Sum += Input_1MOhm_Channel_1(); error_Sum += Set_Range(); error_Sum += Set_Frequency(); //Eventuell Freuenz ändern error_Sum += Setting_for_Single_Measurment(); //3. Parameter für Messlänge senden********************************************************************************************************** error_Sum += Set_Sample_Count(mySensitivity.Nr_of_samples); error_Sum += Set_Samples_PostTrigger(mySensitivity.Nr_of_samples); //4. Feld für die Messdaten generiern******************************************************************************************************** mySensitivity.RawData = new short[mySensitivity.Nr_of_samples]; //Feld in der Länger definieren H_BufferHandle = GCHandle.Alloc(mySensitivity.RawData, GCHandleType.Pinned); //Speicherplatz sperren Daten_Pointer = H_BufferHandle.AddrOfPinnedObject(); //Pointer für gesperten Speicherplatz suchen //5. Fehlerauswertung******************************************************************************************************** if (error_Sum != 0) { MessageBox.Show("An error occured while sending the Settings!\n Look on LOG and try again.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } else { return(true); } }
public void Update_Temperature_Plot_for_Sensitivity(Sensitvity_Measurement mySensitivity) { chartControl_DATA_Bottom.Invoke((MethodInvoker) delegate { //Punkte aktualisieren chartControl_DATA_Bottom.RefreshData(); //Bei bedarf die x-Achse verlängern (TempPlot ist immer Series 1) if (chartControl_DATA_Bottom.Series["TEC-Temperature"].Points.LastOrDefault().ArgumentX.NumericalArgument % 60 == 0) { XYDiagram test = (XYDiagram)chartControl_DATA_Bottom.Diagram; int neues_Maximum = (int)chartControl_DATA_Bottom.Series["TEC-Temperature"].Points.LastOrDefault().ArgumentX.NumericalArgument + 60; test.AxisX.WholeRange.MaxValue = neues_Maximum; //Zugelassener Bereich test.AxisX.VisualRange.MaxValue = neues_Maximum; //Sichtbarrer Bereich } }); }
public void Add_Series_to_RAW(Sensitvity_Measurement mySensitivity) { //Daten in Passende Liste einfügen List <RAW_DataPoint> myRawDataList = new List <RAW_DataPoint>(); //Daten umschreiben for (int sample = 0; sample < mySensitivity.RawData.Length; sample++) { myRawDataList.Add( new RAW_DataPoint() { Value = mySensitivity.RawData[sample], Time = (decimal)sample / mySensitivity.MySpectrum.Frequency, } ); } //Muss so kompliziert sein, da UI nicht im Thread liegt chartControl_RAW.Invoke((MethodInvoker) delegate { chartControl_RAW.Series.Clear(); var neueSerie = new Series("RAW_Data", ViewType.Line) { CheckableInLegend = true, DataSource = myRawDataList, ArgumentScaleType = ScaleType.Numerical, ArgumentDataMember = "Time", ValueScaleType = ScaleType.Numerical, }; neueSerie.ValueDataMembers.AddRange(new string[] { "Value" }); chartControl_RAW.Series.Add(neueSerie); //Resize x-Achse //((LineSeriesView)neueSerie.View).LineMarkerOptions.Kind = MarkerKind.Triangle; //((LineSeriesView)neueSerie.View).MarkerVisibility = DevExpress.Utils.DefaultBoolean.True; }); }
/// <summary> /// Retruns true if no error occured while sending the settings /// </summary> public override bool Measure_Sensitivity_DEMO(Sensitvity_Measurement mySensitivity) { //Mögliche Errors mitzählen uint error_Sum = 0; //Speicher definieren & Spreren mySensitivity.RawData = new short[mySensitivity.Nr_of_samples]; H_BufferHandle = GCHandle.Alloc(mySensitivity.RawData, GCHandleType.Pinned); Daten_Pointer = H_BufferHandle.AddrOfPinnedObject(); //Messung starten error_Sum += WaitTime_for_Trigger_inf(); error_Sum += Adopt_Settings(); error_Sum += Start_Card(); error_Sum += Force_Trigger(); //Daten abholen error_Sum += WaitTime_for_Trigger_inf(); error_Sum += Wait_for_all_samples(); //Datentransfer einstellen (Datapointer enspricht der Stelle des ersten Samples im Array) IntPtr aktuellerPointer = new IntPtr(Daten_Pointer.ToInt64()); error_Sum += Send_Pointer_of_Array(aktuellerPointer, mySensitivity.Nr_of_samples); error_Sum += Get_Data(); //Auf Errors checken if (error_Sum != 0) { MessageBox.Show("An Error occured while measurment!\n Look at LOG: .", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } else { return(true); } }
/// <summary> /// Retruns true if no error occured while sending the settings /// </summary> public override bool Measure_Sensitivity(Sensitvity_Measurement mySensitivity, ATIM_MainWindow GUI) { //Mögliche Errors mitzählen uint error_Sum = 0; //Messung starten error_Sum += WaitTime_for_Trigger_inf(); error_Sum += Adopt_Settings(); error_Sum += Start_Card(); error_Sum += Force_Trigger(); //Daten abholen error_Sum += WaitTime_for_Trigger_inf(); error_Sum += Wait_for_all_samples(); //Datentransfer einstellen (Datapointer enspricht der Stelle des ersten Samples im Array) IntPtr aktuellerPointer = new IntPtr(Daten_Pointer.ToInt64()); error_Sum += Send_Pointer_of_Array(aktuellerPointer, mySensitivity.Nr_of_samples); error_Sum += Get_Data(); //Plot in Graph RAW GUI.Add_Series_to_RAW(mySensitivity); //Auf Errors checken if (error_Sum != 0) { MessageBox.Show("An Error occured while measurment!\n Look at LOG: .", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } else { return(true); } }
public virtual bool Measure_Sensitivity_DEMO(Sensitvity_Measurement mySensitivity) { return(false); }
public virtual bool Measure_Sensitivity(Sensitvity_Measurement mySensitivity, ATIM_MainWindow GUI) { return(false); }
public virtual bool Setting_for_Sensitivity(Sensitvity_Measurement mySensitivity) { return(false); }
public override bool Measure_Sensitivity_DEMO(Sensitvity_Measurement mySensitivity) { return(true); }
public override bool Measure_Sensitivity(Sensitvity_Measurement mySensitivity, ATIM_MainWindow GUI) { return(true); }
public override bool Setting_for_Sensitivity(Sensitvity_Measurement mySensitivity) { return(true); }
public void Add_Series_to_Data(Sensitvity_Measurement mySensitivity) { chartControl_DATA_Top.Invoke((MethodInvoker) delegate { //*******************Haupt-Temperature-Graph************************************ for (int i = 0; i < mySensitivity.Nr_of_LEDs; i++) { var voltage_Series = new Series("DUT " + (i + 1).ToString(), ViewType.Line) { CheckableInLegend = true, DataSource = mySensitivity.Voltage_Values[i], ArgumentScaleType = ScaleType.Numerical, ArgumentDataMember = "Temperature", ValueScaleType = ScaleType.Numerical, CrosshairLabelPattern = "{S} : {V:0.000} V" }; voltage_Series.ValueDataMembers.AddRange(new string[] { "Voltage" }); chartControl_DATA_Top.Series.Add(voltage_Series); } }); chartControl_DATA_Bottom.Invoke((MethodInvoker) delegate { //*******************Haupt-Temperature-Graph************************************ var mainTemp_Series = new Series("TEC-Temperature", ViewType.Line) { CheckableInLegend = true, ShowInLegend = true, DataSource = mySensitivity.Data_Temp_at_Time, ArgumentScaleType = ScaleType.Numerical, ArgumentDataMember = "Time_in_s", ValueScaleType = ScaleType.Numerical, CrosshairLabelPattern = "{S} : {V:0.00} °C", }; mainTemp_Series.View.Color = Color.Red; mainTemp_Series.ValueDataMembers.AddRange(new string[] { "Temperature" }); chartControl_DATA_Bottom.Series.Add(mainTemp_Series); //*******************Markierungen für Messungen********************************* for (int i = 0; i < mySensitivity.TempSteps.Count; i++) { var marking_Series = new Series("Meas.-Window " + (i + 1).ToString(), ViewType.Area) { CheckableInLegend = true, ShowInLegend = true, CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False, DataSource = mySensitivity.Data_MeasurementMarker[i], ArgumentScaleType = ScaleType.Numerical, ArgumentDataMember = "Time_in_s", ValueScaleType = ScaleType.Numerical, }; marking_Series.View.Color = Color.Gray; ((AreaSeriesView)marking_Series.View).Transparency = 135; marking_Series.ValueDataMembers.AddRange(new string[] { "Temperature" }); chartControl_DATA_Bottom.Series.Add(marking_Series); } }); }
private void Graph_Init_for_Sensitivity(Sensitvity_Measurement mySen) { //Zwischenspeicher umschreiben akt_Graph_Setup = "Sensitivity"; //Größe der Überschriften Font myFont_Headline = new Font("Tahoma", 12, FontStyle.Bold); Font myFont_Axis = new Font("Tahoma", 10); DevExpress.XtraCharts.ChartTitle myChartTitle; //Ober Graph für RAW............................................................................ chartControl_RAW.Series.Clear(); myChartTitle = new DevExpress.XtraCharts.ChartTitle() { Text = "Raw Values DAC", Font = myFont_Headline, Dock = DevExpress.XtraCharts.ChartTitleDockStyle.Top, }; chartControl_RAW.Titles.Clear(); chartControl_RAW.Titles.Add(myChartTitle); //Diagramm erzeugen (Muss wegen laufzeit in Begin Init und EndInit) XYDiagram xyDigaram_RAW; ((System.ComponentModel.ISupportInitialize)(this.chartControl_RAW)).BeginInit(); xyDigaram_RAW = new XYDiagram(); chartControl_RAW.Diagram = xyDigaram_RAW; //Achsen-Titel setzen xyDigaram_RAW.AxisX.Title.Text = "Time in [s]"; xyDigaram_RAW.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; xyDigaram_RAW.AxisX.Title.Font = myFont_Axis; xyDigaram_RAW.AxisY.Title.Text = "Bit-Value"; xyDigaram_RAW.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; xyDigaram_RAW.AxisY.Title.Font = myFont_Axis; //Min-Max - Achse double zeit_max = (double)mySen.Nr_of_samples / mySen.MySpectrum.Frequency; xyDigaram_RAW.AxisX.VisibleInPanesSerializable = "-1"; xyDigaram_RAW.AxisX.VisualRange.Auto = false; xyDigaram_RAW.AxisX.WholeRange.MaxValue = zeit_max; //Zugelassener Bereich xyDigaram_RAW.AxisX.WholeRange.MinValue = 0; xyDigaram_RAW.AxisX.VisualRange.MaxValue = zeit_max; //Sichtbarrer Bereich xyDigaram_RAW.AxisX.VisualRange.MinValue = 0; xyDigaram_RAW.AxisX.VisualRange.SideMarginsValue = 0; //Überstand Links und rechts xyDigaram_RAW.AxisX.NumericScaleOptions.AutoGrid = false; xyDigaram_RAW.AxisX.NumericScaleOptions.GridSpacing = zeit_max / 4; xyDigaram_RAW.AxisY.VisibleInPanesSerializable = "-1"; xyDigaram_RAW.AxisY.VisualRange.Auto = false; xyDigaram_RAW.AxisY.WholeRange.MaxValue = 32768; xyDigaram_RAW.AxisY.WholeRange.MinValue = -32768; xyDigaram_RAW.AxisY.VisualRange.MaxValue = 32768; //Sichtbarrer Bereich xyDigaram_RAW.AxisY.VisualRange.MinValue = -32768; xyDigaram_RAW.AxisY.NumericScaleOptions.AutoGrid = false; xyDigaram_RAW.AxisY.NumericScaleOptions.GridSpacing = 16384; xyDigaram_RAW.AxisY.Interlaced = true; xyDigaram_RAW.AxisY.VisualRange.SideMarginsValue = 1; //Überstand Links und rechts ((System.ComponentModel.ISupportInitialize)(this.chartControl_RAW)).EndInit(); //Label & Legend chartControl_RAW.CrosshairOptions.GroupHeaderPattern = "{A} sec"; chartControl_RAW.CrosshairOptions.HighlightPoints = false; chartControl_RAW.Legend.MarkerMode = LegendMarkerMode.CheckBox; //Hinzufügen leere unsichbare Serie (damit Achsen angezeigt werden) var neueSerie = new Series("Empty", ViewType.Line) { LabelsVisibility = DevExpress.Utils.DefaultBoolean.False, ShowInLegend = false, Visible = true, }; chartControl_RAW.Series.Add(neueSerie); //Ober Graph für RAW................................................................................ chartControl_DATA_Top.Series.Clear(); myChartTitle = new DevExpress.XtraCharts.ChartTitle() { Text = "Voltage @ Temperature", Font = myFont_Headline, Dock = DevExpress.XtraCharts.ChartTitleDockStyle.Top }; chartControl_DATA_Top.Titles.Clear(); chartControl_DATA_Top.Titles.Add(myChartTitle); //Diagramm erzeugen (Muss wegen laufzeit in Begin Init und EndInit) XYDiagram xyDiagram_DATA_Top; ((System.ComponentModel.ISupportInitialize)(this.chartControl_DATA_Top)).BeginInit(); xyDiagram_DATA_Top = new XYDiagram(); chartControl_DATA_Top.Diagram = xyDiagram_DATA_Top; //Achsen-Titel setzen xyDiagram_DATA_Top.AxisX.Title.Text = "Temperature [°C]"; xyDiagram_DATA_Top.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; xyDiagram_DATA_Top.AxisX.Title.Font = myFont_Axis; xyDiagram_DATA_Top.AxisY.Title.Text = "Voltage [V]"; xyDiagram_DATA_Top.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; xyDiagram_DATA_Top.AxisY.Title.Font = myFont_Axis; //Min-Max - Achse xyDiagram_DATA_Top.AxisX.VisibleInPanesSerializable = "-1"; xyDiagram_DATA_Top.AxisX.VisualRange.Auto = false; xyDiagram_DATA_Top.AxisX.WholeRange.MaxValue = (double)mySen.TempSteps[mySen.TempSteps.Count - 1]; //Zugelassener Bereich xyDiagram_DATA_Top.AxisX.WholeRange.MinValue = (double)mySen.TempSteps[0]; xyDiagram_DATA_Top.AxisX.VisualRange.MaxValue = (double)mySen.TempSteps[mySen.TempSteps.Count - 1]; //Sichtbarrer Bereich xyDiagram_DATA_Top.AxisX.VisualRange.MinValue = (double)mySen.TempSteps[0]; xyDiagram_DATA_Top.AxisX.NumericScaleOptions.AutoGrid = false; xyDiagram_DATA_Top.AxisX.NumericScaleOptions.GridSpacing = (double)Math.Abs(mySen.TempSteps[0] - mySen.TempSteps[1]); //Abstand xyDiagram_DATA_Top.AxisX.NumericScaleOptions.GridOffset = 5; //Offset wegen Margin xyDiagram_DATA_Top.AxisX.VisualRange.SideMarginsValue = 5; //Überstand Links und rechts xyDiagram_DATA_Top.AxisX.Logarithmic = false; xyDiagram_DATA_Top.AxisY.VisibleInPanesSerializable = "-1"; xyDiagram_DATA_Top.AxisY.VisualRange.Auto = true; xyDiagram_DATA_Top.AxisY.WholeRange.MaxValue = 10; xyDiagram_DATA_Top.AxisY.WholeRange.MinValue = 0; xyDiagram_DATA_Top.AxisY.VisualRange.MaxValue = 10; //Sichtbarrer Bereich xyDiagram_DATA_Top.AxisY.VisualRange.MinValue = 0; xyDiagram_DATA_Top.AxisY.NumericScaleOptions.GridSpacing = 2; xyDiagram_DATA_Top.AxisY.VisualRange.SideMarginsValue = 0; //Überstand Links und rechts ((System.ComponentModel.ISupportInitialize)(this.chartControl_DATA_Top)).EndInit(); //Label & Legend chartControl_DATA_Top.CrosshairOptions.GroupHeaderPattern = "{A} °C"; chartControl_DATA_Top.CrosshairOptions.HighlightPoints = false; chartControl_DATA_Top.Legend.MarkerMode = LegendMarkerMode.CheckBox; //Hinzufügen leere unsichbare Serie (damit Achsen angezeigt werden) neueSerie = new Series("Empty", ViewType.Line) { LabelsVisibility = DevExpress.Utils.DefaultBoolean.False, ShowInLegend = false, Visible = true, }; chartControl_DATA_Top.Series.Add(neueSerie); //Ober Graph für RAW................................................................................... chartControl_DATA_Bottom.Series.Clear(); myChartTitle = new DevExpress.XtraCharts.ChartTitle() { Text = "Temperature progress", Font = myFont_Headline, Dock = DevExpress.XtraCharts.ChartTitleDockStyle.Top }; chartControl_DATA_Bottom.Titles.Clear(); chartControl_DATA_Bottom.Titles.Add(myChartTitle); //Diagramm erzeugen (Muss wegen laufzeit in Begin Init und EndInit) XYDiagram xyDiagram_DATA_Bottom; ((System.ComponentModel.ISupportInitialize)(this.chartControl_DATA_Bottom)).BeginInit(); xyDiagram_DATA_Bottom = new XYDiagram(); chartControl_DATA_Bottom.Diagram = xyDiagram_DATA_Bottom; ((System.ComponentModel.ISupportInitialize)(this.chartControl_DATA_Bottom)).EndInit(); //Achsen-Titel setzen xyDiagram_DATA_Bottom.AxisX.Title.Text = "Time in [min]"; xyDiagram_DATA_Bottom.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; xyDiagram_DATA_Bottom.AxisX.Title.Font = myFont_Axis; xyDiagram_DATA_Bottom.AxisY.Title.Text = "Temperature [°C]"; xyDiagram_DATA_Bottom.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; xyDiagram_DATA_Bottom.AxisY.Title.Font = myFont_Axis; //Min-Max - Achse xyDiagram_DATA_Bottom.AxisX.VisibleInPanesSerializable = "-1"; xyDiagram_DATA_Bottom.AxisX.VisualRange.Auto = false; xyDiagram_DATA_Bottom.AxisX.WholeRange.MaxValue = 60; //Zugelassener Bereich xyDiagram_DATA_Bottom.AxisX.WholeRange.MinValue = 0; xyDiagram_DATA_Bottom.AxisX.VisualRange.MaxValue = 60; //Sichtbarrer Bereich xyDiagram_DATA_Bottom.AxisX.VisualRange.MinValue = 0; xyDiagram_DATA_Bottom.AxisX.VisualRange.SideMarginsValue = 0; //Überstand Links und rechts xyDiagram_DATA_Bottom.AxisX.Logarithmic = false; xyDiagram_DATA_Bottom.AxisY.VisibleInPanesSerializable = "-1"; xyDiagram_DATA_Bottom.AxisY.VisualRange.Auto = true; xyDiagram_DATA_Bottom.AxisY.WholeRange.MaxValue = 85; xyDiagram_DATA_Bottom.AxisY.WholeRange.MinValue = 15; xyDiagram_DATA_Bottom.AxisY.VisualRange.MaxValue = (double)mySen.TempSteps[mySen.TempSteps.Count - 1]; //Sichtbarrer Bereich xyDiagram_DATA_Bottom.AxisY.VisualRange.MinValue = (double)mySen.TempSteps[0]; xyDiagram_DATA_Bottom.AxisY.NumericScaleOptions.GridSpacing = 5; xyDiagram_DATA_Bottom.AxisY.VisualRange.SideMarginsValue = 5; //Überstand Links und rechts //Label & Legend chartControl_DATA_Bottom.CrosshairOptions.GroupHeaderPattern = "{A} sec"; chartControl_DATA_Bottom.CrosshairOptions.HighlightPoints = false; chartControl_DATA_Bottom.Legend.MarkerMode = LegendMarkerMode.CheckBox; //Hinzufügen leere unsichbare Serie (damit Achsen angezeigt werden) neueSerie = new Series("Empty", ViewType.Line) { LabelsVisibility = DevExpress.Utils.DefaultBoolean.False, ShowInLegend = false, Visible = true, }; chartControl_DATA_Bottom.Series.Add(neueSerie); chartControl_DATA_Bottom.Update(); }
private void Button_Auto_Sensitivity_Click(object sender, EventArgs e) { //Neues Mess-Klasse erzeugen mySensitivity = new Sensitvity_Measurement() { MyRack = rthTEC_Rack1, MySpectrum = DAQ_Unit, MyTEC = myTEC, MyXYZ = myXYZ, Output_File_Folder = myFileSetting.readBox_FileFolder1.MyPath, Output_File_Name = myFileSetting.readBox_FileFolder1.MyFileName, GUI = this, MyMovement = myFileSetting.readBox_Movement1.Movements_XYA, MyFileNames = myFileSetting.readBox_Movement1.DUT_Name }; //Temperatur-Schritte abfragen über Fenster Window_Sensitivity_TempStepSelect kFactorWindow = new Window_Sensitivity_TempStepSelect(this); kFactorWindow.ShowDialog(); //Falls keine Temperatur-Schritte zurückgegeben werden, dann abbrechen if (mySensitivity.TempSteps.Count == 0) { return; } //Graphen anpassen if (akt_Graph_Setup != "Sensitivity") { //Graphen anpassen Graph_Init_for_Sensitivity(mySensitivity); } else { //Nur leeren (muss noch angepasst werden) Graph_Init_for_Sensitivity(mySensitivity); } //Spectrum einstellen mySensitivity.MySpectrum.Setting_for_Sensitivity(mySensitivity); //Backroundworker definieren myBackroundWorker = new BackgroundWorker() { WorkerSupportsCancellation = true, }; //Aufgabe definieren myBackroundWorker.DoWork += new DoWorkEventHandler((state, args) => { //Messen --> aktuell noch DEMO mySensitivity.Start_Measurement(); //Daten konvertieren und abarbeiten //UI wieder aktiviern Set_Old_Enable_Status(); } ); //Alle Knöpfe deaktiveren Disable_All_Controlls(); //Backroundworker starten myBackroundWorker.RunWorkerAsync(); }