public TuningResult calculateMediumTuning(double lastDAC, double lastPhase, int nTime) { if (state == MediumState.TUNING_SLEEP_1) { tunningSleepCounter++; if (tunningSleepCounter == TUNNING_SLEEP_TIME) { resetMediumTuning(); // idemo opet da mjerimo 2 blocka DAC_frame_1 = lastDAC; state = MediumState.MEASURING_BLOCK_1; } return(new TuningResult(lastDAC, TuningResult.Result.NOT_FINISHED)); } else if (state == MediumState.MEASURING_BLOCK_1) { slidingFrame_1.AddPoint(lastPhase); if (slidingFrame_1.finished) // Finished first block. If phase is crossing zero soon, do not measure block2, just set last calculated optimal dac. { double crossingZeroTime = getZerroCrosingTime(); if (crossingZeroTime >= 0 && crossingZeroTime < TUNNING_SLEEP_TIME + FRAME_SIZE) { if (lastOptimalDac != 0) { calculatedDAC = lastOptimalDac; // Crossing zero soon. Set optimal dac and do not make a measure block 2 state = MediumState.TUNING_SLEEP_1; // do not go to tuning state 2 (back to start). tunningSleepCounter = 0; writeServiceFile("Time: " + nTime + ". crossingZeroTime = " + crossingZeroTime + ". Use last Optimal DAC = " + lastOptimalDac); return(new TuningResult(lastOptimalDac, TuningResult.Result.NOT_FINISHED)); } } else { writeServiceFile("Time: " + nTime + ". crossingZeroTime not soon = " + crossingZeroTime + ". Measure block 2"); } state = MediumState.TUNING_SLEEP_2; // MEASURING_BLOCK_2; calculatedDAC = lastDAC + calculateDacStep(slidingFrame_1.phaseAvg_stop); // block_1.phaseAvg_stop); DAC_frame_2 = calculatedDAC; } else { calculatedDAC = lastDAC; } return(new TuningResult(calculatedDAC, TuningResult.Result.NOT_FINISHED)); } else if (state == MediumState.TUNING_SLEEP_2) { tunningSleepCounter++; if (tunningSleepCounter == TUNNING_SLEEP_TIME) { tunningSleepCounter = 0; state = MediumState.MEASURING_BLOCK_2; } return(new TuningResult(lastDAC, TuningResult.Result.NOT_FINISHED)); } else if (state == MediumState.MEASURING_BLOCK_2) { slidingFrame_2.AddPoint(lastPhase); if (slidingFrame_2.finished) //measure_blocks_2(lastDAC, lastPhase)) // zavrsio oba bloka { if (Math.Abs(slidingFrame_2.part_angle) < 2 && Math.Abs(slidingFrame_2.phaseAvg_stop) < 4 * Math.Pow(10, -9)) // blizu nule i lagano se mijenja { writeServiceFile("*********** going to fine tunning. frame2.stop = " + (slidingFrame_2.phaseAvg_stop * Math.Pow(10, 9)) + ", angle: " + slidingFrame_2.part_angle); state = MediumState.FINISHED; return(new TuningResult(lastDAC, TuningResult.Result.FINISHED)); } if (DAC_frame_1 < DAC_frame_2) // podigli smo DAC, faza bi trebala da opada u part 2 { if (slidingFrame_2.part_angle > slidingFrame_1.part_angle) // !!! NIJE KAO OCEKIVANO, faza porasla { calculatedDAC = lastDAC + calculateDacStep(slidingFrame_2.phaseAvg_stop); writeServiceFile("!!! GRESKA_1: Time: " + nTime + ".\tDAC_frame_1 = " + DAC_frame_1 + " start: " + slidingFrame_1.phaseAvg_start + ", stop: " + slidingFrame_1.phaseAvg_stop + ", angle: " + slidingFrame_1.part_angle + "\t\tDAC_frame_2 = " + DAC_frame_2 + " start: " + slidingFrame_2.phaseAvg_start + ", stop: " + slidingFrame_2.phaseAvg_stop + ", angle: " + slidingFrame_2.part_angle); writeServiceFile("GRESKA_1 novi DAC: " + calculatedDAC); state = MediumState.TUNING_SLEEP_1; return(new TuningResult(calculatedDAC, TuningResult.Result.NOT_FINISHED)); } } else if (DAC_frame_1 > DAC_frame_2) { // smanjili smo DAC, faza bi trebala da raste u part 2 if (slidingFrame_2.part_angle < slidingFrame_1.part_angle) // !!! NIJE KAO OCEKIVANO, faza opala { calculatedDAC = lastDAC + calculateDacStep(slidingFrame_2.phaseAvg_stop); writeServiceFile("!!! GRESKA_2: Time: " + nTime + ".\tDAC_frame_1 = " + DAC_frame_1 + " start: " + slidingFrame_1.phaseAvg_start + ", stop: " + slidingFrame_1.phaseAvg_stop + ", angle: " + slidingFrame_1.part_angle + "\t\tDAC_frame_2 = " + DAC_frame_2 + " start: " + slidingFrame_2.phaseAvg_start + ", stop: " + slidingFrame_2.phaseAvg_stop + ", angle: " + slidingFrame_2.part_angle); writeServiceFile("GRESKA_2 novi DAC: " + calculatedDAC); state = MediumState.TUNING_SLEEP_1; return(new TuningResult(calculatedDAC, TuningResult.Result.NOT_FINISHED)); } } calculateNewDac(nTime); state = MediumState.TUNING_SLEEP_1; } return(new TuningResult(calculatedDAC, TuningResult.Result.NOT_FINISHED)); } else { writeServiceFile("!!!! NE BI SMJELO DOCI OVDJE, State: " + state.ToString()); return(new TuningResult(lastDAC, TuningResult.Result.NOT_FINISHED)); } }
internal static string GetDisplayString(MediumState st) => st.ToString().Replace("MediumState_", "");