Example #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);
        }
Example #2
0
            public static void Init(IJournal journal, ISignalsFactory signals)
            {
                mPressureAlarmMin     = signals.GetSignal("pump.alarm.pressure.min").Value;
                mPressureAlarmMax     = signals.GetSignal("pump.alarm.pressure.max").Value;
                mStartTrackingTimeout = signals.GetSignal("pump.alarm.startup.timeout").Value;

                mFilterPressureDifferenceWarnMax  = signals.GetSignal("filter.pressure.warning.max").Value;
                mFilterPressureDifferenceAlarmMax = signals.GetSignal("filter.pressure.alarm.max").Value;

                // разница по давлению актуальна только при наличии датчика в гидромагистрали кузова, т.е. в нашем случае - рулевого
                mFilterPressure = new Sensor(SensorName.Filter(SignalName.Pressure), signals);

                // датчик давления в системе рулевого и его обработка
                mSteeringPressure = new Sensor(SensorName.Steering(SignalName.Pressure), signals)
                {
                    OnUpdate = value =>
                    {
                        if (mStartAt == DateTime.MaxValue)
                        {
                            return;
                        }

                        if (DateTime.Now.Subtract(mStartAt).TotalSeconds < mStartTrackingTimeout)
                        {
                            return;
                        }

                        if ((mPressureAlarmMax > value) && (value > mPressureAlarmMin))
                        {
                            return;
                        }

                        if (OnError != null)
                        {
                            OnError(SystemStateCodes.Alarm.SystemPressureOutOfRange);
                            return;
                        }

                        if (!mFilterPressure.IsAvailable)
                        {
                            return;
                        }

                        // проверка на разницу давления на фильтре, если датчик давления перед фильтром доступен
                        var filterDifference = Math.Abs(value - mFilterPressure.Value);
                        if (filterDifference > mFilterPressureDifferenceAlarmMax)
                        {
                            if (OnError != null)
                            {
                                OnError(SystemStateCodes.Alarm.FilterPressureMax);
                                return;
                            }
                        }

                        if (!(filterDifference > mFilterPressureDifferenceWarnMax))
                        {
                            return;
                        }
                        if (OnWarning != null)
                        {
                            OnWarning(SystemStateCodes.Warning.FilterPressureMax);
                        }
                    }
                };
            }