private ReaderWriterLockSlim slim_namestage; // синхронизатор имени этапа /// <summary> /// Инициализирует новый экземпляр класса /// </summary> public TechStage(Tech tech) { if (tech != null) { _tech = tech; mutex = new Mutex(); name_stg = string.Empty; slim_num = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_time = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_state = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_consumption = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_volume = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_density = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_pressure = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_temperature = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_namestage = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); state = StageState.Default; stateRgr = StateRGR.Unpressed; } else { ErrorHandler.WriteToLog(this, new ErrorArgs("Не удалось получить экземпляр приложения этапу", ErrorType.Fatal)); } }
private Tech _tech; // технология #endregion Fields #region Constructors /// <summary> /// Инициализирует новый экземпляр класса /// </summary> public TechStage(Tech tech) { if (tech != null) { _tech = tech; mutex = new Mutex(); name_stg = string.Empty; slim_num = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_time = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_state = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_consumption = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_volume = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_density = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_pressure = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_temperature = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); slim_namestage = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); state = StageState.Default; stateRgr = StateRGR.Unpressed; } else { ErrorHandler.WriteToLog(this, new ErrorArgs("Не удалось получить экземпляр приложения этапу", ErrorType.Fatal)); } }
public void RecoredRGRFromLoad() { //constVolume = _app.Tech_volume; stateRgr = StateRGR.Pressed; }
/// <summary> /// Запись РГР /// </summary> public void RecordRGR() { ConstVolume = _tech.Volume.Value; stateRgr = StateRGR.Pressed; }
private float constKoef = 1; // поправочный коэффициент /// <summary> /// Вычислить объем расходомера /// </summary> public bool Calculate(StateRGR rgrState) { bool blocked = false; bool retValue = false; try { if (_mutex.WaitOne(100)) { blocked = true; switch (rgrState) { case StateRGR.Pressed: if (float.IsNaN(lastVolume) || float.IsInfinity(lastVolume) || float.IsPositiveInfinity(lastVolume) || float.IsNegativeInfinity(lastVolume)) { lastVolume = _volume.Value; } float currentVolume = _volume.Value; if (lastVolume > currentVolume) { ConstVolume = ConstVolume - (lastVolume - currentVolume); lastVolume = currentVolume; retValue = true; } CurrentConsumption = _consumption.Value * CorrectionFactor; float deltaVolume = (currentVolume - constVolume); if (deltaVolume >= 0) { CurrentVolume = deltaVolume * CorrectionFactor + s; lastVolume = currentVolume; } break; case StateRGR.Unpressed: CurrentVolume = 0.0f; CurrentConsumption = 0.0f; break; default: break; } } } finally { if (blocked) { _mutex.ReleaseMutex(); } } return(retValue); }