예제 #1
0
        public void EndProcess()
        {
            currProgress = cycleProgressEnum.HOLDING;
            try{
                CycleSideKick.Dispose();
            }
            catch (Exception ex) {
            }
            isRunning = false;

            foreach (var process in cycleProcesses)
            {
                process.EndProcess();
            }

            tracker.massDisch         = MassDischarged;
            tracker.endMass           = adc.ScaledNums[(int)ADC.ReadingTypes.Mass];
            tracker.massChange        = tracker.begMass - tracker.endMass;
            tracker.endRH             = adc.ScaledNums[(int)ADC.ReadingTypes.RH];
            tracker.endTemp           = adc.ScaledNums[(int)ADC.ReadingTypes.Temp];
            tracker.endTime           = DateTime.Now;
            machine.FillSensorSwitch -= StartDischarge;
            machine.TurnAllOff();
            cycleStopEvent?.Invoke();
            secondDrainCompleteFlag = false;
        }
예제 #2
0
 private void StartHold()
 {
     currProgress = cycleProgressEnum.HOLDING;
     Console.WriteLine("Hold Step: " + DateTime.Now);
     machine.TurnOff((int)Machine.OutputPins.Mist);
     machine.TurnOn((int)Machine.OutputPins.Distribution);
     machine.TurnOn((int)Machine.OutputPins.Blower);
     Task.Run(() => { cycleProcesses[(int)processEnum.DrainPump].StartProcess(); });
     Task.Run(() => {
         while ((DateTime.Now.Subtract(cycleStart) < TimeSpan.FromMinutes(10)))
         {
             Thread.Sleep(1000);
             if (!((DrainPump)cycleProcesses[(int)processEnum.DrainPump]).isRunning && !secondDrainCompleteFlag)
             {
                 CycleSideKick           = new System.Timers.Timer(Constants.SidekickMS);
                 CycleSideKick.Elapsed  += StopSideKick;
                 CycleSideKick.AutoReset = false;
                 secondDrainCompleteFlag = true;
                 machine.TurnOn((int)Machine.OutputPins.Sidekick);
                 CycleSideKick.Start();
             }
         }
         StartAeration();
     });
 }
예제 #3
0
 public AutoCycle(Machine _machine, ADC _adc, List <IProcessButton> _buttons, SummaryTracker _tracker)
 {
     machine              = _machine;
     adc                  = _adc;
     cycleProcesses       = _buttons;
     tracker              = _tracker;
     adc.OnAverageValues += UpdateEstTime;
     currProgress         = cycleProgressEnum.STANDBY;
 }
예제 #4
0
        private void RunCycle()
        {
            estCycleEnd = DateTime.Now.Add(estTimeLeft);
            machine.TurnOn((int)Machine.OutputPins.Sidekick);
            currProgress = cycleProgressEnum.FILLING;

            tracker.roomVolume      = BioShark_Blazor.Pages.Index.roomSize;
            tracker.begMass         = adc.ScaledNums[(int)ADC.ReadingTypes.Mass];
            tracker.begRH           = adc.ScaledNums[(int)ADC.ReadingTypes.RH];
            tracker.begTemp         = adc.ScaledNums[(int)ADC.ReadingTypes.Temp];
            CycleSideKick           = new System.Timers.Timer(Constants.SidekickMS);
            CycleSideKick.Elapsed  += FillMister;
            CycleSideKick.AutoReset = false;
            CycleSideKick.Start();
        }
예제 #5
0
        private async void StartDischarge()
        {
            currProgress      = cycleProgressEnum.DISCHARGING;
            cycleStart        = DateTime.Now; // Save the start time for the hold step
            tracker.startTime = cycleStart;

            machine.FillSensorSwitch -= StartDischarge;

            Console.WriteLine("Discharging... Start mass @ " + Math.Round(StartMass, 2));
            double TargetMass = machine.targetMass;

            cycleProcesses[(int)processEnum.RunPump].StartProcess(true);



            await Task.Run(() => {
                // Wait until the run pump saves the start mass
                while (((RunPumpAutoTrigger)(cycleProcesses[(int)processEnum.RunPump])).StartMass <= 0)
                {
                }

                StartMass = ((RunPumpAutoTrigger)(cycleProcesses[(int)processEnum.RunPump])).StartMass;
                while (MassDischarged < TargetMass && isRunning && StartMass > 0)
                {
                    MassDischarged = StartMass - adc.ScaledNums[(int)ADC.ReadingTypes.Mass];
                    Thread.Sleep(500);
                } // Wait until mass above target
                while (MassDischarged >= TargetMass && isRunning)
                {
                    MassDischarged = StartMass - adc.ScaledNums[(int)ADC.ReadingTypes.Mass];
                    if (adc.ScaledNums[(int)ADC.ReadingTypes.HPHR] > Constants.TargetAmt)
                    {
                        Console.WriteLine("PPM Target Reached");
                        cycleProcesses[(int)processEnum.RunPump].EndProcess();
                        StartHold();
                        break;
                    }
                    else if (MassDischarged > TargetMass *Constants.ExtraMassFactor)
                    {
                        Console.WriteLine("Ending Cycle Early, going to start");
                        EndProcess();
                        break;
                    }

                    Thread.Sleep(500);
                }
            });
        }
예제 #6
0
        private void StartAeration()
        {
            currProgress = cycleProgressEnum.AERATING;
            machine.TurnOff((int)Machine.OutputPins.Blower);
            machine.TurnOff((int)Machine.OutputPins.Heat);
            machine.TurnOff((int)Machine.OutputPins.Mist);
            machine.TurnOff((int)Machine.OutputPins.MistFan);

            machine.TurnOn((int)Machine.OutputPins.Cat);
            cycleProcesses[(int)processEnum.LROsc].StartProcess();
            while (((LROscillator)cycleProcesses[(int)processEnum.LROsc]).isRunning)
            {
                Thread.Sleep(1000);
            }

            EndProcess();
        }