/// <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(); } } }
/// <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(); } } }
// -------------- вспомогательные функции -------------- /// <summary> /// Вычисляет текущее значение параметра Длина инструмента /// </summary> /// <param name="v1">Положение тальблока в текущий момент</param> /// <param name="клинья">Положение клиньев в текущий момент</param> /// <param name="вес_колонны">Вес на крюке в текущий момент</param> /// <param name="locking_weight_hook">Блокировочное значение веса на крюке.</param> /// <param name="r_weight">Метод расчета веса на крюке</param> /// <returns>Вычисленное значение параметра</returns> private float current_length_instrument(P0005 v1, P0012 v2, P0102 v3, float locking_weight_hook, TechnologicalRegimeWeightHook r_weight) { if (float.IsNaN(v1.Value)) { return(_value); } else { switch (weight_status) { case WeightStatus.wsClear: if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True) { _value = _value + v1.Value - last_talblock; last_talblock = v1.Value; weight_status = WeightStatus.wsWeight; } return(_value); case WeightStatus.wsWeight: if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True) { last_talblock = v1.Value; } else { weight_status = WeightStatus.wsClear; } return(_value); case WeightStatus.Default: weight_status = WeightStatus.wsClear; break; default: break; } return(_value); } }
/// <summary> /// Вычисляет значение параметра Скорость тальблока /// </summary> /// <param name="Текущее_положение">Текущее_положение тальблока</param> /// <param name="CurrTechTime">Текущее время процесса</param> public void Calculate(P0005 currentPosition, DateTime CurrTechTime) { if (slim.TryEnterWriteLock(300)) { try { DateTime t1 = CurrTechTime; // текущее время технологии float p = height_traveling_block; // значение тальблока в указанный момент или Nan, если в истории не сохранился if (float.IsNaN(p)) { time_saving = t1; height_traveling_block = currentPosition.Value; _value = float.NaN; } TimeSpan tPS = TimeSpan.FromTicks(averaging_period * TimeSpan.TicksPerMillisecond); DateTime t2 = time_saving + tPS; // время, отстоящее от предыдущего момента на интервал if (t1 < t2) { return; } else { TimeSpan dT = t1 - time_saving; double lT = dT.Ticks; height_traveling_block = currentPosition.Value; time_saving = t1; _value = (float)(((p - currentPosition.Value) / lT) * TimeSpan.TicksPerSecond); } } 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(); } } }
// -------------- вспомогательные функции -------------- /// <summary> /// Вычисляет текущее значение параметра Длина инструмента /// </summary> /// <param name="v1">Положение тальблока в текущий момент</param> /// <param name="клинья">Положение клиньев в текущий момент</param> /// <param name="вес_колонны">Вес на крюке в текущий момент</param> /// <param name="locking_weight_hook">Блокировочное значение веса на крюке.</param> /// <param name="r_weight">Метод расчета веса на крюке</param> /// <returns>Вычисленное значение параметра</returns> private float current_length_instrument(P0005 v1, P0012 v2, P0102 v3, float locking_weight_hook, TechnologicalRegimeWeightHook r_weight) { if (float.IsNaN(v1.Value)) { return _value; } else { switch (weight_status) { case WeightStatus.wsClear: if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True) { _value = _value + v1.Value - last_talblock; last_talblock = v1.Value; weight_status = WeightStatus.wsWeight; } return _value; case WeightStatus.wsWeight: if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True) { last_talblock = v1.Value; } else { weight_status = WeightStatus.wsClear; } return _value; case WeightStatus.Default: weight_status = WeightStatus.wsClear; break; default: break; } return _value; } }