forked from ddrilling/AsbCloudServer
Add new operation - TemplatingWhileDrilling
This commit is contained in:
parent
499f7cc4e2
commit
1dcfd93c0b
6308
AsbCloudDb/Migrations/20220810102038_Add_new_operation_DetectorTemplatingWhileDrilling.Designer.cs
generated
Normal file
6308
AsbCloudDb/Migrations/20220810102038_Add_new_operation_DetectorTemplatingWhileDrilling.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,25 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace AsbCloudDb.Migrations
|
||||
{
|
||||
public partial class Add_new_operation_DetectorTemplatingWhileDrilling : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.InsertData(
|
||||
table: "t_well_operation_category",
|
||||
columns: new[] { "id", "code", "key_value_name", "key_value_units", "name" },
|
||||
values: new object[] { 23, 0, "dT", "мин", "Шаблонировка при бурении" });
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DeleteData(
|
||||
table: "t_well_operation_category",
|
||||
keyColumn: "id",
|
||||
keyValue: 23);
|
||||
}
|
||||
}
|
||||
}
|
@ -4279,6 +4279,14 @@ namespace AsbCloudDb.Migrations
|
||||
Name = "Промывка"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = 23,
|
||||
Code = 0,
|
||||
KeyValueName = "dT",
|
||||
KeyValueUnits = "мин",
|
||||
Name = "Шаблонировка при бурении"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = 1001,
|
||||
Code = 0,
|
||||
|
@ -26,6 +26,7 @@
|
||||
new () {Id = 20, Name = "Промывка перед наращиванием", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
|
||||
new () {Id = 21, Name = "Статический замер телесистемы", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
|
||||
new () {Id = 22, Name = "Промывка", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
|
||||
new () {Id = 23, Name = "Шаблонировка при бурении", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
|
||||
|
||||
// Операции ручного ввода
|
||||
new () {Id = 1001, Name = "Бурение", Code = 0, KeyValueName = "МСП", KeyValueUnits = "м/ч" },
|
||||
|
@ -31,6 +31,9 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
if (point0.BlockPosition < 3)
|
||||
return false;
|
||||
|
||||
if (ContainsDeviationApprox(telemetry, t => t.WellDepth, position, 150, 0.0001))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -38,9 +38,9 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
if (point0.Pressure < 25)
|
||||
return IdReasonOfEnd_PressureIsLo;
|
||||
|
||||
var lineRotorSpeed = MakeInterpolationLine(d => d.RotorSpeed, telemetry, position, 10);
|
||||
var lineRotorSpeed = MakeInterpolationLine(d => d.RotorSpeed, telemetry, position, 60);
|
||||
|
||||
if (lineRotorSpeed.IsAverageYLessThan(5))
|
||||
if (lineRotorSpeed.IsAverageYLessThan(10))
|
||||
return IdReasonOfEnd_AvgRotorSpeedIsLo;
|
||||
|
||||
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 150, 0.003))
|
||||
|
@ -38,9 +38,9 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
if (point0.Pressure < 25)
|
||||
return IdReasonOfEnd_PressureIsLo;
|
||||
|
||||
var lineRotorSpeed = MakeInterpolationLine(d => d.RotorSpeed, telemetry, position, 10);
|
||||
var lineRotorSpeed = MakeInterpolationLine(d => d.RotorSpeed, telemetry, position, 60);
|
||||
|
||||
if (lineRotorSpeed.IsAverageYGreaterThan(5))
|
||||
if (lineRotorSpeed.IsAverageYGreaterThan(10))
|
||||
return IdReasonOfEnd_AvgRotorSpeedIsHi;
|
||||
|
||||
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 150, 0.003))
|
||||
|
@ -0,0 +1,54 @@
|
||||
using AsbCloudDb.Model;
|
||||
|
||||
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
{
|
||||
#nullable enable
|
||||
/// <summary>
|
||||
/// Шаблонировка при бурении
|
||||
/// </summary>
|
||||
internal class DetectorTemplatingWhileDrilling : DetectorAbstract
|
||||
{
|
||||
public DetectorTemplatingWhileDrilling()
|
||||
: base(23) { }
|
||||
|
||||
protected override double CalcValue(DetectableTelemetry[] telemetry, int begin, int end)
|
||||
=> CalcDeltaMinutes(telemetry, begin, end);
|
||||
|
||||
protected override bool DetectBegin(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
|
||||
{
|
||||
if (previousOperation?.IdCategory != 22)
|
||||
return false;
|
||||
|
||||
var point0 = telemetry[position];
|
||||
|
||||
if (point0.Pressure < 15)
|
||||
return false;
|
||||
|
||||
if (point0.RotorSpeed < 1)
|
||||
return false;
|
||||
|
||||
if (RisesFromBegin(telemetry, t => t.BlockPosition, position, 30, 0.5))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
|
||||
{
|
||||
var point0 = telemetry[position];
|
||||
var delta = point0.WellDepth - point0.BitDepth;
|
||||
if ((delta > 0.03d )
|
||||
&& (point0.Pressure > 15)
|
||||
&& (!ContainsDeviationApprox(telemetry, t=>t.BlockPosition, position, 60, 0.03)))
|
||||
return IdReasonOfEnd_Custom1;
|
||||
|
||||
return IdReasonOfEnd_NotDetected;
|
||||
}
|
||||
|
||||
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)
|
||||
=> IsValidByWellDepthDoesNotChange(telemetry, begin, end);
|
||||
}
|
||||
|
||||
#nullable disable
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
|
||||
new DetectorStaticSurveying(),
|
||||
new DetectorFlashingBeforeConnection(),
|
||||
new DetectorFlashing(),
|
||||
new DetectorTemplatingWhileDrilling(),
|
||||
};
|
||||
|
||||
public OperationDetectionBackgroundService(IConfiguration configuration)
|
||||
|
@ -12,7 +12,7 @@
|
||||
Признак окончания операции =
|
||||
( расстояние от долота до забоя > 0.03м ) ИЛИ
|
||||
( давление < 25атм ) ИЛИ
|
||||
( среднее арифметическое оборотов ротора за 10 сек < 5 об/м ) ИЛИ
|
||||
( среднее арифметическое оборотов ротора за 60 сек < 10 об/м ) ИЛИ
|
||||
( глубина забоя в течении следующих 150 сек не изменяется больше чем на 0.003 );
|
||||
|
||||
## Метод определения бурения в слайде
|
||||
|
@ -14,7 +14,8 @@
|
||||
( предыдущая операция == бурение в роторе или слайде)
|
||||
( расстояние от долота до забоя < 0,05м ) И
|
||||
( давление > 15 атм ) И
|
||||
( положение блока > 3м )
|
||||
( положение блока > 3м ) И
|
||||
( глубина забоя изменяется менее чем на 0,0001м в течении 150 сек)
|
||||
|
||||
Признак окончания операции =
|
||||
( расстояние от долота до забоя > 0.03м ) И
|
||||
|
@ -0,0 +1,20 @@
|
||||
# Алгоритм определения Шаблонировки при бурении
|
||||
|
||||
## Описание
|
||||
Шаблонировка при бурении -
|
||||
|
||||
## Метод определения
|
||||
|
||||
Признак начала операции =
|
||||
( предыдущая операция == промывка)
|
||||
( давление > 15 атм ) И
|
||||
( положение блока увеличится на 0,5м за следующие 30сек ) И
|
||||
( Обороты ротора меньше 1)
|
||||
|
||||
Признак окончания операции =
|
||||
( высота блока не изменяется больше чем на 0.03м в течении 60 сек после окончания операции) И
|
||||
( расстояние от долота до забоя > 0.03м ) И
|
||||
( давление > 15 атм )
|
||||
|
||||
## Ключевой параметр
|
||||
Продолжительность операции.
|
Loading…
Reference in New Issue
Block a user