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,
|
||||
Code = 0,
|
||||
Name = "Шаблонировка перед наращиванием"
|
||||
Name = "Промывка перед наращиванием"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = 21,
|
||||
Code = 0,
|
||||
Name = "Статический замер телесистемы"
|
||||
},
|
||||
new
|
||||
{
|
||||
|
@ -684,6 +684,7 @@ namespace AsbCloudDb.Model
|
||||
new WellOperationCategory {Id = 18, Name = "Проработка перед наращиванием", Code = 0 },
|
||||
new WellOperationCategory {Id = 19, Name = "Шаблонировка перед наращиванием", Code = 0 },
|
||||
new WellOperationCategory {Id = 20, Name = "Промывка перед наращиванием", Code = 0 },
|
||||
new WellOperationCategory {Id = 21, Name = "Статический замер телесистемы", Code = 0 },
|
||||
|
||||
// Операции ручного ввода
|
||||
new WellOperationCategory {Id = 1001, Name = "Бурение", Code = 0 },
|
||||
|
@ -279,6 +279,27 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
}
|
||||
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
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
{
|
||||
#nullable enable
|
||||
|
||||
/// <summary>
|
||||
/// Промывка перед наращиванием
|
||||
@ -41,7 +40,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
var delta = point0.WellDepth - point0.BitDepth;
|
||||
if ((delta > 0.03d )
|
||||
&& (point0.Pressure > 15)
|
||||
&& DeviatesFromBegin(telemetry, t=>t.BlockPosition, position, 300, 1))
|
||||
&& ContainsDeviationApprox(telemetry, t=>t.BlockPosition, position, 60, 0.03))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -43,9 +43,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
if (lineRotorSpeed.IsAverageYLessThan(5))
|
||||
return true;
|
||||
|
||||
var lineWellDepth = MakeInterpolationLine(d => d.WellDepth, telemetry, position, 30);
|
||||
|
||||
if (!lineWellDepth.IsYIncreases(1))
|
||||
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 60, 0.003))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -43,9 +43,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
||||
if (lineRotorSpeed.IsAverageYGreaterThan(5))
|
||||
return true;
|
||||
|
||||
var lineWellDepth = MakeInterpolationLine(d => d.WellDepth, telemetry, position, 30);
|
||||
|
||||
if (!lineWellDepth.IsYIncreases(1))
|
||||
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 60, 0.003))
|
||||
return true;
|
||||
|
||||
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 DetectorTemplating(),
|
||||
new DetectorSlipsTime(),
|
||||
//new DetectorStaticSurveying(),
|
||||
new DetectorFlashing(),
|
||||
};
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
Признак окончания операции =
|
||||
( расстояние от долота до забоя > 0.03м ) ИЛИ
|
||||
( давление < 25атм ) ИЛИ
|
||||
( среднее арифметическое оборотов ротора за 10 сек < 5 об/м )
|
||||
( глубина забоя в течении следующих 30 сек увеличивается медленнее 1 м/час );
|
||||
( среднее арифметическое оборотов ротора за 10 сек < 5 об/м ) ИЛИ
|
||||
( глубина забоя в течении следующих 60 сек не изменяется больше чем на 0.003 );
|
||||
|
||||
## Метод определения бурения в слайде
|
||||
Повторяет метод определения бурения в роторе, за исключением условия с оборотами ротора. Это уловие нужно инвертировать.
|
||||
|
@ -19,7 +19,7 @@
|
||||
Признак окончания операции =
|
||||
( расстояние от долота до забоя > 0.03м ) И
|
||||
( давление > 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