public Boolean Start_Single_TTA() { //1.Strom einschalten MyRack.MeasCurrent_on(); //2.Spannung bei Imeas und RaumTemperatur messen V_f_at_Imeas_Troom = MyDAQ.Get_Constant_Voltage(this, this.GUI); //3.Strom aus MyRack.MeasCurrent_off(); //Eigentliche TTA messung return(MyDAQ.Measure_TTA_Several_Cycles(this, this.GUI)); }
// Use this for initialization void Start() { RackUtil.initRacks(); rack = MyRack.getInstance(); GameUtil.specialButton = GameObject.Find("SpecialButton"); GameUtil.resetButton = GameObject.Find("ResetButton"); //Handling delegates rack.DiskDroppedCallback += diskDropped; rack.RackRotatedCallback += rackRotated; rack.ColumnDeletedCallback += columnDeleted; rack.RowDeletedCallback += rowDeleted; GameUtil.setResetHandler(resetPressed); GameUtil.setSpecialHandler(specialPressed); setupGame(); }
//************************************************************************************************** // Globale Funktionen //************************************************************************************************** #region GlobaleFunktionen public bool Start_Measurement() { //1. Pre-Settings ................................................................................ //Anzahl LEDs für Counter Nr_of_LEDs = MyMovement.GetLength(0); //Text StatusBar ändern GUI.StatusBar_Sensitivity_all(0, Nr_of_LEDs, 1, TempSteps.Count); //Define voltage measurement array Voltage_Values = new List <Sensitivity_DataPoint_Voltage> [Nr_of_LEDs]; for (int i = 0; i < Nr_of_LEDs; i++) { Voltage_Values[i] = new List <Sensitivity_DataPoint_Voltage>(); } //Start plotting the temperature IsRunning = true; Start_OnLine_Temp_Plotting(); //2. Set Temperature ................................................................................. //Set temperatures in a for loop for (Counter_TempStep = 0; Counter_TempStep < TempSteps.Count; Counter_TempStep++) { //Set temperature to new target value MyTEC.SetTemperature_w_TimerStop((float)TempSteps[Counter_TempStep]); //Text StatusBar ändern GUI.StatusBar_Sensitivity_all(0, Nr_of_LEDs, Counter_TempStep + 1, TempSteps.Count); //Wait 500ms, so Temperature is measured one time (avoid failure) System.Threading.Tasks.Task.Delay(1000); //Wait until temperature is stable (Cancel if temp no stable after 5 min) int cancel_time = 0; while (!GUI.myTEC.Stable_for_30sec) { //Abfragen ob abbrechen if (GUI.break_is_wished) { goto END_kFactor_all; } // Eine Sekunde Warten System.Threading.Thread.Sleep(1000); cancel_time++; if (cancel_time >= 300) //Nach 5 Minuten Warunung abbrechen { //Warning Message MessageBox.Show("Attention: The Temperature is never stable in the range. Please control the settings of the TEC"); //Zum Ende springen goto END_kFactor_all; } } //3. Measure all DUTs.......................................................................... //Switch On Current Source with selected current MyRack.MeasCurrent_on(); //Rauffahrn (immer genau auf 0) MyXYZ.Move2Position(MyXYZ.Akt_x_Koordinate, MyXYZ.Akt_y_Koordinate, 0, MyXYZ.Akt_Winkel); //An Startpunkt fahren lassen (oberer Anschlag) MyXYZ.Move2Position(MyMovement[0, 0], MyMovement[0, 1], -70, 0); //Measure all LEDs after one other Flag_LED_Measurement = true; for (int akt_DUT_Nr = 1; akt_DUT_Nr <= Nr_of_LEDs; akt_DUT_Nr++) { //Abfragen ob abbrechen if (GUI.break_is_wished) { goto END_kFactor_all; } //Text StatusBar ändern GUI.StatusBar_Sensitivity_all(akt_DUT_Nr, Nr_of_LEDs, Counter_TempStep + 1, TempSteps.Count); //Drive XYZ down to LED MyXYZ.MoveADistance(0, 0, -25, 0); //Short break against starting oscillations (100ms) System.Threading.Thread.Sleep(100); //Measure LED and save to data array MySpectrum.Measure_Sensitivity(this, GUI); //Save Point decimal voltage_help = (decimal)RawData.Average(x => x) / MyRack.Cycles * MySpectrum.Range / 1000 / (decimal)Math.Pow(2, 15) + MyRack.U_offset / 1000; Voltage_Values[akt_DUT_Nr - 1].Add(new Sensitivity_DataPoint_Voltage() { Voltage = (decimal)RawData.Average(x => x) / MyRack.Cycles * MySpectrum.Range / 1000 / (decimal)Math.Pow(2, 15) / MyRack.Gain + MyRack.U_offset / 1000, Temperature = TempSteps[Counter_TempStep] }); GUI.Update_Voltage_Plot_for_Sensitivity(this); //Drive XYZ up MyXYZ.MoveADistance(0, 0, 25, 0); //Drive to next LED (exept at the end) if (akt_DUT_Nr < Nr_of_LEDs) { MyXYZ.MoveADistance(MyMovement[akt_DUT_Nr, 0], MyMovement[akt_DUT_Nr, 1], 0, 0); } } Flag_LED_Measurement = false; //Switch Current source of (until next temperature is reached MyRack.MeasCurrent_off(); } //Speicher wieder Frei geben (gegen überflutung Arbeitsspeicher) //hBufferHandle.Free(); //4. Daten auswerten.......................................................................... Sensitivity_Calculation(); //Fertig (Trotzdem müssen Grundeinstellungen wieder hergestellt werden) goto END_kFactor_all; END_kFactor_all: //set start temperature to TEC controller MyTEC.SetTemperature_w_TimerStop((float)TempSteps[0]); //stop Plotting IsRunning = false; Stop_OnLine_Temp_Plotting(); //Zu Parkposition fahren //GUI.xyZ_table1.Move2Position(xyz_park_pos[0], xyz_park_pos[1], xyz_park_pos[2]); //Wenn abgebrochen wurde dann false zurückgeben if (GUI.break_is_wished) { GUI.break_is_wished = false;// zurücksetzen //Text StatusBar ändern GUI.StatusBar_Measurement_CANCELED(); return(false); } //Text StatusBar ändern GUI.StatusBar_Measurement_FINISHED(); //sonst true return(true); }
//******************************************************************************************************************** // globale Funktionen //******************************************************************************************************************** /// <summary> /// TTA measurment without XYZ (but with repetation cycles) /// </summary> /// <returns>Flag of status</returns> public bool Start_Single_TTA() { //Status-Bar initialisieren GUI.StatusBar_TTA_Single(0, (int)MyRack.Cycles); //DAQ-System anpassen if (!MyDAQ.TTA_set_Device(MyRack.Time_Heat, MyRack.Time_Meas)) { return(false); } if (!MyDAQ.TTA_set_Trigger(MyRack.Gain, MyRack.U_offset)) { return(false); } //Definiere Feld für Raw-Daten Binary_Raw_Files = new short[MyRack.Cycles, MyDAQ.Samples]; //Speicher reservieren MyDAQ.TTA_reserve_Storage(Binary_Raw_Files); //Loop für Wiederholungs-Zyklen for (int repetation_nr = 0; repetation_nr < MyRack.Cycles; repetation_nr++) { //Bei bedarf abbrechen if (GUI.myBackroundWorker.CancellationPending) { //Falls abbruch --> Speicher lösen MyDAQ.TTA_free_Storage(Binary_Raw_Files); return(false); } //DAQ scharf stellen if (!MyDAQ.TTA_wait_for_Trigger()) { return(false); } //Puls starten (bei NI mit Warten sonst ohne) MyRack.SinglePuls_withoutDelay(); //Daten abholen if (!MyDAQ.TTA_Collect_Data(Binary_Raw_Files, repetation_nr)) { return(false); } //Daten prüfen //???????????????????????????????????????? //Daten in Raw plotten GUI.Add_Series_to_RAW(this, repetation_nr); //Statusbar anpassen GUI.StatusBar_TTA_Single(repetation_nr + 1, (int)MyRack.Cycles); } //DatenSatz auswerten Convert_Data(); //Speicher lösen MyDAQ.TTA_free_Storage(Binary_Raw_Files); return(true); }
void Awake() { singleton = this; }