Split operation flash.

This commit is contained in:
ngfrolov 2022-08-05 17:16:34 +05:00
parent ff357f2794
commit fb12919d85
8 changed files with 6300 additions and 50 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AsbCloudDb.Migrations
{
public partial class Add_new_operation : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.InsertData(
table: "t_well_operation_category",
columns: new[] { "id", "code", "name" },
values: new object[] { 22, 0, "Промывка" });
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DeleteData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 22);
}
}
}

View File

@ -60,7 +60,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdDeposit");
b.ToTable("t_cluster", (string)null);
b.ToTable("t_cluster");
b.HasComment("Кусты");
});
@ -89,7 +89,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdCompanyType");
b.ToTable("t_company", (string)null);
b.ToTable("t_company");
b.HasData(
new
@ -116,7 +116,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_company_type", (string)null);
b.ToTable("t_company_type");
b.HasData(
new
@ -136,7 +136,7 @@ namespace AsbCloudDb.Migrations
});
});
modelBuilder.Entity("AsbCloudDb.Model.DailyReportDB.DailyReport", b =>
modelBuilder.Entity("AsbCloudDb.Model.DailyReport.DailyReport", b =>
{
b.Property<int>("IdWell")
.HasColumnType("integer")
@ -156,7 +156,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("IdWell", "StartDate")
.HasName("t_id_well_date_start_pk");
b.ToTable("t_daily_report", (string)null);
b.ToTable("t_daily_report");
b.HasComment("Ежедневные отчёты");
});
@ -190,7 +190,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_deposit", (string)null);
b.ToTable("t_deposit");
b.HasComment("Месторождение");
});
@ -249,7 +249,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdTelemetry");
b.ToTable("t_detected_operation", (string)null);
b.ToTable("t_detected_operation");
b.HasComment("автоматически определенные операции по телеметрии");
});
@ -286,7 +286,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_driller", (string)null);
b.ToTable("t_driller");
b.HasComment("Бурильщик");
});
@ -381,7 +381,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWellOperationCategory");
b.ToTable("t_drill_flow_chart", (string)null);
b.ToTable("t_drill_flow_chart");
b.HasComment("Параметры коридоров бурения (диапазоны параметров бурения)");
});
@ -410,7 +410,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWell", "IdFileCategory")
.IsUnique();
b.ToTable("t_drilling_program_part", (string)null);
b.ToTable("t_drilling_program_part");
b.HasComment("части программ бурения");
});
@ -525,7 +525,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWellSectionType");
b.ToTable("t_drill_params", (string)null);
b.ToTable("t_drill_params");
b.HasComment("Режим бурения в секции (диапазоны параметров бурения)");
});
@ -551,7 +551,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_file_category", (string)null);
b.ToTable("t_file_category");
b.HasComment("Категории файлов");
@ -725,7 +725,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWell");
b.ToTable("t_file_info", (string)null);
b.ToTable("t_file_info");
b.HasComment("Файлы всех категорий");
});
@ -776,7 +776,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdUser");
b.ToTable("t_file_mark", (string)null);
b.ToTable("t_file_mark");
b.HasComment("Действия с файлами.");
});
@ -821,7 +821,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWell");
b.ToTable("t_measure", (string)null);
b.ToTable("t_measure");
b.HasComment("Таблица c данными для вкладки 'Последние данные'");
});
@ -847,7 +847,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_measure_category", (string)null);
b.ToTable("t_measure_category");
b.HasComment("Категория последних данных");
@ -918,7 +918,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWell");
b.ToTable("t_operationvalue", (string)null);
b.ToTable("t_operationvalue");
b.HasComment("Целевые/нормативные показатели операции");
});
@ -946,7 +946,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_permission", (string)null);
b.ToTable("t_permission");
b.HasComment("Разрешения на доступ к данным");
@ -1663,7 +1663,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWell");
b.ToTable("t_relation_company_well", (string)null);
b.ToTable("t_relation_company_well");
b.HasComment("отношение скважин и компаний");
});
@ -1688,7 +1688,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdDrillingProgramPart");
b.ToTable("t_relation_user_drilling_program_part", (string)null);
b.ToTable("t_relation_user_drilling_program_part");
b.HasComment("Отношение пользователей и частей ПБ");
});
@ -1707,7 +1707,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdPermission");
b.ToTable("t_relation_user_role_permission", (string)null);
b.ToTable("t_relation_user_role_permission");
b.HasComment("Отношение ролей пользователей и разрешений доступа");
@ -2289,7 +2289,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdInclude");
b.ToTable("t_relation_user_role_user_role", (string)null);
b.ToTable("t_relation_user_role_user_role");
b.HasComment("Отношение ролей к ролям");
@ -2580,7 +2580,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdUserRole");
b.ToTable("t_relation_user_user_role", (string)null);
b.ToTable("t_relation_user_user_role");
b.HasComment("Отношение пользователей и ролей");
@ -2636,7 +2636,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWell");
b.ToTable("t_report_property", (string)null);
b.ToTable("t_report_property");
b.HasComment("Отчеты с данными по буровым");
});
@ -2687,7 +2687,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWell");
b.ToTable("t_schedule", (string)null);
b.ToTable("t_schedule");
b.HasComment("График работы бурильщика");
});
@ -2741,7 +2741,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWell");
b.ToTable("t_setpoints_rquest", (string)null);
b.ToTable("t_setpoints_rquest");
b.HasComment("Запросы на изменение уставок панели оператора");
});
@ -2774,7 +2774,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex(new[] { "RemoteUid" }, "t_telemetry_remote_uid_index");
b.ToTable("t_telemetry", (string)null);
b.ToTable("t_telemetry");
b.HasComment("таблица привязки телеметрии от комплектов к конкретной скважине.");
});
@ -2977,7 +2977,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("IdTelemetry", "DateTime");
b.ToTable("t_telemetry_data_saub", (string)null);
b.ToTable("t_telemetry_data_saub");
b.HasComment("набор основных данных по SAUB");
});
@ -3318,7 +3318,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("IdTelemetry", "DateTime");
b.ToTable("t_telemetry_data_spin", (string)null);
b.ToTable("t_telemetry_data_spin");
b.HasComment("набор основных данных по SpinMaster");
});
@ -3343,7 +3343,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("IdTelemetry", "IdEvent");
b.ToTable("t_telemetry_event", (string)null);
b.ToTable("t_telemetry_event");
b.HasComment("Справочник событий. События формируют сообщения. Разделено по версиям посылок от телеметрии.");
});
@ -3403,7 +3403,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdTelemetry");
b.ToTable("t_telemetry_message", (string)null);
b.ToTable("t_telemetry_message");
b.HasComment("Сообщения на буровых");
});
@ -3439,7 +3439,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("IdTelemetry", "IdUser");
b.ToTable("t_telemetry_user", (string)null);
b.ToTable("t_telemetry_user");
b.HasComment("Пользователи панели САУБ. Для сообщений.");
});
@ -3516,7 +3516,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("Login")
.IsUnique();
b.ToTable("t_user", (string)null);
b.ToTable("t_user");
b.HasComment("Пользователи облака");
@ -3553,7 +3553,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_user_role", (string)null);
b.ToTable("t_user_role");
b.HasComment("Роли пользователей в системе");
@ -3949,7 +3949,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWellType");
b.ToTable("t_well", (string)null);
b.ToTable("t_well");
b.HasComment("скважины");
});
@ -3977,7 +3977,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWellSrc");
b.ToTable("t_well_composite", (string)null);
b.ToTable("t_well_composite");
b.HasComment("Композитная скважина");
});
@ -4053,7 +4053,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("IdWellSectionType");
b.ToTable("t_well_operation", (string)null);
b.ToTable("t_well_operation");
b.HasComment("Данные по операциям на скважине");
});
@ -4079,7 +4079,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_well_operation_category", (string)null);
b.ToTable("t_well_operation_category");
b.HasComment("Справочник операций на скважине");
@ -4211,6 +4211,12 @@ namespace AsbCloudDb.Migrations
Name = "Статический замер телесистемы"
},
new
{
Id = 22,
Code = 0,
Name = "Промывка"
},
new
{
Id = 1001,
Code = 0,
@ -4536,7 +4542,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_well_section_type", (string)null);
b.ToTable("t_well_section_type");
b.HasComment("конструкция секции скважины");
@ -4711,7 +4717,7 @@ namespace AsbCloudDb.Migrations
b.HasKey("Id");
b.ToTable("t_well_type", (string)null);
b.ToTable("t_well_type");
b.HasComment("конструкция скважины");
@ -4932,7 +4938,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("TelemetryId");
b.ToTable("t_telemetry_wits_1", (string)null);
b.ToTable("t_telemetry_wits_1");
});
modelBuilder.Entity("AsbCloudDb.Model.WITS.Record50", b =>
@ -5020,7 +5026,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("TelemetryId");
b.ToTable("t_telemetry_wits_50", (string)null);
b.ToTable("t_telemetry_wits_50");
});
modelBuilder.Entity("AsbCloudDb.Model.WITS.Record60", b =>
@ -5072,7 +5078,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("TelemetryId");
b.ToTable("t_telemetry_wits_60", (string)null);
b.ToTable("t_telemetry_wits_60");
});
modelBuilder.Entity("AsbCloudDb.Model.WITS.Record61", b =>
@ -5128,7 +5134,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("TelemetryId");
b.ToTable("t_telemetry_wits_61", (string)null);
b.ToTable("t_telemetry_wits_61");
});
modelBuilder.Entity("AsbCloudDb.Model.WITS.Record7", b =>
@ -5216,7 +5222,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("TelemetryId");
b.ToTable("t_telemetry_wits_7", (string)null);
b.ToTable("t_telemetry_wits_7");
});
modelBuilder.Entity("AsbCloudDb.Model.WITS.Record8", b =>
@ -5420,7 +5426,7 @@ namespace AsbCloudDb.Migrations
b.HasIndex("TelemetryId");
b.ToTable("t_telemetry_wits_8", (string)null);
b.ToTable("t_telemetry_wits_8");
});
modelBuilder.Entity("AsbCloudDb.Model.Cluster", b =>
@ -5444,7 +5450,7 @@ namespace AsbCloudDb.Migrations
b.Navigation("CompanyType");
});
modelBuilder.Entity("AsbCloudDb.Model.DailyReportDB.DailyReport", b =>
modelBuilder.Entity("AsbCloudDb.Model.DailyReport.DailyReport", b =>
{
b.HasOne("AsbCloudDb.Model.Well", "Well")
.WithMany()

View File

@ -686,6 +686,7 @@ namespace AsbCloudDb.Model
new WellOperationCategory {Id = 19, Name = "Шаблонировка перед наращиванием", Code = 0 },
new WellOperationCategory {Id = 20, Name = "Промывка перед наращиванием", Code = 0 },
new WellOperationCategory {Id = 21, Name = "Статический замер телесистемы", Code = 0 },
new WellOperationCategory {Id = 22, Name = "Промывка", Code = 0 },
// Операции ручного ввода
new WellOperationCategory {Id = 1001, Name = "Бурение", Code = 0 },

View File

@ -4,12 +4,12 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
{
#nullable enable
/// <summary>
/// Промывка перед наращиванием
/// Промывка
/// </summary>
internal class DetectorFlashing : DetectorAbstract
{
public DetectorFlashing()
: base(20) { }
: base(22) { }
protected override double CalcValue(DetectableTelemetry[] telemetry, int begin, int end)
=> CalcDeltaMinutes(telemetry, begin, end);
@ -28,7 +28,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
if (point0.Pressure < 15)
return false;
if (point0.BlockPosition > 3)
if (point0.BlockPosition < 3)
return false;
return true;

View File

@ -0,0 +1,55 @@
using AsbCloudDb.Model;
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
{
#nullable enable
/// <summary>
/// Промывка перед наращиванием
/// </summary>
internal class DetectorFlashingBeforeConnection : DetectorAbstract
{
public DetectorFlashingBeforeConnection()
: base(20) { }
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 == 2) ||
(previousOperation?.IdCategory == 3)))
return false;
var point0 = telemetry[position];
var delta = point0.WellDepth - point0.BitDepth;
if (delta > 0.05d)
return false;
if (point0.Pressure < 15)
return false;
if (point0.BlockPosition > 3)
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 > 0.03d )
&& (point0.Pressure > 15)
&& ContainsDeviationApprox(telemetry, t=>t.BlockPosition, position, 60, 0.03))
return true;
return false;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)
=> IsValidByWellDepthDoesNotChange(telemetry, begin, end);
}
#nullable disable
}

View File

@ -26,6 +26,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
new DetectorTemplating(),
new DetectorSlipsTime(),
new DetectorStaticSurveying(),
new DetectorFlashingBeforeConnection(),
new DetectorFlashing(),
};

View File

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