Example #1
0
        public virtual void Save(BinaryWriter outf)
        {
            BatterySwitch.Save(outf);

            outf.Write(FrontElectricTrainSupplyCableConnected);

            outf.Write(ElectricTrainSupplyState.ToString());
            outf.Write(LowVoltagePowerSupplyState.ToString());
            outf.Write(BatteryState.ToString());
            outf.Write(VentilationState.ToString());
            outf.Write(HeatingState.ToString());
            outf.Write(AirConditioningState.ToString());

            outf.Write(HeatFlowRateW);
        }
        public void ManageState()
        {
            if (_duration > TimeSpan.Zero)
            {
                _duration = _duration.Subtract(new TimeSpan(0, 0, 1));
            }

            if (ProcessControl.Instance.CO2 > 0)
            {
                if (_ventilationState == VentilationState.Stopped)
                {
                    if (ProcessControl.Instance.CO2 > (ProcessControl.Instance.TargetCO2 + CO2_TOLERANCE))
                    {
                        if (ProcessControl.Instance.TargetCO2 > 0)
                        {
                            _ventilationState = VentilationState.Started;
                            _trapState = TrapStateEnum.Opened;
                            _fanState = FanStateEnum.Running;
                        }
                    }
                }
                else if (_ventilationState == VentilationState.Started)
                {
                    if (ProcessControl.Instance.CO2 <= ProcessControl.Instance.TargetCO2)
                    {
                        _ventilationState = VentilationState.Stopped;
                        _duration = TimeSpan.Zero;
                        _toggleVentilationState = false;
                        _ventilationStandby = false;
                    }
                }
            }
            else
            {
                _ventilationState = VentilationState.Stopped;
                _duration = TimeSpan.Zero;
                _toggleVentilationState = false;
                _ventilationStandby = false;
            }

            //////////////////////////////////////////////////////////////////

            if (_ventilationState == VentilationState.Started)
            {
                if (_duration == TimeSpan.Zero)
                {
                    if (_toggleVentilationState)
                    {
                        _duration = new TimeSpan(0, 0, _intervalTargetMinutes);
                        _ventilationStandby = true;

                        _trapState = TrapStateEnum.Closed;
                        _fanState = FanStateEnum.Stopped;
                    }
                    else
                    {
                        _duration = new TimeSpan(0, 0, _durationTargetSeconds);
                        _ventilationStandby = false;
                    }

                    _toggleVentilationState = !_toggleVentilationState;
                }
            }

            //////////////////////////////////////////////////////////////////

            if (ProcessControl.Instance.RelativeHumidity > 0)
            {
                if (_trapState == TrapStateEnum.Closed)
                {
                    if (ProcessControl.Instance.RelativeHumidity >= (ProcessControl.Instance.TargetRelativeHumidity + RELATIVE_HUMIDITY_TRAP_DELTA))
                    {
                        if (ProcessControl.Instance.TargetRelativeHumidity > 0 || (_ventilationState == VentilationState.Started && _ventilationStandby == false))
                        {
                            _trapState = TrapStateEnum.Opened;
                        }
                    }
                    else if (_ventilationState == VentilationState.Started && _ventilationStandby == false)
                    {
                        _trapState = TrapStateEnum.Opened;
                    }
                }
                else if (_trapState == TrapStateEnum.Opened)
                {
                    if (_ventilationState != VentilationState.Started)
                    {
                        if ((ProcessControl.Instance.RelativeHumidity < (ProcessControl.Instance.TargetRelativeHumidity + RELATIVE_HUMIDITY_TRAP_DELTA))
                            || ProcessControl.Instance.TargetRelativeHumidity == 0)
                        {
                            _trapState = TrapStateEnum.Closed;
                        }
                    }
                }

                if (_fanState == FanStateEnum.Stopped)
                {
                    if (ProcessControl.Instance.RelativeHumidity >= (ProcessControl.Instance.TargetRelativeHumidity + RELATIVE_HUMIDITY_FAN_DELTA))
                    {
                        if (ProcessControl.Instance.TargetRelativeHumidity > 0 || (_ventilationState == VentilationState.Started && _ventilationStandby == false))
                        {
                            _fanState = FanStateEnum.Running;
                        }
                    }
                    else if (_ventilationState == VentilationState.Started && _ventilationStandby == false)
                    {
                        _fanState = FanStateEnum.Running;
                    }
                }
                else if (_fanState == FanStateEnum.Running)
                {
                    if (_ventilationState != VentilationState.Started)
                    {
                        if ((ProcessControl.Instance.RelativeHumidity < (ProcessControl.Instance.TargetRelativeHumidity + RELATIVE_HUMIDITY_TRAP_DELTA + 1))
                            || ProcessControl.Instance.TargetRelativeHumidity == 0)
                        {
                            _fanState = FanStateEnum.Stopped;
                        }
                    }
                }
            }
            else
            {
                _trapState = TrapStateEnum.Closed;
                _fanState = FanStateEnum.Stopped;
            }

            if (ProcessControl.Instance.TargetCO2 == 0)
            {
                _ventilationState = VentilationState.Stopped;
                _duration = TimeSpan.Zero;
                _toggleVentilationState = false;
                _ventilationStandby = false;
            }

            if (ProcessControl.Instance.TargetRelativeHumidity == 0 && ProcessControl.Instance.TargetCO2 == 0)
            {
                _trapState = TrapStateEnum.Closed;
                _fanState = FanStateEnum.Stopped;
            }

            if (ProcessControl.Instance.Temperature > ProcessControl.Instance.TemperatureMax)
            {
                _trapState = TrapStateEnum.Opened;
            }

            if (_overHeatProtection == false)
            {
                if (ProcessControl.Instance.Temperature > ProcessControl.Instance.TargetTemperature + 0.2)
                {
                    _trapState = TrapStateEnum.Opened;
                    _fanState = FanStateEnum.Running;
                    _overHeatProtection = true;
                }
            }
            if (_overHeatProtection)
            {
                if (ProcessControl.Instance.Temperature > ProcessControl.Instance.TargetTemperature + 0.1)
                {
                    _trapState = TrapStateEnum.Opened;
                    _fanState = FanStateEnum.Running;
                }
                else
                {
                    _overHeatProtection = false;
                }
            }

            SetOutputState();
        }
        public void OnUpdateVentilationData(FanStateEnum fanState, TrapStateEnum trapState, VentilationState ventilationState,
                                            String ventilationDuration, int ventilationIntervalTarget, int ventilationDurationTarget,
                                            bool ventilationStandby)
        {
            try
              {
            String ventilationTxt = "Ventilation: ??";

            if (ventilationState == VentilationState.Stopped)
            {
                ventilationTxt = "Ventilation: OFF";

                if (ventilationDuration == "00:00:00")
                {
                    ventilationOnOff.Foreground = Brushes.Black;
                }
                else
                {
                    ventilationOnOff.Foreground = Brushes.OrangeRed;
                }
            }
            else if (ventilationState == VentilationState.Started)
            {
                if (ventilationStandby)
                {
                    ventilationTxt = "Ventilation: OFF";
                    ventilationOnOff.Foreground = Brushes.OrangeRed;
                }
                else
                {
                    ventilationTxt = "Ventilation: ON";
                    ventilationOnOff.Foreground = Brushes.Green;
                }
            }

            ventilationOnOff.Content = ventilationTxt;

            if (ventilationIntervalTarget != double.MaxValue)
            {
                if (ventilationIntervalTxtBox.Text == "????")
                {
                    ventilationIntervalTxtBox.Text = ventilationIntervalTarget.ToString();
                }
            }

            if (ventilationDurationTarget != double.MaxValue)
            {
                if (ventilationDurationTxtBox.Text == "????")
                {
                    ventilationDurationTxtBox.Text = ventilationDurationTarget.ToString();
                }
            }

            ventilationOnOff.Content += " [ " + ventilationDuration + " ] ";
              }
              catch (Exception ex)
              {
            MessageBox.Show(ex.ToString());
              }
        }