forked from ddrilling/AsbCloudServer
Add Detector Static Surveying MWD
This commit is contained in:
parent
48cee90d91
commit
39b3753bd3
6095
AsbCloudDb/Migrations/20220719095738_Add_Well_operation_StaticSurveying.Designer.cs
generated
Normal file
6095
AsbCloudDb/Migrations/20220719095738_Add_Well_operation_StaticSurveying.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,39 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace AsbCloudDb.Migrations
|
||||||
|
{
|
||||||
|
public partial class Add_Well_operation_StaticSurveying : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "t_well_operation_category",
|
||||||
|
keyColumn: "id",
|
||||||
|
keyValue: 20,
|
||||||
|
column: "name",
|
||||||
|
value: "Промывка перед наращиванием");
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "t_well_operation_category",
|
||||||
|
columns: new[] { "id", "code", "name" },
|
||||||
|
values: new object[] { 21, 0, "Статический замер телесистемы" });
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "t_well_operation_category",
|
||||||
|
keyColumn: "id",
|
||||||
|
keyValue: 21);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "t_well_operation_category",
|
||||||
|
keyColumn: "id",
|
||||||
|
keyValue: 20,
|
||||||
|
column: "name",
|
||||||
|
value: "Шаблонировка перед наращиванием");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4178,7 +4178,13 @@ namespace AsbCloudDb.Migrations
|
|||||||
{
|
{
|
||||||
Id = 20,
|
Id = 20,
|
||||||
Code = 0,
|
Code = 0,
|
||||||
Name = "Шаблонировка перед наращиванием"
|
Name = "Промывка перед наращиванием"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 21,
|
||||||
|
Code = 0,
|
||||||
|
Name = "Статический замер телесистемы"
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
|
@ -684,6 +684,7 @@ namespace AsbCloudDb.Model
|
|||||||
new WellOperationCategory {Id = 18, Name = "Проработка перед наращиванием", Code = 0 },
|
new WellOperationCategory {Id = 18, Name = "Проработка перед наращиванием", Code = 0 },
|
||||||
new WellOperationCategory {Id = 19, Name = "Шаблонировка перед наращиванием", Code = 0 },
|
new WellOperationCategory {Id = 19, Name = "Шаблонировка перед наращиванием", Code = 0 },
|
||||||
new WellOperationCategory {Id = 20, Name = "Промывка перед наращиванием", Code = 0 },
|
new WellOperationCategory {Id = 20, Name = "Промывка перед наращиванием", Code = 0 },
|
||||||
|
new WellOperationCategory {Id = 21, Name = "Статический замер телесистемы", Code = 0 },
|
||||||
|
|
||||||
// Операции ручного ввода
|
// Операции ручного ввода
|
||||||
new WellOperationCategory {Id = 1001, Name = "Бурение", Code = 0 },
|
new WellOperationCategory {Id = 1001, Name = "Бурение", Code = 0 },
|
||||||
|
@ -279,6 +279,27 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static bool RisesFromBegin(
|
||||||
|
DetectableTelemetry[] telemetry,
|
||||||
|
Func<DetectableTelemetry, double> getter,
|
||||||
|
int begin,
|
||||||
|
int count,
|
||||||
|
double deviation)
|
||||||
|
{
|
||||||
|
var beginPointValue = getter(telemetry[begin]);
|
||||||
|
var end = begin + count;
|
||||||
|
end = end < telemetry.Length ? end : telemetry.Length;
|
||||||
|
var step = count > 15 ? count / 5 : count > 3 ? 3 : 1;
|
||||||
|
for (var i = begin; i < end; i += step)
|
||||||
|
{
|
||||||
|
var item = telemetry[i];
|
||||||
|
var itemValue = getter(item);
|
||||||
|
if ( itemValue - beginPointValue > deviation)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||||
{
|
{
|
||||||
#nullable enable
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Промывка перед наращиванием
|
/// Промывка перед наращиванием
|
||||||
@ -41,7 +40,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
|||||||
var delta = point0.WellDepth - point0.BitDepth;
|
var delta = point0.WellDepth - point0.BitDepth;
|
||||||
if ((delta > 0.03d )
|
if ((delta > 0.03d )
|
||||||
&& (point0.Pressure > 15)
|
&& (point0.Pressure > 15)
|
||||||
&& DeviatesFromBegin(telemetry, t=>t.BlockPosition, position, 300, 1))
|
&& ContainsDeviationApprox(telemetry, t=>t.BlockPosition, position, 60, 0.03))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -43,9 +43,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
|||||||
if (lineRotorSpeed.IsAverageYLessThan(5))
|
if (lineRotorSpeed.IsAverageYLessThan(5))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var lineWellDepth = MakeInterpolationLine(d => d.WellDepth, telemetry, position, 30);
|
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 60, 0.003))
|
||||||
|
|
||||||
if (!lineWellDepth.IsYIncreases(1))
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -43,9 +43,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
|||||||
if (lineRotorSpeed.IsAverageYGreaterThan(5))
|
if (lineRotorSpeed.IsAverageYGreaterThan(5))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var lineWellDepth = MakeInterpolationLine(d => d.WellDepth, telemetry, position, 30);
|
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 60, 0.003))
|
||||||
|
|
||||||
if (!lineWellDepth.IsYIncreases(1))
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
using AsbCloudDb.Model;
|
||||||
|
|
||||||
|
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||||
|
{
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Статический замер телесистемы
|
||||||
|
/// </summary>
|
||||||
|
internal class DetectorStaticSurveying: DetectorAbstract
|
||||||
|
{
|
||||||
|
public DetectorStaticSurveying()
|
||||||
|
: base(21) { }
|
||||||
|
|
||||||
|
protected override bool DetectBegin(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
|
||||||
|
{
|
||||||
|
var point0 = telemetry[position];
|
||||||
|
|
||||||
|
if (point0.Pressure < 15)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var delta = point0.WellDepth - point0.BitDepth;
|
||||||
|
if (delta > 2.5d)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (point0.RotorSpeed > 15)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (ContainsDeviation(telemetry, t => t.BlockPosition, position, 60, 0.03))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (ContainsDeviation(telemetry, t => t.Pressure, position, 60, 10))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
|
||||||
|
{
|
||||||
|
var point0 = telemetry[position];
|
||||||
|
|
||||||
|
var delta = point0.WellDepth - point0.BitDepth;
|
||||||
|
if (delta > 2.5d)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (point0.RotorSpeed > 15)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (RisesFromBegin(telemetry, t => t.Pressure, position, 10, 10))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (ContainsDeviation(telemetry, t => t.BlockPosition, position, 10, 0.03))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//if (DeviatesFromBegin(telemetry, t => t.Pressure, position, 60, 10))
|
||||||
|
// return false;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)
|
||||||
|
=> IsValidByWellDepthDoesNotChange(telemetry, begin, end);
|
||||||
|
|
||||||
|
protected override double CalcValue(DetectableTelemetry[] telemetry, int begin, int end)
|
||||||
|
=> CalcDeltaMinutes(telemetry, begin, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
|
@ -25,6 +25,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
|
|||||||
new DetectorDevelopment(),
|
new DetectorDevelopment(),
|
||||||
new DetectorTemplating(),
|
new DetectorTemplating(),
|
||||||
new DetectorSlipsTime(),
|
new DetectorSlipsTime(),
|
||||||
|
//new DetectorStaticSurveying(),
|
||||||
new DetectorFlashing(),
|
new DetectorFlashing(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -12,8 +12,8 @@
|
|||||||
Признак окончания операции =
|
Признак окончания операции =
|
||||||
( расстояние от долота до забоя > 0.03м ) ИЛИ
|
( расстояние от долота до забоя > 0.03м ) ИЛИ
|
||||||
( давление < 25атм ) ИЛИ
|
( давление < 25атм ) ИЛИ
|
||||||
( среднее арифметическое оборотов ротора за 10 сек < 5 об/м )
|
( среднее арифметическое оборотов ротора за 10 сек < 5 об/м ) ИЛИ
|
||||||
( глубина забоя в течении следующих 30 сек увеличивается медленнее 1 м/час );
|
( глубина забоя в течении следующих 60 сек не изменяется больше чем на 0.003 );
|
||||||
|
|
||||||
## Метод определения бурения в слайде
|
## Метод определения бурения в слайде
|
||||||
Повторяет метод определения бурения в роторе, за исключением условия с оборотами ротора. Это уловие нужно инвертировать.
|
Повторяет метод определения бурения в роторе, за исключением условия с оборотами ротора. Это уловие нужно инвертировать.
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
Признак окончания операции =
|
Признак окончания операции =
|
||||||
( расстояние от долота до забоя > 0.03м ) И
|
( расстояние от долота до забоя > 0.03м ) И
|
||||||
( давление > 15 атм ) И
|
( давление > 15 атм ) И
|
||||||
( высота блока изменяется больше чем на 1м в течении 300 сек с начала операции);
|
( высота блока изменяется больше чем на 0.03м в течении 60 сек с начала операции);
|
||||||
|
|
||||||
|
|
||||||
## Ключевой параметр
|
## Ключевой параметр
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
# Статический замер телесистемы
|
||||||
|
Статический замер телесистемы перед бурением - операция после удержания в клиньях и наращивания очередной трубы/ свечи.
|
||||||
|
Замер ТС (статический замер) при бурении свечами (промежуточный замер) - операция при добуривании одной трубки, без наращивании и удержания в клиньях.
|
||||||
|
|
||||||
|
## метод определения 1
|
||||||
|
|
||||||
|
Признак начала операции =
|
||||||
|
( давление > 15 атм ) И
|
||||||
|
( расстояние от долота до забоя < 2.5м ) И
|
||||||
|
( обороты ротора < 15 об/м ) И
|
||||||
|
( движение тал.блока в течении 60 сек изменяется менее чем на 3 см ) И
|
||||||
|
( давление за следующие 60 сек изменяется менее чем на 10 атм )
|
||||||
|
|
||||||
|
Признак окончания операции =
|
||||||
|
( расстояние от долота до забоя > 2.5м ) ИЛИ
|
||||||
|
( обороты ротора > 15 об/м ) ИЛИ
|
||||||
|
( давление за следующие 10 сек вырастет на 10 атм ) ИЛИ
|
||||||
|
( движение тал.блока в течении 60 сек изменяется более чем на 3 см )
|
||||||
|
|
||||||
|
## Ключевой параметр
|
||||||
|
Продолжительность операции.
|
Loading…
Reference in New Issue
Block a user