Beispiel #1
0
 /// <summary>
 /// Вычисляет текущее значение параметра Нагрузка на долото
 /// </summary>
 /// <param name="v1">Давление в текущий момент</param>
 /// <param name="v2">Клинья в текущий момент</param>
 /// <param name="v3">Вес на крюке</param>
 /// <param name="v4">Вес колонны</param>
 /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
 /// <param name="locking_pressure">Блокировочное значение давления</param>
 /// <param name="r_weight">Возможные методы расчета состояния Вес на крюке</param>
 public void Calculate(P0004 v1, P0012 v2, P0102 v3, P0200 v4, float locking_weight_hook,
                       float locking_pressure, TechnologicalRegimeWeightHook r_weight)
 {
     if (slim.TryEnterWriteLock(300))
     {
         try
         {
             if (float.IsNaN(v3.Value) || float.IsNaN(v4.Value) || float.IsNaN(v1.Value))
             {
                 _value = float.NaN;
             }
             else
             {
                 _value = 0;
                 if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                 {
                     if (v1.Value > locking_pressure) // Pr>БЗ
                     {
                         _value = v4.Value - v3.Value;
                     }
                 }
             }
         }
         finally
         {
             slim.ExitWriteLock();
         }
     }
 }
Beispiel #2
0
 /// <summary>
 /// Вычисляет текущее значение параметра Нагрузка на долото
 /// </summary>
 /// <param name="v1">Давление в текущий момент</param>
 /// <param name="v2">Клинья в текущий момент</param>
 /// <param name="v3">Вес на крюке</param>
 /// <param name="v4">Вес колонны</param>
 /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
 /// <param name="locking_pressure">Блокировочное значение давления</param>
 /// <param name="r_weight">Возможные методы расчета состояния Вес на крюке</param>
 public void Calculate(P0004 v1, P0012 v2, P0102 v3, P0200 v4, float locking_weight_hook,
     float locking_pressure, TechnologicalRegimeWeightHook r_weight)
 {
     if (slim.TryEnterWriteLock(300))
     {
         try
         {
             if (float.IsNaN(v3.Value) || float.IsNaN(v4.Value) || float.IsNaN(v1.Value))
             {
                 _value = float.NaN;
             }
             else
             {
                 _value = 0;
                 if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                 {
                     if (v1.Value > locking_pressure) // Pr>БЗ
                     {
                         _value = v4.Value - v3.Value;
                     }
                 }
             }
         }
         finally
         {
             slim.ExitWriteLock();
         }
     }
 }
Beispiel #3
0
        /// <summary>
        /// Определяет состояние "Бурение" по параметрам давление и Нагрузка на долото
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="v2">Нагрузка на долото в текущий момент</param>
        /// <param name="locking_pressure">Блокировочное значение давления.</param>
        /// <param name="locking_value_load">Блокировочное значение нагрузки.</param>
        /// <param name="r_drilling">Определяет метод расчета режима бурения</param>
        /// <returns>Возвращает одно из трёх состояний: есть, нету, неизвестно</returns>
        public TProcResult StateDrillingPressureAndLoadBit(P0004 v1, P0201 v2, float locking_pressure,
            float locking_value_load, TechnologicalRegimDrilling r_drilling)
        {
            switch (r_drilling)
            {
                case TechnologicalRegimDrilling.Pressure:

                    return StateDrillingPressureInWell(v1, locking_pressure);

                case TechnologicalRegimDrilling.PressureAndLoad:

                    TProcResult result =  StateDrillingPressureInWell(v1, locking_pressure);
                    if (result == TProcResult.True)
                    {
                        return StateDrillingLoadOnBit(v2, locking_value_load);
                    }
                    else
                        return result;

                default:
                    break;
            }

            return TProcResult.Default;
        }
Beispiel #4
0
        /// <summary>
        /// Определяет состояние "Бурение" по параметрам давление и Нагрузка на долото
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="v2">Нагрузка на долото в текущий момент</param>
        /// <param name="locking_pressure">Блокировочное значение давления.</param>
        /// <param name="locking_value_load">Блокировочное значение нагрузки.</param>
        /// <param name="r_drilling">Определяет метод расчета режима бурения</param>
        /// <returns>Возвращает одно из трёх состояний: есть, нету, неизвестно</returns>
        public TProcResult StateDrillingPressureAndLoadBit(P0004 v1, P0201 v2, float locking_pressure,
                                                           float locking_value_load, TechnologicalRegimDrilling r_drilling)
        {
            switch (r_drilling)
            {
            case TechnologicalRegimDrilling.Pressure:

                return(StateDrillingPressureInWell(v1, locking_pressure));

            case TechnologicalRegimDrilling.PressureAndLoad:

                TProcResult result = StateDrillingPressureInWell(v1, locking_pressure);
                if (result == TProcResult.True)
                {
                    return(StateDrillingLoadOnBit(v2, locking_value_load));
                }
                else
                {
                    return(result);
                }

            default:
                break;
            }

            return(TProcResult.Default);
        }
Beispiel #5
0
        /// <summary>
        /// Вычисляет текущее значение параметра Время циркуляции
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="currentTime">История процесса</param>
        /// <param name="locking_pressure">Блокировочное значение давления</param>
        public void Calculate(P0004 v1, DateTime currentTime, float locking_pressure)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (is_change_time)
                    {
                        is_change_time     = false;
                        current_state_time = currentTime;

                        _value = exact_time_circulation / TimeSpan.TicksPerMillisecond;
                        _value = _value / 3600000;
                    }
                    else
                    {
                        if (float.IsNaN(v1.Value))
                        {
                            current_state_time = DateTime.MinValue;
                        }
                        else
                        {
                            if (v1.Value < locking_pressure)
                            {
                                current_state_time = DateTime.MinValue;
                            }
                            else
                            {
                                if (current_state_time == DateTime.MinValue)
                                {
                                    current_state_time = currentTime;
                                }
                                else
                                {
                                    DateTime _T = currentTime;
                                    long     lT = _T.Ticks - current_state_time.Ticks;

                                    exact_time_circulation += lT;

                                    _value = exact_time_circulation / TimeSpan.TicksPerMillisecond;

                                    _value             = _value / 3600000;
                                    current_state_time = _T;
                                }
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// Определят состояние "Бурение" по давлению в скважине
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="locking_pressure">Блокировочное значение давления</param>
        /// <returns>Возвращает одно из трёх состояний: есть, нету, неизвестно</returns>
        public TProcResult StateDrillingPressureInWell(P0004 v1, float locking_pressure)
        {
            if (!float.IsNaN(v1.Value))
            {
                if (v1.Value > locking_pressure)
                {
                    return TProcResult.True;
                }
                else
                    return TProcResult.False;
            }

            return TProcResult.Default;
        }
Beispiel #7
0
        /// <summary>
        /// Определят состояние "Бурение" по давлению в скважине
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="locking_pressure">Блокировочное значение давления</param>
        /// <returns>Возвращает одно из трёх состояний: есть, нету, неизвестно</returns>
        public TProcResult StateDrillingPressureInWell(P0004 v1, float locking_pressure)
        {
            if (!float.IsNaN(v1.Value))
            {
                if (v1.Value > locking_pressure)
                {
                    return(TProcResult.True);
                }
                else
                {
                    return(TProcResult.False);
                }
            }

            return(TProcResult.Default);
        }
Beispiel #8
0
        /// <summary>
        /// Вычисляет текущее значение параметра Время циркуляции
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="currentTime">История процесса</param>
        /// <param name="locking_pressure">Блокировочное значение давления</param>
        public void Calculate(P0004 v1, DateTime currentTime, float locking_pressure)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (is_change_time)
                    {
                        is_change_time = false;
                        current_state_time = currentTime;

                        _value = exact_time_circulation / TimeSpan.TicksPerMillisecond;
                        _value = _value / 3600000;
                    }
                    else
                    {
                        if (float.IsNaN(v1.Value))
                        {
                            current_state_time = DateTime.MinValue;
                        }
                        else
                        {
                            if (v1.Value < locking_pressure)
                            {
                                current_state_time = DateTime.MinValue;
                            }
                            else
                            {
                                if (current_state_time == DateTime.MinValue)
                                {
                                    current_state_time = currentTime;
                                }
                                else
                                {
                                    DateTime _T = currentTime;
                                    long lT = _T.Ticks - current_state_time.Ticks;

                                    exact_time_circulation += lT;

                                    _value = exact_time_circulation / TimeSpan.TicksPerMillisecond;

                                    _value = _value / 3600000;
                                    current_state_time = _T;
                                }
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Beispiel #9
0
        // -------------------- вспомогательные функции --------------------
        /// <summary>
        /// Вычисляет текущее значение параметра Состояние процесса бурения , если вес на крюке true
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="v2">Клинья в текущий момент</param>
        /// <param name="v3">Вес на крюке в текущий момент</param>
        /// <param name="v4">Скорость тальблока в текущий момент</param>
        /// <param name="v5">Обороты ротора в текущий момент</param>
        /// <param name="v6">Нагрузка на долото в текущий момент</param>
        /// <param name="v8">Положение инструмента в текущий момент</param>
        /// <param name="v9">Глубина забоя в текущий момент</param>
        /// <param name="currentTime">текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="interval_pzr">Интервал ПЗР</param>
        /// <param name="drilling_interval">Интервал бурения</param>
        /// <param name="size_bottom_hole_zone">Размер призабойной зоны</param>
        /// <param name="locking_pressure">Блокировочное значение давления</param>
        /// <param name="locking_value_rotor_speed">Блокировочное значение оборотов ротора</param>
        /// <param name="locking_value_load">Блокировочное значение нагрузки</param>
        /// <param name="locking_speed_talbloka">Блокировочное значение скорости тальблока</param>
        /// <param name="r_drilling">Метод расчета режима бурения</param>
        /// <param name="r_study">Метод расчета проработка</param>
        /// <param name="r_weight">Метод расчета технологического режима</param>
        private float TrueBranch(P0004 v1,
            P0012 v2,
            P0102 v3,
            P0103 v4,
            P0110 v5,
            P0201 v6,
            P0204 v8,
            P0205 v9,
            DateTime currentTime,
            float locking_weight_hook,
            float interval_pzr,
            float drilling_interval,
            float size_bottom_hole_zone,
            float locking_pressure,
            float locking_value_rotor_speed,
            float locking_value_load,
            float locking_speed_talbloka,
            TechnologicalRegimDrilling r_drilling,
            TechnologicalRegimStudy r_study,
            TechnologicalRegimeWeightHook r_weight)
        {
            float tLp = v9.Value - drilling_interval;
            float Lp = (interval_pzr >= tLp) ? tLp : interval_pzr;

            // Над забоем
            if (v8.Value > Lp) // Dd>Lp
            {
                if (!float.IsNaN(v1.Value))
                {
                    if (v8.Value <= (v9.Value - drilling_interval)) // Dd<Cd-Id
                    {// СПО
                        if (v1.Value > locking_pressure) // Pr>БЗ
                        {
                            switch (StudySpeedTalblokAndRotationRotor(v5, v4, locking_value_rotor_speed, locking_speed_talbloka, r_study))
                            {
                                case TProcResult.True:

                                    // Проработка

                                    tech_stage = "СПО";
                                    tech_regime = "Проработка";

                                    tech_hook = "Над забоем";
                                    return НадЗабоем_СПО_Проработка;

                                case TProcResult.False:

                                    // Промывка

                                    tech_stage = "СПО";
                                    tech_regime = "Промывка";

                                    tech_hook = "Над забоем";
                                    return НадЗабоем_СПО_Промывка;

                                default:

                                    tech_stage = string.Empty;
                                    tech_regime = string.Empty;

                                    tech_hook = string.Empty;
                                    return Техпроцесс_Default;
                            }
                        }
                        else
                        {
                            //СПО

                            tech_stage = "СПО";
                            tech_regime = "СПО";

                            tech_hook = "Над забоем";
                            return НадЗабоем_СПО_СПО;
                        }
                    }
                    else
                    {
                        // Бурение
                        if (v8.Value <= (v9.Value - size_bottom_hole_zone)) // В Pp?
                        {
                            // Не попали в призабойную зону
                            if (v1.Value > locking_pressure) // Pr>БЗ
                            {
                                switch (StudySpeedTalblokAndRotationRotor(v5, v4, locking_value_rotor_speed, locking_speed_talbloka, r_study))
                                {
                                    case TProcResult.True:

                                        // Проработка

                                        tech_stage = "Бурение";
                                        tech_regime = "Проработка";

                                        tech_hook = "Над забоем";
                                        return НадЗабоем_Бурение_Проработка;

                                    case TProcResult.False:

                                        // Промывка

                                        tech_stage = "Бурение";
                                        tech_regime = "Промывка";

                                        tech_hook = "Над забоем";
                                        return НадЗабоем_Бурение_Промывка;

                                    default:

                                        return Техпроцесс_Default;
                                }
                            }
                            else
                            {
                                //Наращивание

                                tech_stage = "Бурение";
                                tech_regime = "Наращивание";

                                tech_hook = "Над забоем";
                                return НадЗабоем_Бурение_Наращивание;
                            }
                        }
                        else
                        {
                            // Попали в призабойную зону
                            switch (StateDrillingPressureAndLoadBit(v1, v6, locking_pressure, locking_value_load, r_drilling)) // Pr>БЗ
                            {
                                case TProcResult.True:

                                    // Бурение

                                    tech_stage = "Бурение";
                                    tech_regime = "Бурение";

                                    tech_hook = "Над забоем";
                                    return НадЗабоем_Бурение_Бурение;

                                case TProcResult.False:

                                    //Наращивание

                                    tech_stage = "Бурение";
                                    tech_regime = "Наращивание";

                                    tech_hook = "Над забоем";
                                    return НадЗабоем_Бурение_Наращивание;

                                default:

                                    tech_stage = string.Empty;
                                    tech_regime = string.Empty;

                                    tech_hook = string.Empty;
                                    return Техпроцесс_Default;
                            }
                        }
                    }
                }
                else
                {
                    tech_stage = string.Empty;
                    tech_regime = string.Empty;

                    tech_hook = string.Empty;
                    return Техпроцесс_Default;
                }
            }
            else
            {
                //ПЗР
                tech_stage = "ПЗР";
                tech_regime = "ПЗР";

                tech_hook = "Над забоем";
                return НадЗабоем_ПЗР_ПЗР;
            }
        }
Beispiel #10
0
        /// <summary>
        /// Вычисляет текущее значение параметра Состояние процесса бурения
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="v2">Клинья в текущий момент</param>
        /// <param name="v3">Вес на крюке в текущий момент</param>
        /// <param name="v4">Скорость тальблока в текущий момент</param>
        /// <param name="v5">Обороты ротора в текущий момент</param>
        /// <param name="v6">Нагрузка на долото в текущий момент</param>
        /// <param name="v8">Положение инструмента в текущий момент</param>
        /// <param name="v9">Глубина забоя в текущий момент</param>
        /// <param name="currentTime">текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="interval_pzr">Интервал ПЗР</param>
        /// <param name="drilling_interval">Интервал бурения</param>
        /// <param name="size_bottom_hole_zone">Размер призабойной зоны</param>
        /// <param name="locking_pressure">Блокировочное значение давления</param>
        /// <param name="locking_value_rotor_speed">Блокировочное значение оборотов ротора</param>
        /// <param name="locking_value_load">Блокировочное значение нагрузки</param>
        /// <param name="locking_speed_talbloka">Блокировочное значение скорости тальблока</param>
        /// <param name="r_drilling">Метод расчета режима бурения</param>
        /// <param name="r_study">Метод расчета проработка</param>
        /// <param name="r_weight">Метод расчета технологического режима</param>
        public void Calculate(
            P0004 v1,
            P0012 v2,
            P0102 v3,
            P0103 v4,
            P0110 v5,
            P0201 v6,
            P0204 v8,
            P0205 v9,
            DateTime currentTime,
            float locking_weight_hook,
            float interval_pzr,
            float drilling_interval,
            float size_bottom_hole_zone,
            float locking_pressure,
            float locking_value_rotor_speed,
            float locking_value_load,
            float locking_speed_talbloka,
            TechnologicalRegimDrilling r_drilling,
            TechnologicalRegimStudy r_study,
            TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(v8.Value))
                    {
                        _value = Техпроцесс_Default;

                        tech_stage = string.Empty;
                        tech_regime = string.Empty;

                        tech_hook = string.Empty;

                        return;
                    }
                    else
                        if (float.IsNaN(v8.Value))
                        {
                            _value = Техпроцесс_Default;

                            tech_stage = string.Empty;
                            tech_regime = string.Empty;

                            tech_hook = string.Empty;

                            return;
                        }
                        else
                            if (float.IsNaN(v9.Value))
                            {
                                _value = Техпроцесс_Default;

                                tech_stage = string.Empty;
                                tech_regime = string.Empty;

                                tech_hook = string.Empty;

                                return;
                            }

                    TProcResult result = WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight);
                    switch (result)
                    {
                        case TProcResult.True:

                            _value = TrueBranch(v1, v2, v3, v4, v5, v6, v8, v9, currentTime,
                                locking_weight_hook, interval_pzr, drilling_interval, size_bottom_hole_zone,
                                locking_pressure, locking_value_rotor_speed, locking_value_load, locking_speed_talbloka,
                                r_drilling, r_study, r_weight);

                            break;

                        case TProcResult.False:

                            float tLp = v9.Value - drilling_interval;
                            float Lp = (interval_pzr >= tLp) ? tLp : interval_pzr;

                            // Пустой крюк
                            if (v8.Value > Lp) // Dd>Lp
                            {
                                if (v8.Value <= (v9.Value - drilling_interval)) // Dd<Cd-Id
                                {
                                    // СПО
                                    // СПО

                                    tech_stage = "СПО";
                                    tech_regime = "СПО";

                                    tech_hook = "Пустой крюк";
                                    _value = ПустойКрюк_СПО_СПО;
                                }
                                else
                                {
                                    // Бурение
                                    //Наращивание

                                    tech_stage = "Бурение";
                                    tech_regime = "Наращивание";

                                    tech_hook = "Пустой крюк";
                                    _value = ПустойКрюк_Бурение_Наращивание;
                                }
                            }
                            else
                            {
                                //ПЗР
                                //ПЗР
                                tech_stage = "ПЗР";
                                tech_regime = "ПЗР";

                                tech_hook = "Пустой крюк";
                                _value = ПустойКрюк_ПЗР_ПЗР;
                            }
                            break;

                        case TProcResult.Default:

                            tech_stage = string.Empty;
                            tech_regime = string.Empty;

                            tech_hook = string.Empty;
                            _value = Техпроцесс_Default;

                            break;

                        default:
                            break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Beispiel #11
0
        // -------------------- вспомогательные функции --------------------

        /// <summary>
        /// Вычисляет текущее значение параметра Состояние процесса бурения , если вес на крюке true
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="v2">Клинья в текущий момент</param>
        /// <param name="v3">Вес на крюке в текущий момент</param>
        /// <param name="v4">Скорость тальблока в текущий момент</param>
        /// <param name="v5">Обороты ротора в текущий момент</param>
        /// <param name="v6">Нагрузка на долото в текущий момент</param>
        /// <param name="v8">Положение инструмента в текущий момент</param>
        /// <param name="v9">Глубина забоя в текущий момент</param>
        /// <param name="currentTime">текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="interval_pzr">Интервал ПЗР</param>
        /// <param name="drilling_interval">Интервал бурения</param>
        /// <param name="size_bottom_hole_zone">Размер призабойной зоны</param>
        /// <param name="locking_pressure">Блокировочное значение давления</param>
        /// <param name="locking_value_rotor_speed">Блокировочное значение оборотов ротора</param>
        /// <param name="locking_value_load">Блокировочное значение нагрузки</param>
        /// <param name="locking_speed_talbloka">Блокировочное значение скорости тальблока</param>
        /// <param name="r_drilling">Метод расчета режима бурения</param>
        /// <param name="r_study">Метод расчета проработка</param>
        /// <param name="r_weight">Метод расчета технологического режима</param>
        private float TrueBranch(P0004 v1,
            P0012 v2,
            P0102 v3,
            P0103 v4,
            P0110 v5,
            P0201 v6,
            P0204 v8,
            P0205 v9,
            DateTime currentTime,
            float locking_weight_hook,
            float interval_pzr,
            float drilling_interval,
            float size_bottom_hole_zone,
            float locking_pressure,
            float locking_value_rotor_speed,
            float locking_value_load,
            float locking_speed_talbloka,
            TechnologicalRegimDrilling r_drilling,
            TechnologicalRegimStudy r_study,
            TechnologicalRegimeWeightHook r_weight)
        {
            float tLp = v9.Value - drilling_interval;
            float Lp = (interval_pzr >= tLp) ? tLp : interval_pzr;

            // Над забоем
            if (v8.Value > Lp) // Dd>Lp
            {
                if (!float.IsNaN(v1.Value))
                {
                    if (v8.Value <= (v9.Value - drilling_interval)) // Dd<Cd-Id
                    {// СПО
                        if (v1.Value > locking_pressure) // Pr>БЗ
                        {
                            switch (StudySpeedTalblokAndRotationRotor(v5, v4, locking_value_rotor_speed, locking_speed_talbloka, r_study))
                            {
                                case TProcResult.True:

                                    // Проработка

                                    tech_stage = "СПО";
                                    tech_regime = "Проработка";

                                    tech_hook = "Над забоем";
                                    return НадЗабоем_СПО_Проработка;

                                case TProcResult.False:

                                    // Промывка

                                    tech_stage = "СПО";
                                    tech_regime = "Промывка";

                                    tech_hook = "Над забоем";
                                    return НадЗабоем_СПО_Промывка;

                                default:

                                    tech_stage = string.Empty;
                                    tech_regime = string.Empty;

                                    tech_hook = string.Empty;
                                    return Техпроцесс_Default;
                            }
                        }
                        else
                        {
                            //СПО

                            tech_stage = "СПО";
                            tech_regime = "СПО";

                            tech_hook = "Над забоем";
                            return НадЗабоем_СПО_СПО;
                        }
                    }
                    else
                    {
                        // Бурение
                        if (v8.Value <= (v9.Value - size_bottom_hole_zone)) // В Pp?
                        {
                            // Не попали в призабойную зону
                            if (v1.Value > locking_pressure) // Pr>БЗ
                            {
                                switch (StudySpeedTalblokAndRotationRotor(v5, v4, locking_value_rotor_speed, locking_speed_talbloka, r_study))
                                {
                                    case TProcResult.True:

                                        // Проработка

                                        tech_stage = "Бурение";
                                        tech_regime = "Проработка";

                                        tech_hook = "Над забоем";
                                        return НадЗабоем_Бурение_Проработка;

                                    case TProcResult.False:

                                        // Промывка

                                        tech_stage = "Бурение";
                                        tech_regime = "Промывка";

                                        tech_hook = "Над забоем";
                                        return НадЗабоем_Бурение_Промывка;

                                    default:

                                        return Техпроцесс_Default;
                                }
                            }
                            else
                            {
                                //Наращивание

                                tech_stage = "Бурение";
                                tech_regime = "Наращивание";

                                tech_hook = "Над забоем";
                                return НадЗабоем_Бурение_Наращивание;
                            }
                        }
                        else
                        {
                            // Попали в призабойную зону
                            switch (StateDrillingPressureAndLoadBit(v1, v6, locking_pressure, locking_value_load, r_drilling)) // Pr>БЗ
                            {
                                case TProcResult.True:

                                    // Бурение

                                    tech_stage = "Бурение";
                                    tech_regime = "Бурение";

                                    tech_hook = "Над забоем";
                                    return НадЗабоем_Бурение_Бурение;

                                case TProcResult.False:

                                    //Наращивание

                                    tech_stage = "Бурение";
                                    tech_regime = "Наращивание";

                                    tech_hook = "Над забоем";
                                    return НадЗабоем_Бурение_Наращивание;

                                default:

                                    tech_stage = string.Empty;
                                    tech_regime = string.Empty;

                                    tech_hook = string.Empty;
                                    return Техпроцесс_Default;
                            }
                        }
                    }
                }
                else
                {
                    tech_stage = string.Empty;
                    tech_regime = string.Empty;

                    tech_hook = string.Empty;
                    return Техпроцесс_Default;
                }
            }
            else
            {
                //ПЗР
                tech_stage = "ПЗР";
                tech_regime = "ПЗР";

                tech_hook = "Над забоем";
                return НадЗабоем_ПЗР_ПЗР;
            }
        }
Beispiel #12
0
        /// <summary>
        /// Вычисляет текущее значение параметра Состояние процесса бурения
        /// </summary>
        /// <param name="v1">Давление в текущий момент</param>
        /// <param name="v2">Клинья в текущий момент</param>
        /// <param name="v3">Вес на крюке в текущий момент</param>
        /// <param name="v4">Скорость тальблока в текущий момент</param>
        /// <param name="v5">Обороты ротора в текущий момент</param>
        /// <param name="v6">Нагрузка на долото в текущий момент</param>
        /// <param name="v8">Положение инструмента в текущий момент</param>
        /// <param name="v9">Глубина забоя в текущий момент</param>
        /// <param name="currentTime">текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="interval_pzr">Интервал ПЗР</param>
        /// <param name="drilling_interval">Интервал бурения</param>
        /// <param name="size_bottom_hole_zone">Размер призабойной зоны</param>
        /// <param name="locking_pressure">Блокировочное значение давления</param>
        /// <param name="locking_value_rotor_speed">Блокировочное значение оборотов ротора</param>
        /// <param name="locking_value_load">Блокировочное значение нагрузки</param>
        /// <param name="locking_speed_talbloka">Блокировочное значение скорости тальблока</param>
        /// <param name="r_drilling">Метод расчета режима бурения</param>
        /// <param name="r_study">Метод расчета проработка</param>
        /// <param name="r_weight">Метод расчета технологического режима</param>
        public void Calculate(
            P0004 v1,
            P0012 v2,
            P0102 v3,
            P0103 v4,
            P0110 v5,
            P0201 v6,
            P0204 v8,
            P0205 v9,
            DateTime currentTime,
            float locking_weight_hook,
            float interval_pzr,
            float drilling_interval,
            float size_bottom_hole_zone,
            float locking_pressure,
            float locking_value_rotor_speed,
            float locking_value_load,
            float locking_speed_talbloka,
            TechnologicalRegimDrilling r_drilling,
            TechnologicalRegimStudy r_study,
            TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(v8.Value))
                    {
                        _value = Техпроцесс_Default;

                        tech_stage = string.Empty;
                        tech_regime = string.Empty;

                        tech_hook = string.Empty;

                        return;
                    }
                    else
                        if (float.IsNaN(v8.Value))
                        {
                            _value = Техпроцесс_Default;

                            tech_stage = string.Empty;
                            tech_regime = string.Empty;

                            tech_hook = string.Empty;

                            return;
                        }
                        else
                            if (float.IsNaN(v9.Value))
                            {
                                _value = Техпроцесс_Default;

                                tech_stage = string.Empty;
                                tech_regime = string.Empty;

                                tech_hook = string.Empty;

                                return;
                            }

                    TProcResult result = WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight);
                    switch (result)
                    {
                        case TProcResult.True:

                            _value = TrueBranch(v1, v2, v3, v4, v5, v6, v8, v9, currentTime,
                                locking_weight_hook, interval_pzr, drilling_interval, size_bottom_hole_zone,
                                locking_pressure, locking_value_rotor_speed, locking_value_load, locking_speed_talbloka,
                                r_drilling, r_study, r_weight);

                            break;

                        case TProcResult.False:

                            float tLp = v9.Value - drilling_interval;
                            float Lp = (interval_pzr >= tLp) ? tLp : interval_pzr;

                            // Пустой крюк
                            if (v8.Value > Lp) // Dd>Lp
                            {
                                if (v8.Value <= (v9.Value - drilling_interval)) // Dd<Cd-Id
                                {
                                    // СПО
                                    // СПО

                                    tech_stage = "СПО";
                                    tech_regime = "СПО";

                                    tech_hook = "Пустой крюк";
                                    _value = ПустойКрюк_СПО_СПО;
                                }
                                else
                                {
                                    // Бурение
                                    //Наращивание

                                    tech_stage = "Бурение";
                                    tech_regime = "Наращивание";

                                    tech_hook = "Пустой крюк";
                                    _value = ПустойКрюк_Бурение_Наращивание;
                                }
                            }
                            else
                            {
                                //ПЗР
                                //ПЗР
                                tech_stage = "ПЗР";
                                tech_regime = "ПЗР";

                                tech_hook = "Пустой крюк";
                                _value = ПустойКрюк_ПЗР_ПЗР;
                            }
                            break;

                        case TProcResult.Default:

                            tech_stage = string.Empty;
                            tech_regime = string.Empty;
                            
                            tech_hook = string.Empty;
                            _value = Техпроцесс_Default;

                            break;

                        default:
                            break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }