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); }
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); } } }; }