Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
 internal static string GetDisplayString(MediumState st) => st.ToString().Replace("MediumState_", "");