Автоопределение операции "Промывка"

This commit is contained in:
Olga Nemt 2024-03-14 14:45:47 +05:00
parent 63638219a2
commit a7c5935cc4
3 changed files with 114 additions and 73 deletions

View File

@ -7,11 +7,39 @@ public class DetectableTelemetry
public DateTimeOffset DateTime { get; set; } public DateTimeOffset DateTime { get; set; }
public int Mode { get; set; } public int Mode { get; set; }
public int? IdUser { get; set; } public int? IdUser { get; set; }
/// <summary>
/// Глубина забоя
/// </summary>
public float WellDepth { get; set; } public float WellDepth { get; set; }
/// <summary>
/// Давление
/// </summary>
public float Pressure { get; set; } public float Pressure { get; set; }
/// <summary>
/// Вес на крюке
/// </summary>
public float HookWeight { get; set; } public float HookWeight { get; set; }
/// <summary>
/// Положение талевого блока
/// </summary>
public float BlockPosition { get; set; } public float BlockPosition { get; set; }
/// <summary>
/// Глубина долота
/// </summary>
public float BitDepth { get; set; } public float BitDepth { get; set; }
/// <summary>
/// Обороты ротора
/// </summary>
public float RotorSpeed { get; set; } public float RotorSpeed { get; set; }
/// <summary>
/// Осевая нагрузка
/// </summary>
public float AxialLoad { get; set; } public float AxialLoad { get; set; }
} }

View File

@ -1,59 +1,67 @@
// using AsbCloudDb.Model; using AsbCloudApp.Data.DetectedOperation;
// using AsbCloudDb.Model;
// namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors using System;
// { using System.Collections.Generic;
//
// /// <summary> namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
// /// Промывка {
// /// </summary>
// internal class DetectorFlashing : DetectorAbstract /// <summary>
// { /// Промывка
// public DetectorFlashing() /// </summary>
// : base(WellOperationCategory.IdFlashing) internal class DetectorFlashing : DetectorAbstract
// { } {
//
// protected override double CalcValue(DetectableTelemetry[] telemetry, int begin, int end) protected override double CalcValue(DetectableTelemetry[] telemetry, int begin, int end)
// => CalcDeltaMinutes(telemetry, begin, end); => CalcDeltaMinutes(telemetry, begin, end);
//
// protected override bool DetectBegin(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation) protected override bool DetectBegin(DetectableTelemetry[] telemetry, int position, DetectedOperationDto? previousOperation)
// { {
// if (!((previousOperation?.IdCategory == WellOperationCategory.IdRotor) ||
// (previousOperation?.IdCategory == WellOperationCategory.IdSlide))) var currentPoint = telemetry[position];
// return false; if (currentPoint.Pressure <= 20)
// return false;
// var point0 = telemetry[position];
// var delta = point0.WellDepth - point0.BitDepth; var delta = currentPoint.WellDepth - currentPoint.BitDepth;
// if (delta > 0.05d) if (delta < 0.03d)
// return false; return false;
//
// if (point0.Pressure < 15) if (currentPoint.RotorSpeed >= 10)
// return false; return false;
//
// if (point0.BlockPosition < 3) var nextIndexPoint = telemetry.Length <= position ? position : position + 1;
// return false; var nextPoint = telemetry[nextIndexPoint];
// if (Math.Abs(currentPoint.WellDepth - nextPoint.WellDepth) > 0)
// if (ContainsDeviationApprox(telemetry, t => t.WellDepth, position, 150, 0.0001)) return false;
// return false;
// if (currentPoint.WellDepth <= 150)
// return true; return false;
// }
// return true;
// protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
// { }
// var point0 = telemetry[position];
// var delta = point0.WellDepth - point0.BitDepth; protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperationDto? previousOperation)
// if ((delta > 0.03d ) {
// && (point0.Pressure > 15) var currentPoint = telemetry[position];
// && ContainsDeviationApprox(telemetry, t=>t.BlockPosition, position, 60, 0.03))
// return IdReasonOfEnd_Custom1; if (currentPoint.Pressure < 20)
// return IdReasonOfEnd_PressureIsLo;
// return IdReasonOfEnd_NotDetected; if ((currentPoint.WellDepth - currentPoint.BitDepth) < 0.03d)
// } return 0;
// if (currentPoint.RotorSpeed >= 10)
// protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end) return IdReasonOfEnd_RotorSpeedIsHi;
// => IsValidByWellDepthDoesNotChange(telemetry, begin, end); if (currentPoint.BitDepth < 150)
// } return 0;
// return IdReasonOfEnd_NotDetected;
// }
// }
// protected override (int IdCategory, IDictionary<string, object> ExtraData) GetSpecificInformation(DetectableTelemetry[] telemetry,
int begin,
int end)
{
return (WellOperationCategory.IdFlashing, new Dictionary<string, object>());
}
}
}

View File

@ -2,26 +2,31 @@
## Описание ## Описание
Промывка операция, во время которой после добуривания очередной трубы происходит снижение осевой нагрузки и дифференциального давления, талевый блок остается условно неподвижным. Промывка операция, во время которой давление условно постоянное, а вращение колонны отсутствует, талевый блок при этом может быть как в движении, так и статичным.
Проработка перед наращиванием определяется как время между: Промывка определяется как время между:
- окончанием операции бурения (ротор/ слайд/ ручное бурение) - окончанием операции бурения или выходом на режим буровых насосов
- началом операции проработки/ шаблонировки перед наращивании - началом операции проработки/шаблонировки перед наращиванием или остановкой буровых насосов
## Метод определения ## Метод определения
Признак начала операции = Признак начала операции =
( предыдущая операция == бурение в роторе или слайде) ( давление > 20 атм ) И
( расстояние от долота до забоя < 0,05м ) И ( расстояние от долота до забоя >= 0.03 м) И
( давление > 15 атм ) И ( обороты ротора < 10 об/мин) И
( положение блока > 3м ) И ( глубина забоя не изменяется) И
( глубина забоя изменяется менее чем на 0,0001м в течении 150 сек) ( глубина долота > 150 м) И
( положение блока не меняется) ИЛИ
( положение блока уменьшается) ИЛИ
( положение блока увеличивается --> дальше смотрим: если после остановки блока обороты ротора < 10 об/мин);
Признак окончания операции = Признак окончания операции =
( расстояние от долота до забоя > 0.03м ) И ( давление < 20 атм ) ИЛИ
( давление > 15 атм ) И ( расстояние от долота до забоя < 0.03 м ) ИЛИ
( высота блока изменяется больше чем на 0.03м в течении 60 сек с начала операции); ( обороты ротора >= 10 об/мин) ИЛИ
( глубина долота < 150 м) ИЛИ
(положение блока увеличивается --> дальше смотрим: если после остановки блока обороты ротора >= 10 об/мин);
## Ключевой параметр ## Ключевой параметр
Продолжительность операции. Продолжительность операции.