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

View File

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

View File

@ -4,12 +4,12 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
{ {
#nullable enable #nullable enable
/// <summary> /// <summary>
/// Промывка перед наращиванием /// Промывка
/// </summary> /// </summary>
internal class DetectorFlashing : DetectorAbstract internal class DetectorFlashing : DetectorAbstract
{ {
public DetectorFlashing() public DetectorFlashing()
: base(20) { } : base(22) { }
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);
@ -28,7 +28,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
if (point0.Pressure < 15) if (point0.Pressure < 15)
return false; return false;
if (point0.BlockPosition > 3) if (point0.BlockPosition < 3)
return false; return false;
return true; 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 DetectorTemplating(),
new DetectorSlipsTime(), new DetectorSlipsTime(),
new DetectorStaticSurveying(), new DetectorStaticSurveying(),
new DetectorFlashingBeforeConnection(),
new DetectorFlashing(), new DetectorFlashing(),
}; };

View File

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