Ejemplo n.º 1
0
        void ProcessStart()
        {
            //StirrerDirection tempDirection = StirrerDirection.None;
            //int tempStirrerSpeed = 0;
            ////bool sendVesselStateState = false;
            //double vesselTemperature = 0.0;
            ////double tempVesselTemperature = 0.0;
            //double mashTemperature = 0.0;
            ////double tempMashTemperature = 0.0;
            //bool heater1On = false;
            //bool heater2On = false;
            //bool pump = false;
            //bool tempHeater1On = false;
            //bool tempHeater2On = false;
            //bool tempPump = false;

            var consumerTask = Task.Factory.StartNew(
                () =>
            {
                while (!_cancellationToken.IsCancellationRequested)
                {
                    //StirrerDirection tempDirection = StirrerDirection.None;
                    //int tempStirrerSpeed = 0;
                    //bool sendVesselStateState = false;
                    double vesselTemperature = 0.0;
                    //double tempVesselTemperature = 0.0;
                    double mashTemperature = 0.0;
                    //double tempMashTemperature = 0.0;
                    bool heater1On = false;
                    bool heater2On = false;
                    bool pump      = false;
                    //bool tempHeater1On = false;
                    //bool tempHeater2On = false;
                    //bool tempPump = false;

                    #region Temperature Reader

                    #region Read Vessel Temp
                    vesselTemperature = GetVesselTemperature();
                    #endregion

                    #region Read Mash Temp
                    mashTemperature = GetMashTemperature();
                    #endregion

                    #endregion

                    if (_run)
                    {
                        #region Controller

                        pump = true;

                        if (mashTemperature + HYSTERESYSUP >= _targetTemperature)     // temp reached
                        {
                            // heater off
                            heater1On = heater2On = false;
                            TargetTemperaturReached?.Invoke(this, mashTemperature);
                        }
                        else if (mashTemperature < _targetTemperature - HYSTERESYSDOWN)
                        {
                            if (vesselTemperature < mashTemperature + VESSELOVERRUN)
                            {
                                // heater on
                                heater1On = heater2On = true;
                            }
                            else
                            {
                                // heater off
                                heater1On = heater2On = false;
                            }
                        }

                        //if (tempHeater1On != heater1On || tempHeater2On != heater2On || tempPump != pump)
                        //{
                        //    //sendVesselStateState = true;
                        //    tempHeater1On = heater1On;
                        //    tempHeater2On = heater2On;
                        //    tempPump = pump;
                        //}

                        #endregion

                        #region Stirrer
                        //if (tempDirection != _stirrerDirection)
                        //{
                        //    //if (_stirrerDirection == StirrerDirection.None)
                        //    //{
                        //    //    // switch off
                        //    //}
                        //    //else if (_stirrerDirection == StirrerDirection.Left)
                        //    //{
                        //    //    // left on
                        //    //}
                        //    //else
                        //    //{
                        //    //    // right on
                        //    //}
                        //    tempDirection = _stirrerDirection;
                        //    //sendVesselStateState = true;
                        //}

                        //if (tempStirrerSpeed != _stirrerSpeed)
                        //{
                        //    // set Speed

                        //    tempStirrerSpeed = _stirrerSpeed;
                        //    //sendVesselStateState = true;
                        //}
                        #endregion

                        #region Set IO's
                        // set io's
                        if (!_emergencyOn)
                        {
                            // set io's as defined
//#if (!SIMULATOR)
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.StirrerLeftOut, _stirrerDirection == StirrerDirection.Left);
                            //_stirrerLeftPin.Write(_stirrerDirection == StirrerDirection.Left ? GpioPinValue.High : GpioPinValue.Low);
                            //Debug.WriteLine($"Stirrer Left: {_stirrerLeftPin.Read()}");
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.StirrerRightOut, _stirrerDirection == StirrerDirection.Right);
                            //_stirrerRightPin.Write(_stirrerDirection == StirrerDirection.Right ? GpioPinValue.High : GpioPinValue.Low);
                            //Debug.WriteLine($"Stirrer Right: {_stirrerRightPin.Read()}");
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.HeaterPumpOut, pump);
                            //_heaterPumpPin.Write(pump ? GpioPinValue.High : GpioPinValue.Low);
                            //Debug.WriteLine($"Pump: {_heaterPumpPin.Read()}");
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.Heater1Out, heater1On);
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.Heater2Out, heater2On);
                            //_heater1Pin.Write(heater1On ? GpioPinValue.High : GpioPinValue.Low);
                            //Debug.WriteLine($"Heater 1: {_heater1Pin.Read()}");
                            //_heater2Pin.Write(heater2On ? GpioPinValue.High : GpioPinValue.Low);
                            //Debug.WriteLine($"Heater 2: {_heater2Pin.Read()}");
//#endif
                        }
                        else
                        {
//#if (!SIMULATOR)
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.StirrerLeftOut, false);
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.StirrerRightOut, false);
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.HeaterPumpOut, false);
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.Heater1Out, false);
                            HardwareController.GetDefault().GetRelaisBoard().SetIO(HardwareDefinition.Heater2Out, false);

                            //_stirrerLeftPin.Write(GpioPinValue.Low);
                            //_stirrerRightPin.Write(GpioPinValue.Low);
                            //_heaterPumpPin.Write(GpioPinValue.Low);
                            //_heater1Pin.Write(GpioPinValue.Low);
                            //_heater2Pin.Write(GpioPinValue.Low);
//#endif
                        }
                        #endregion
                    }

                    //if (sendVesselStateState)
                    //{
                    #region Send Vessel State
                    var vesselValues = new VesselValues()
                    {
                        StirrerDirection       = _stirrerDirection,
                        StirrerSpeed           = _stirrerSpeed,
                        PumpOn                 = pump,
                        HeaterLevel1On         = heater1On,
                        HeaterLevel2On         = heater2On,
                        VesselTemperature      = vesselTemperature,
                        MashCurrentTemperature = mashTemperature,
                        MashTargetTemperature  = _targetTemperature,
                        EmergencyOn            = _emergencyOn
                    };

                    VesselEvent?.Invoke(this, vesselValues);
                    #endregion
                    //sendVesselStateState = false;
                    //}

                    // speep for x seconds
                    Thread.Sleep(SLEEPTIME);
                }
            }, _cancellationToken.Token);
        }
Ejemplo n.º 2
0
 private void _vessel_VesselEvent(object sender, VesselValues vesselValues)
 {
     _logItem.LogItemVesselValues(vesselValues);
     VesselEvent?.Invoke(sender, vesselValues);
 }