Esempio n. 1
0
File: P0207.cs Progetto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Подача
        /// </summary>
        /// <param name="v1">Глубина забоя в текущий момент</param>
        public void Calculate(P0205 v1)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (!float.IsNaN(v1.Value))
                    {
                        if (float.IsNaN(starting_point))
                        {
                            starting_point = v1.Value;
                        }

                        float vNew = 0;
                        if (v1.Value >= starting_point)
                        {
                            vNew = v1.Value - starting_point;
                        }
                        else
                            starting_point = v1.Value;

                        _value = vNew;
                    }
                    else
                        _value = float.NaN;

                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Esempio n. 2
0
File: P0204.cs Progetto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Положение инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="v2">Вес на крюке в текущий момент</param>
        /// <param name="v3">Длина инструмента в текущий момент</param>
        /// <param name="v4">Клинья АСУ</param>
        /// <param name="v5">Глубина забоя</param>
        /// <param name="currentTime">Текущее время технологического процесса</param>
        /// <param name="locking_weight_hook">Блокировочное_значение_веса_на_крюке</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0202 v3, P0012 v4, P0205 v5, DateTime currentTime, 
            float locking_weight_hook, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(_value)) _value = 0;
                    switch (v3.ModeProccess)
                    {
                        case P0202.TModeProcess.mpBase:

                            if ((WeightHookForWeightOrWedges(v2, v4, locking_weight_hook, r_weight)
                                == TProcResult.True) && !float.IsNaN(v1.Value))
                            {
                                _value = v3.Value - v1.Value;
                            }
                            break;

                        case P0202.TModeProcess.mpSetUser:

                            /*if ((WeightHookForWeightOrWedges(v2, v4, locking_weight_hook, r_weight)
                                                            == TProcResult.True) && !float.IsNaN(v1.Value))
                            {
                                _value = v3.Value - v1.Value;
                            }
                            else
                            {
                                _value = v3.Value;
                            }*/
                            break;

                        case P0202.TModeProcess.mpCMDzaboi:

                            //_value = v2.Value;
                            break;

                        case P0202.TModeProcess.mpCMDmodifyDepth:

                            break;

                        default:
                            break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Esempio n. 3
0
File: P0211.cs Progetto: slawer/sgt
 /// <summary>
 /// Вычисляет текущее значение параметра Над забоем
 /// </summary>
 /// <param name="Забой">Глубина забоя в текущий момент</param>
 /// <param name="Инструмент">Положение инструмента в текущий момент</param>
 public void Calculate(P0205 v1, P0204 v2)
 {
     if (slim.TryEnterWriteLock(300))
     {
         try
         {
             if (float.IsNaN(v1.Value) || float.IsNaN(v2.Value))
             {
                 _value = float.NaN;
             }
             else
                 _value = v1.Value - v2.Value;
         }
         finally
         {
             slim.ExitWriteLock();
         }
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Инициализирует новый экземпляр класса
        /// </summary>
        public Technology()
        {
            c_slim   = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
            cal_slim = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);

            p1 = new SGT.P0001(Guid.Empty);
            p2 = new SGT.P0002(Guid.Empty);

            p3 = new SGT.P0003(Guid.Empty);
            p4 = new SGT.P0004(Guid.Empty);

            p5 = new SGT.P0005(Guid.Empty);

            p6   = new SGT.P0006(Guid.Empty);
            p6_1 = new SGT.P06_1(Guid.Empty);

            p6_2 = new SGT.P06_2(Guid.Empty);
            p6_3 = new SGT.P06_3(Guid.Empty);

            p6_4 = new SGT.P06_4(Guid.Empty);
            p6_5 = new SGT.P06_5(Guid.Empty);

            p6_6 = new SGT.P06_6(Guid.Empty);
            p6_7 = new SGT.P06_7(Guid.Empty);

            p6_8 = new SGT.P06_8(Guid.Empty);
            p6_9 = new SGT.P06_9(Guid.Empty);

            p7   = new SGT.P0007(Guid.Empty);
            p7_1 = new SGT.P07_1(Guid.Empty);

            p7_2 = new SGT.P07_2(Guid.Empty);
            p7_3 = new SGT.P07_3(Guid.Empty);

            p7_4 = new SGT.P07_4(Guid.Empty);
            p7_5 = new SGT.P07_5(Guid.Empty);

            p7_6 = new SGT.P07_6(Guid.Empty);
            p7_7 = new SGT.P07_7(Guid.Empty);

            p7_8 = new SGT.P07_8(Guid.Empty);
            p7_9 = new SGT.P07_9(Guid.Empty);

            p7_10 = new SGT.P7_10(Guid.Empty);
            p7_11 = new SGT.P7_11(Guid.Empty);

            p7_12 = new SGT.P7_12(Guid.Empty);
            p7_13 = new SGT.P7_13(Guid.Empty);

            p8   = new SGT.P0008(Guid.Empty);
            p8_1 = new SGT.P08_1(Guid.Empty);

            p9   = new SGT.P0009(Guid.Empty);
            p9_1 = new SGT.P09_1(Guid.Empty);

            p9_2 = new SGT.P09_2(Guid.Empty);
            p9_3 = new SGT.P09_3(Guid.Empty);

            p9_4 = new SGT.P09_4(Guid.Empty);
            p9_5 = new SGT.P09_5(Guid.Empty);

            p9_6 = new SGT.P09_6(Guid.Empty);
            p9_7 = new SGT.P09_7(Guid.Empty);

            p9_8 = new SGT.P09_8(Guid.Empty);
            p9_9 = new SGT.P09_9(Guid.Empty);

            p9_10 = new SGT.P9_10(Guid.Empty);
            p9_11 = new SGT.P9_11(Guid.Empty);

            p9_12 = new SGT.P9_12(Guid.Empty);
            p9_13 = new SGT.P9_13(Guid.Empty);

            p10 = new P0010(Guid.Empty);

            p11   = new P0011(Guid.Empty);
            p11_1 = new P11_1(Guid.Empty);

            p12 = new P0012(Guid.Empty);
            p13 = new P0013(Guid.Empty);

            p14   = new P0014(Guid.Empty);
            p14_1 = new P14_1(Guid.Empty);

            p15 = new P0015(Guid.Empty);
            p16 = new P0016(Guid.Empty);

            p17 = new P0017(Guid.Empty);
            p18 = new P0018(Guid.Empty);

            p101 = new P0101(Guid.Empty);
            p102 = new P0102(Guid.Empty);

            p103 = new P0103(Guid.Empty);
            p104 = new P0104(Guid.Empty);

            p105 = new P0105(Guid.Empty);
            p106 = new P0106(Guid.Empty);

            p107 = new P0107(Guid.Empty);
            p108 = new P0108(Guid.Empty);

            p109 = new P0109(Guid.Empty);
            p110 = new P0110(Guid.Empty);

            p112 = new P0112(Guid.Empty);
            p113 = new P0113(Guid.Empty);

            p114 = new P0114(Guid.Empty);
            p116 = new P0116(Guid.Empty);

            p117 = new P0117(Guid.Empty);
            p118 = new P0118(Guid.Empty);

            p200 = new P0200(Guid.Empty);
            p201 = new P0201(Guid.Empty);

            p202 = new P0202(Guid.Empty);
            p203 = new P0203(Guid.Empty);

            p204 = new P0204(Guid.Empty);
            p205 = new P0205(Guid.Empty);

            p206 = new P0206(Guid.Empty);
            p207 = new P0207(Guid.Empty);

            p208 = new P0208(Guid.Empty);
            p209 = new P0209(Guid.Empty);

            p210 = new P0210(Guid.Empty);
            p211 = new P0211(Guid.Empty);

            p212 = new P0212(Guid.Empty);
            p213 = new P0213(Guid.Empty);

            currentTime = DateTime.MinValue;

            driller_console = -1;
            driller_console_weight_column = -1;
        }
Esempio n. 5
0
File: P0209.cs Progetto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Время бурения 1м проходки
        /// </summary>
        /// <param name="Забой">Глубина забоя в текущий момент</param>
        /// <param name="Состояние_процесса">Cостояние процесса бурения в текущий момент</param>
        /// <param name="history">История процесса</param>
        public void Calculate(P0205 v1, P0206 v2, DateTime currentTime)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(v1.Value) || float.IsNaN(v2.Value))
                    {
                        _value = 0;
                        current_node_drilling = float.NaN;
                    }
                    else
                    {
                        int _state = (int)Math.Round(v2.Value);
                        if (_state == НадЗабоем_Бурение_Бурение)
                        {
                            if (float.IsNaN(current_node_drilling))
                            {
                                current_node_drilling = v1.Value;
                                setGoalPoint();

                                _value = 0;
                                current_node_time = currentTime;
                            }
                            else
                            {
                                if (target_node < v1.Value)
                                {
                                    DateTime _T = currentTime;
                                    TimeSpan _dT = _T -current_node_time;

                                    double lT = _dT.Ticks;// / TimeSpan.TicksPerMillisecond;

                                    _value = (float)((lT / TimeSpan.TicksPerMinute) / (v1.Value - current_node_drilling));

                                    current_node_drilling = v1.Value;
                                    setGoalPoint();

                                    current_node_time = _T;
                                }
                            }
                        }
                        else
                        {
                            _value = 0;
                            current_node_drilling = float.NaN;
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Esempio n. 6
0
File: P0202.cs Progetto: slawer/sgt
        /// <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="currentTime">Текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0012 v3, P0204 v4, P0205 v5, P0203 v6,
                              DateTime currentTime, float locking_weight_hook, float size_layout_bottom_column,
                              float size_layout_top_column, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    switch (mode_proccess)
                    {
                    case TModeProcess.mpBase:

                        _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                        break;

                    case TModeProcess.mpSetUser:

                        mode_proccess = TModeProcess.mpBase;
                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            v4.Calculate(_value);
                        }

                        if (_value <= (size_layout_bottom_column + size_layout_top_column))
                        {
                            v6.CorrectLenghtInstrument(0.0f);
                            v6.Calculate(0.0f);
                        }
                        else
                        {
                            float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                            v6.CorrectLenghtInstrument(_tmp);
                        }
                        break;

                    case TModeProcess.mpCMDzaboi:

                        mode_proccess = TModeProcess.mpBase;

                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                        }
                        else
                        {
                            last_talblock = v1.Value;
                            weight_status = WeightStatus.wsWeight;

                            _value = v5.Value + v1.Value;

                            if (_value <= (size_layout_bottom_column + size_layout_top_column))
                            {
                                v6.CorrectLenghtInstrument(0.0f);
                                v6.Calculate(0.0f);
                            }
                            else
                            {
                                float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                v6.CorrectLenghtInstrument(_tmp);
                            }
                        }
                        break;

                    case TModeProcess.mpCMDmodifyDepth:

                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            weight_status = WeightStatus.wsClear;
                            if (v5.Value < _value)
                            {
                                _value = v5.Value;
                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }

                            v4.Calculate(_value);
                        }
                        else
                        {
                            last_talblock = v1.Value;
                            weight_status = WeightStatus.wsWeight;

                            if (v5.Value < (_value - v1.Value))
                            {
                                _value = v5.Value + v1.Value;
                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }
                        }

                        mode_proccess = TModeProcess.mpBase;
                        break;

                    default:
                        break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Esempio n. 7
0
File: P0202.cs Progetto: slawer/sgt
        /// <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="currentTime">Текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0012 v3, P0204 v4, P0205 v5, P0203 v6,
            DateTime currentTime, float locking_weight_hook, float size_layout_bottom_column, 
            float size_layout_top_column, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    switch (mode_proccess)
                    {
                        case TModeProcess.mpBase:

                            _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                            break;

                        case TModeProcess.mpSetUser:

                            mode_proccess = TModeProcess.mpBase;
                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                v4.Calculate(_value);
                            }

                            if (_value <= (size_layout_bottom_column + size_layout_top_column))
                            {
                                v6.CorrectLenghtInstrument(0.0f);
                                v6.Calculate(0.0f);
                            }
                            else
                            {
                                float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                v6.CorrectLenghtInstrument(_tmp);
                            }
                            break;

                        case TModeProcess.mpCMDzaboi:

                            mode_proccess = TModeProcess.mpBase;

                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                            }
                            else
                            {
                                last_talblock = v1.Value;
                                weight_status = WeightStatus.wsWeight;

                                _value = v5.Value + v1.Value;

                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }
                            break;

                        case TModeProcess.mpCMDmodifyDepth:

                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                weight_status = WeightStatus.wsClear;
                                if (v5.Value < _value)
                                {
                                    _value = v5.Value;
                                    if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                    {
                                        v6.CorrectLenghtInstrument(0.0f);
                                        v6.Calculate(0.0f);
                                    }
                                    else
                                    {
                                        float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                        v6.CorrectLenghtInstrument(_tmp);
                                    }
                                }

                                v4.Calculate(_value);
                            }
                            else
                            {
                                last_talblock = v1.Value;
                                weight_status = WeightStatus.wsWeight;

                                if (v5.Value < (_value - v1.Value))
                                {
                                    _value = v5.Value + v1.Value;
                                    if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                    {
                                        v6.CorrectLenghtInstrument(0.0f);
                                        v6.Calculate(0.0f);
                                    }
                                    else
                                    {
                                        float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                        v6.CorrectLenghtInstrument(_tmp);
                                    }
                                }
                            }

                            mode_proccess = TModeProcess.mpBase;
                            break;

                        default:
                            break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Инициализирует новый экземпляр класса
        /// </summary>
        public Technology()
        {
            c_slim = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
            cal_slim = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);

            p1 = new SGT.P0001(Guid.Empty);
            p2 = new SGT.P0002(Guid.Empty);

            p3 = new SGT.P0003(Guid.Empty);
            p4 = new SGT.P0004(Guid.Empty);

            p5 = new SGT.P0005(Guid.Empty);

            p6 = new SGT.P0006(Guid.Empty);
            p6_1 = new SGT.P06_1(Guid.Empty);

            p6_2 = new SGT.P06_2(Guid.Empty);
            p6_3 = new SGT.P06_3(Guid.Empty);

            p6_4 = new SGT.P06_4(Guid.Empty);
            p6_5 = new SGT.P06_5(Guid.Empty);

            p6_6 = new SGT.P06_6(Guid.Empty);
            p6_7 = new SGT.P06_7(Guid.Empty);

            p6_8 = new SGT.P06_8(Guid.Empty);
            p6_9 = new SGT.P06_9(Guid.Empty);

            p7 = new SGT.P0007(Guid.Empty);
            p7_1 = new SGT.P07_1(Guid.Empty);

            p7_2 = new SGT.P07_2(Guid.Empty);
            p7_3 = new SGT.P07_3(Guid.Empty);

            p7_4 = new SGT.P07_4(Guid.Empty);
            p7_5 = new SGT.P07_5(Guid.Empty);

            p7_6 = new SGT.P07_6(Guid.Empty);
            p7_7 = new SGT.P07_7(Guid.Empty);

            p7_8 = new SGT.P07_8(Guid.Empty);
            p7_9 = new SGT.P07_9(Guid.Empty);

            p7_10 = new SGT.P7_10(Guid.Empty);
            p7_11 = new SGT.P7_11(Guid.Empty);

            p7_12 = new SGT.P7_12(Guid.Empty);
            p7_13 = new SGT.P7_13(Guid.Empty);

            p8 = new SGT.P0008(Guid.Empty);
            p8_1 = new SGT.P08_1(Guid.Empty);

            p9 = new SGT.P0009(Guid.Empty);
            p9_1 = new SGT.P09_1(Guid.Empty);

            p9_2 = new SGT.P09_2(Guid.Empty);
            p9_3 = new SGT.P09_3(Guid.Empty);

            p9_4 = new SGT.P09_4(Guid.Empty);
            p9_5 = new SGT.P09_5(Guid.Empty);

            p9_6 = new SGT.P09_6(Guid.Empty);
            p9_7 = new SGT.P09_7(Guid.Empty);

            p9_8 = new SGT.P09_8(Guid.Empty);
            p9_9 = new SGT.P09_9(Guid.Empty);

            p9_10 = new SGT.P9_10(Guid.Empty);
            p9_11 = new SGT.P9_11(Guid.Empty);

            p9_12 = new SGT.P9_12(Guid.Empty);
            p9_13 = new SGT.P9_13(Guid.Empty);

            p10 = new P0010(Guid.Empty);

            p11 = new P0011(Guid.Empty);
            p11_1 = new P11_1(Guid.Empty);

            p12 = new P0012(Guid.Empty);
            p13 = new P0013(Guid.Empty);

            p14 = new P0014(Guid.Empty);
            p14_1 = new P14_1(Guid.Empty);

            p15 = new P0015(Guid.Empty);
            p16 = new P0016(Guid.Empty);

            p17 = new P0017(Guid.Empty);
            p18 = new P0018(Guid.Empty);

            p101 = new P0101(Guid.Empty);
            p102 = new P0102(Guid.Empty);

            p103 = new P0103(Guid.Empty);
            p104 = new P0104(Guid.Empty);

            p105 = new P0105(Guid.Empty);
            p106 = new P0106(Guid.Empty);

            p107 = new P0107(Guid.Empty);
            p108 = new P0108(Guid.Empty);

            p109 = new P0109(Guid.Empty);
            p110 = new P0110(Guid.Empty);

            p112 = new P0112(Guid.Empty);
            p113 = new P0113(Guid.Empty);

            p114 = new P0114(Guid.Empty);
            p116 = new P0116(Guid.Empty);

            p117 = new P0117(Guid.Empty);
            p118 = new P0118(Guid.Empty);

            p200 = new P0200(Guid.Empty);
            p201 = new P0201(Guid.Empty);

            p202 = new P0202(Guid.Empty);
            p203 = new P0203(Guid.Empty);

            p204 = new P0204(Guid.Empty);
            p205 = new P0205(Guid.Empty);

            p206 = new P0206(Guid.Empty);
            p207 = new P0207(Guid.Empty);

            p208 = new P0208(Guid.Empty);
            p209 = new P0209(Guid.Empty);

            p210 = new P0210(Guid.Empty);
            p211 = new P0211(Guid.Empty);

            p212 = new P0212(Guid.Empty);
            p213 = new P0213(Guid.Empty);

            currentTime = DateTime.MinValue;

            driller_console = -1;
            driller_console_weight_column = -1;
        }
Esempio n. 9
0
File: P0206.cs Progetto: slawer/sgt
        // -------------------- вспомогательные функции --------------------
        /// <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 НадЗабоем_ПЗР_ПЗР;
            }
        }
Esempio n. 10
0
File: P0206.cs Progetto: slawer/sgt
        /// <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();
                }
            }
        }
Esempio n. 11
0
File: P0208.cs Progetto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Мех. скорость проходки
        /// </summary>
        /// <param name="v1">Глубина забоя в текущий момент</param>
        /// <param name="v2">Cостояние процесса бурения в текущий момент</param>
        /// <param name="currentTime">История процесса</param>
        public void Calculate(P0205 v1, P0206 v2, DateTime currentTime)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    if (float.IsNaN(v1.Value) || float.IsNaN(v2.Value))
                    {
                        _value = float.NaN;
                        current_node_mech_speed = float.NaN;
                    }
                    else
                    {
                        int _state = (int)Math.Round(v2.Value);
                        if (_state == НадЗабоем_Бурение_Бурение)
                        {
                            if (float.IsNaN(current_node_mech_speed))
                            {
                                current_node_mech_speed = v1.Value;
                                setGoalPoint();

                                _value = 0;
                                current_node_time = currentTime;
                            }
                            else
                            {
                                if (target_node < v1.Value)
                                {
                                    DateTime _T = currentTime;
                                    TimeSpan _dT = _T - current_node_time;

                                    double _deltaT = _dT.Ticks;
                                    _deltaT = (_deltaT / TimeSpan.TicksPerHour); // время в часах!

                                    _value = (float)(((double)v1.Value - (double)current_node_mech_speed) / _deltaT);
                                    current_node_mech_speed = v1.Value;

                                    setGoalPoint();
                                    current_node_time = _T;
                                }
                            }
                        }
                        else
                        {
                            _value = 0;
                            current_node_mech_speed = float.NaN;
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Esempio n. 12
0
File: P0206.cs Progetto: slawer/sgt
        // -------------------- вспомогательные функции --------------------

        /// <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 НадЗабоем_ПЗР_ПЗР;
            }
        }
Esempio n. 13
0
File: P0206.cs Progetto: slawer/sgt
        /// <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();
                }
            }
        }