Пример #1
0
        private void ConfigureSensors()
        {
            mDataStore = DataStoreFactory.CreateDefaultDataStore(0, 0, 1200, 1200);

            mSensors = new List <Sensor>
            {
                new Sensor(SensorName.Filter(SignalName.Pressure), mSignals),
                new Sensor(SensorName.Steering(SignalName.Pressure), mSignals),
                new Sensor(SensorName.Cabel(SignalName.Pressure), mSignals),
                new Sensor(SensorName.Brake(SignalName.Pressure), mSignals),
                new Sensor(SensorName.Tank(SignalName.Level), mSignals),
                new Sensor(SensorName.Tank(SignalName.Temperature), mSignals)
            };


            mKeyboard = mSignals.GetSignal(SensorName.Keyboard());
            //mSignals.GetSignal(SensorName.Tank(SignalName.Level)).OnUpdate += signal => Console.WriteLine("Level: {0}", signal.Value);
            Keyboard.Init(mKeyboard);
        }
Пример #2
0
            public static void Init(IJournal journal, ISignalsFactory signals)
            {
                mLevelAlarmMin = signals.GetSignal("tank.level.alarm.min").Value;           // Уровень в баке, авария
                mLevelWarnMin  = signals.GetSignal("tank.level.warning.min").Value;         // Уровень в баке, предупреждение
                mTempWarnMax   = signals.GetSignal("tank.temperature.warning.max").Value;   // Т в баке, предупреждение
                mTempAlarmMax  = signals.GetSignal("tank.temperature.alarm.max").Value;     // Т в баке, авария

                IsNormalState = true;

                mTankTemperature = new Sensor(SensorName.Tank(SignalName.Temperature), signals);
                mTankLevel       = new Sensor(SensorName.Tank(SignalName.Level), signals)
                {
                    OnUpdate = value =>
                    {
                        if (value <= mLevelAlarmMin)
                        {
                            if (OnError != null)
                            {
                                OnError(SystemStateCodes.Alarm.TankLevelMin);
                            }

                            IsNormalState = false;
                            return;
                        }

                        if (value > mLevelWarnMin)
                        {
                            return;
                        }
                        if (OnWarning != null)
                        {
                            OnWarning(SystemStateCodes.Warning.TankLevelMin);
                        }

                        // датчик температуры конструктивно выполнен в одном корпусе с датчиком уровня, но датчик уровня является приоритетным
                        if (mTankTemperature.IsAvailable)
                        {
                            if (mTankTemperature.Value > mTempAlarmMax)
                            {
                                if (OnError != null)
                                {
                                    OnError(SystemStateCodes.Alarm.TankTemperatureMin);
                                }

                                IsNormalState = false;
                                return;
                            }

                            if (mTankTemperature.Value < mTempWarnMax)
                            {
                                return;
                            }
                            if (OnWarning != null)
                            {
                                OnWarning(SystemStateCodes.Warning.TankTemperatureMin);
                            }
                        }

                        IsNormalState = true;
                    }
                };
            }