Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        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));
            }
        }
Ejemplo n.º 3
0
 public void RecoredRGRFromLoad()
 {
     //constVolume = _app.Tech_volume;
     stateRgr = StateRGR.Pressed;
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Запись РГР
 /// </summary>
 public void RecordRGR()
 {
     ConstVolume = _tech.Volume.Value;
     stateRgr = StateRGR.Pressed;
 }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 public void RecoredRGRFromLoad()
 {
     //constVolume = _app.Tech_volume;
     stateRgr = StateRGR.Pressed;
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Запись РГР
 /// </summary>
 public void RecordRGR()
 {
     ConstVolume = _tech.Volume.Value;
     stateRgr    = StateRGR.Pressed;
 }