Ejemplo n.º 1
0
 private void _vessel_VesselEvent(object sender, VesselValues vesselValues)
 {
     _logItem.LogItemVesselValues(vesselValues);
     VesselEvent?.Invoke(sender, vesselValues);
 }
Ejemplo n.º 2
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.º 3
0
  // add a message related to vessel resources
  public static void Post(Severity severity, VesselEvent e, Vessel v)
  {
    bool is_eva = v.isEVA;
    bool is_probe = Lib.CrewCapacity(v) == 0;
    string text = "";
    string subtext = "";

    // vessel
    if (!v.isEVA)
    {
      switch(e)
      {
        // electric charge
        case VesselEvent.ec:

          // manned vessel
          if (Lib.CrewCapacity(v) > 0)
          {
            switch(severity)
            {
              case Severity.relax:    text = "$VESSEL batteries recharged"; subtext = "The crew is allowed music again"; break;
              case Severity.warning:  text = "On $VESSEL, batteries are almost empty"; subtext = "We are squeezing the last bit of juice"; break;
              case Severity.danger:   text = "There is no more electric charge on $VESSEL"; subtext = "Life support systems are off"; break;
            }
          }
          // probe
          else
          {
            switch(severity)
            {
              case Severity.relax:    text = "$VESSEL batteries recharged";  subtext = "Systems are back online"; break;
              case Severity.warning:  text = "On $VESSEL, batteries are almost empty"; subtext = "Shutting down non-essential systems"; break;
              case Severity.danger:   text = "There is no more electric charge on $VESSEL"; subtext = "We lost control"; break;
            }
          }
          break;

        // food
        case VesselEvent.food:

          switch(severity)
          {
            case Severity.relax:      text = "$VESSEL food reserves restored"; subtext = "Double snack rations for everybody"; break;
            case Severity.warning:    text = "On $VESSEL, food reserves are getting low"; subtext = "Anything edible is being scrutinized"; break;
            case Severity.danger:     text = "There is no more food on $VESSEL"; subtext = "The crew prepare to the inevitable"; break;
          }
          break;

        // oxygen
        case VesselEvent.oxygen:

          switch(severity)
          {
            case Severity.relax:      text = "$VESSEL oxygen reserves restored"; subtext = "The crew is taking a breather"; break;
            case Severity.warning:    text = "On $VESSEL, oxygen reserves are dangerously low"; subtext = "There is mildly panic among the crew"; break;
            case Severity.danger:     text = "There is no more oxygen on $VESSEL"; subtext = "Everybody stop breathing"; break;
          }
          break;
      }
    }
    // eva
    else
    {
      switch(e)
      {
        // electric charge
        case VesselEvent.ec:

          switch(severity)
          {
            case Severity.relax:      text = "$VESSEL recharged the battery"; break;
            case Severity.warning:    text = "$VESSEL is running out of power"; break;
            case Severity.danger:     text = "$VESSEL is out of power"; break;
          }
          break;

        // oxygen
        case VesselEvent.oxygen:

          switch(severity)
          {
            case Severity.relax:      text = "$VESSEL oxygen tank has been refilled"; break;
            case Severity.warning:    text = "$VESSEL is running out of oxygen"; break;
            case Severity.danger:     text = "$VESSEL is out of oxygen"; break;
          }
          break;
      }
    }

    text = text.Replace("$VESSEL", "<color=ffffff>" + v.vesselName + "</color>");

    Post(severity, text, subtext);
  }