Ejemplo n.º 1
0
Archivo: P0202.cs Proyecto: slawer/sgt
        /// <summary>
        /// Инициализирует новый экземпляр класса
        /// </summary>
        /// <param name="p_identifier">Идентификатор параметра</param>
        public P0202(Guid p_identifier)
            : base(p_identifier, "P0202", "Длина инструмента")
        {
            simple = false;

            _value = 0;
            last_talblock = 0;

            mode_proccess = TModeProcess.mpBase;
            weight_status = WeightStatus.wsClear;
        }
Ejemplo n.º 2
0
Archivo: P0202.cs Proyecto: slawer/sgt
        /// <summary>
        /// Загрузить параметр из Xml узла
        /// </summary>
        /// <param name="Node">Xml узел в котором сохранен параметр</param>        
        public override void Load(XmlNode Node)
        {
            base.Load(Node);
            if (slim.TryEnterWriteLock(500))
            {
                try
                {
                    if (Node != null && Node.HasChildNodes)
                    {
                        if (Node.Name == RootName)
                        {
                            foreach (XmlNode Child in Node.ChildNodes)
                            {
                                switch (Child.Name)
                                {
                                    case TModeProcessName:

                                        try
                                        {
                                            mode_proccess = (TModeProcess)Enum.Parse(typeof(TModeProcess), Child.InnerText);
                                        }
                                        catch { }
                                        break;

                                    case WeightStatusName:

                                        try
                                        {
                                            weight_status = (WeightStatus)Enum.Parse(typeof(WeightStatus), Child.InnerText);
                                        }
                                        catch { }
                                        break;

                                    case last_talblockName:

                                        try
                                        {
                                            last_talblock = float.Parse(Child.InnerText);
                                        }
                                        catch { }
                                        break;

                                    default:
                                        break;
                                }
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 3
0
Archivo: P0202.cs Proyecto: 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();
                }
            }
        }