private void _vessel_VesselEvent(object sender, VesselValues vesselValues) { _logItem.LogItemVesselValues(vesselValues); VesselEvent?.Invoke(sender, vesselValues); }
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); }
// 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); }