/// <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; }
/// <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(); } } }
/// <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(); } } }