131 Отчет по датчику бурения
Описание работы отчёта «ReportDrillingEvents» (для бурового оборудования)
Общие сведения
Отчёт «ReportDrillingEvents» предназначен для анализа работы буровой установки (самоходной или стационарной). Он выделяет интервалы бурения (время, когда установка бурит скважину), и для каждого такого интервала рассчитывает:
- время начала и окончания бурения;
- общую длительность;
- достигнутую глубину скважины;
- средние показатели датчиков: скорость подачи бура, давление вращения, давление подачи, давление воздуха.
В отчёте предусмотрены два режима работы (старый и новый, переключаемые параметром). Новый режим (V2) использует более сложную фильтрацию шумов и учитывает кратковременные провалы давления, характерные для реального процесса бурения. Также можно включить определение бурения по датчику режима бурения (дискретный сигнал 1 – бурит, 0 – не бурит).
Отчёт выводит таблицу, где каждая строка соответствует одной скважине (или одному непрерывному этапу бурения). Внизу подводятся итоги: общее время бурения, общая глубина, а также средние значения по всем датчикам (скорость подачи, давления вращения, подачи, воздуха). Дополнительно выводится количество скважин.
Какие датчики используются и что они измеряют (с источниками данных)
В системе мониторинга буровой установки данные поступают от следующих типов датчиков (каждый датчик определён в классе SensorType). Ниже приведены единицы измерения и источник данных (CAN-протокол, параметрическая группа, байты) – там, где это указано в технической документации. Поскольку буровое оборудование часто работает по протоколу CAN Open или J1939, мы указываем типовые идентификаторы.
| Название датчика (код) | Что измеряет | Единицы | Источник (PGN / CAN-идентификатор) | Примечание |
|---|---|---|---|---|
Глубина (Depth) |
Глубина бурения (от начальной отметки) | метры (м) | PGN 64878 (типовой), байты 0–3 | Надёжный, монотонно растёт |
Скорость подачи бура (DrillFeedSpeed) |
Скорость заглубления бурового инструмента | сантиметры/мин (см/мин) → в отчёте переводятся в м/мин | PGN 64879, байты 0–1 | Ненадёжный, много шумов, инерционен |
Давление вращения (DrillRotPressure) |
Давление в гидросистеме вращения бура | бар | PGN 64880, байты 0–1 | Надёжный, умеренный шум |
Давление подачи на бур (DrillPressure) |
Давление подачи (осевое усилие) | бар | PGN 64881, байты 0–1 | Ненадёжный, сильные шумы |
Давление воздуха (DrillAirPressure) |
Давление сжатого воздуха на выходе компрессора | бар | PGN 64882, байты 0–1 | Надёжный, характерны плато и падения |
Режим бурения (DrillWork) |
Дискретный сигнал: 1 – бурение, 0 – не бурение | безразмерное | PGN 64883, байт 0 (бит 0) | Используется как опорный, если установлен |
Примечание: Точные PGN зависят от конкретной реализации CAN-протокола у производителя буровой установки. В коде отчёта используются только символьные имена датчиков. В таблице приведены типовые значения для промышленного бурового оборудования (например, Sandvik, Epiroc, Atlas Copco).
Логика работы отчёта
Отчёт имеет два основных режима (выбираются параметрами при формировании отчёта):
- Режим V1 (старый) – определение интервалов бурения только по глубине (или по датчику давления на бур, если он дискретный). Используются простые пороги и усреднение через размах значений.
- Режим V2 (новый, расширенный) – определение интервалов бурения по глубине с уточнением по надёжным датчикам (давление вращения и давление воздуха). В этом режиме применяются:
- Адаптивные средние (медиана вместо обычного среднего при сильных выбросах).
- Заполнение коротких провалов (
WorkGap) – например, падение давления воздуха на 2 минуты не прерывает интервал бурения. - Маски активности по давлению вращения и давлению воздуха, которые затем объединяются.
Кроме того, можно включить режим с датчиком режима бурения (DrillWork). Если датчик есть и параметр включён, то интервалы бурения определяются строго по его дискретному сигналу (1 – бурит). При этом отсекаются ложные срабатывания короче заданного порога (по умолчанию 300 секунд). В этом режиме никакие другие датчики не участвуют в определении начала и конца бурения, но их значения всё равно собираются для каждой скважины.
Детали обработки датчиков (режим V2)
1. Построение временно́й шкалы
Берутся все временные метки с датчика глубины (они служат опорными точками для всех остальных датчиков).
2. Маска активности по давлению вращения
- Давление вращения считается рабочим, если его значение находится в диапазоне 60–250 бар.
- Короткие провалы (менее 240 секунд) между участками рабочего давления заполняются – считается, что бурение продолжалось. При этом провал не должен опускаться ниже 40 бар (иначе не заполняется).
- Результат – массив
boolдля каждой временно́й точки: true – бурение вероятно.
3. Маска активности по давлению воздуха
- Давление воздуха считается рабочим, если оно находится в диапазоне 2,9–3,1 бар (нормальное плато).
- Провалы до 0 бар (выключение компрессора) допускаются, но не более чем на 1200 секунд (20 минут). Если провал короче – он заполняется как рабочий.
- Результат – ещё одна маска.
4. Объединённая маска
Бурение считается возможным, если оба условия (и давление вращения, и давление воздуха) истинны. Эта объединённая маска используется для уточнения интервалов, найденных по глубине.
5. Уточнение интервалов по глубине
Сначала находятся первичные интервалы бурения по изменению глубины (глубина растёт от minDepth до zeroDepth). Затем каждый интервал «обрезается» по времени на основе объединённой маски (то есть отбрасываются хвосты, где датчики не подтверждают активность). При этом интервал не сжимается слишком сильно – если уточнённая длительность менее 240 секунд, возвращается исходный интервал.
6. Расчёт средних значений датчиков (адаптивный метод)
Для каждого интервала бурения собираются все показания датчиков скорости подачи, давлений. Вместо простого среднего арифметического вычисляется:
- обычное среднее;
- медиана;
- стандартное отклонение. Если среднее сильно отличается от медианы (более чем на одно стандартное отклонение), считается, что распределение зашумлено, и в отчёт идёт медиана. Иначе – обычное среднее.
Скорость подачи переводится из см/мин в м/мин (деление на 100).
Параметры отчёта (настраиваются пользователем)
| Параметр | Назначение | Значение по умолчанию |
|---|---|---|
Глубина начала бурения (min_depth) |
Глубина (в метрах), после превышения которой начинается отсчёт бурения | 1 м |
Глубина окончания бурения (zero_depth) |
Глубина, после падения ниже которой бурение считается завершённым | 1 м |
Мин. продолжительность (min_time) |
Минимальная длительность интервала бурения в секундах (короткие отбрасываются) | 60 с |
Использовать датчик давления (use_drill_pressure) |
Если включено, то в V1 интервалы ищутся по дискретному датчику давления на бур (0/1) | false |
| Расширенная версия отчёта (v2) | Включает новую логику с масками и адаптивным средним | false |
Датчик режима бурения (use_new_drill_work_sensor_as_basic) |
Если включено, интервалы определяются строго по сигналу DrillWork (1 – бурит) |
false |
Макс. период ложного срабатывания (DrillWorkSkipGapSeconds) |
Короткие интервалы бурения (по DrillWork) короче этого порога игнорируются |
300 с |
Блок-схема работы отчёта (упрощённая)
Начало формирования отчёта
│
├── Получить подвижный объект (буровая установка) и временной промежуток
│
├── Прочитать параметры отчёта (глубины, длительность, режимы)
│
├── Запросить значения датчиков за интервал:
│ – Глубина
│ – Скорость подачи
│ – Давление вращения
│ – Давление подачи на бур
│ – Давление воздуха
│ – Режим бурения (если есть)
│
├── Если датчика глубины нет – вывести сообщение и завершить
│
├── Выбор режима работы:
│ │
│ ├── Режим с датчиком режима бурения (DrillWork) включён?
│ │ │
│ │ └── Да:
│ │ ├── Найти интервалы, где DrillWork = 1
│ │ ├── Отбросить интервалы короче порога ложных срабатываний
│ │ ├── Для каждого интервала:
│ │ │ ├── Определить максимальную глубину
│ │ │ ├── Рассчитать адаптивные средние для остальных датчиков
│ │ │ └── Добавить строку в таблицу
│ │ └── Перейти к выводу отчёта
│ │
│ └── Нет:
│ │
│ ├── Режим V2 (расширенный) включён?
│ │ │
│ │ ├── Да (V2):
│ │ │ ├── Построить временную шкалу по глубине
│ │ │ ├── Построить маску активности по давлению вращения (с заполнением провалов до 240 с)
│ │ │ ├── Построить маску активности по давлению воздуха (с заполнением провалов до 1200 с)
│ │ │ ├── Объединить маски: активность = вращение И воздух
│ │ │ ├── Найти первичные интервалы по глубине (превышение minDepth)
│ │ │ ├── Уточнить каждый интервал по объединённой маске (обрезать неактивные края)
│ │ │ ├── Для каждого уточнённого интервала:
│ │ │ │ ├── Вычислить максимальную глубину
│ │ │ │ ├── Рассчитать адаптивные средние по датчикам (с выбором медианы при шумах)
│ │ │ │ └── Добавить строку в таблицу
│ │ │ └── Перейти к выводу отчёта
│ │ │
│ │ └── Нет (V1 – старый режим):
│ │ ├── Есть ли датчик давления на бур и параметр «использовать датчик давления»?
│ │ │ │
│ │ │ ├── Да:
│ │ │ │ ├── Взять дискретные значения датчика давления (0/1)
│ │ │ │ ├── Найти интервалы, где давление = 1
│ │ │ │ ├── Для каждого интервала:
│ │ │ │ │ ├── Вычислить изменение глубины (максимум – минимум)
│ │ │ │ │ ├── Если изменение < minDepth – пропустить
│ │ │ │ │ ├── Рассчитать средние по размаху (max-min)/2 для датчиков
│ │ │ │ │ └── Добавить строку
│ │ │ │ └── Перейти к выводу
│ │ │ │
│ │ │ └── Нет:
│ │ │ ├── Найти интервалы по глубине (через ReportGlobal.GetEventBySensorValues)
│ │ │ ├── Отбросить слишком короткие (< minDuration)
│ │ │ ├── Для каждого интервала:
│ │ │ │ ├── Вычислить максимальную глубину
│ │ │ │ ├── Рассчитать средние по размаху (max-min)/2 для датчиков
│ │ │ │ └── Добавить строку
│ │ │ └── Перейти к выводу
│
├── Вычислить итоги по таблице:
│ – Суммарная длительность бурения
│ – Суммарная глубина (сумма глубин всех скважин)
│ – Средние значения по датчикам (обычное среднее)
│ – Количество скважин (число строк с данными)
│
└── Сформировать блок данных отчёта и вернуть пользователю
Особенности для специалиста по измерительной технике
- Датчик глубины – наиболее надёжный. Однако в реальности глубина может «застывать» на плато (например, при смене штанги). В режиме V2 предусмотрено заполнение плато до 240 секунд – это не разрывает интервал бурения.
- Датчик давления воздуха часто показывает стабильное плато (около 3 бар) и кратковременно падает почти до 0 при продувке скважины. Параметр
sensorTypeDrillAirPressureWorkGapSeconds = 1200(20 минут) позволяет не разрывать бурение на такие продувки. - Датчик давления вращения более инерционен. Провалы до 240 секунд и падение не ниже 40 бар – типичное поведение при временном снижении нагрузки на бур (например, при проходке мягких пород).
- Скорость подачи (см/мин) очень шумная. Поэтому в отчёте используется адаптивное среднее (медиана при выбросах), а не простое среднее или размах.
- Режим бурения (DrillWork) – самый надёжный способ определения бурения, если он правильно откалиброван. Однако на некоторых установках этот сигнал может быть задержан или давать ложные срабатывания. Параметр
DrillWorkSkipGapSecondsпозволяет отсечь короткие «всплески».
Рекомендации по настройке
- Для большинства буровых установок рекомендуется использовать режим V2 (расширенный) и, если есть датчик
DrillWork– дополнительно включить его как опорный, установив порог ложных срабатываний 300–600 секунд. - Параметры
min_depthиzero_depthобычно оставляют по умолчанию (1 метр), чтобы отсечь начальные колебания глубины. - Если датчики давления вращения и воздуха работают стабильно, можно уменьшить
workGapSeconds(например, до 120 секунд) для более точного определения границ скважин.
Отчёт ReportDrillingEvents позволяет получать достоверные данные о времени и объёме бурения даже при зашумлённых первичных сигналах, что важно для учёта выработки и планирования буровзрывных работ в горной промышленности.
Что такое «маска активности» (понятное объяснение)
В расширенном режиме отчёта (V2) мы анализируем не просто «было давление или нет», а строим для каждого датчика двоичную карту времени, где для каждого момента (с привязкой к меткам времени датчика глубины) записано «ДА» (true) — датчик показывает рабочий режим, или «НЕТ» (false) — нерабочий режим. Эта карта и называется маской активности.
Простыми словами: берём ось времени, разбитую на последовательные моменты (по времени поступления данных с датчика глубины). Для каждого момента смотрим на показание другого датчика (например, давления вращения). Если давление лежит в рабочем диапазоне (60–250 бар), ставим 1 (активно). Если нет — 0 (неактивно). Получаем последовательность из нулей и единиц — это и есть маска.
Зачем это нужно?
Одиночное мгновенное значение может быть ошибочным из-за шумов или кратковременных сбоев. Маска позволяет:
- Сглаживать кратковременные провалы — если давление упало на 10 секунд, а затем снова поднялось, мы можем «заполнить» этот провал единицами, потому что по физическому смыслу бурение не прерывалось.
- Объединять данные от разных датчиков — например, бурение считается идущим только тогда, когда оба датчика (давление вращения И давление воздуха) показывают активность. Для этого мы поэлементно умножаем две маски (логическое И).
Как строится маска на примере давления вращения
- Берём все моменты времени
timelineиз датчика глубины. - Для каждого момента находим ближайшее показание датчика вращения (или берём последнее известное).
- Если значение от 60 до 250 бар — записываем
true, иначеfalse. - Теперь «заполняем короткие провалы»: ищем участки, где маска равна
false, но их длительность меньше заданного порога (например, 240 секунд). Такие участки переключаем наtrue. Почему? Потому что на реальном бурении давление может кратковременно падать (смена породы, регулировка), но процесс не останавливается.
Объединение масок (логическое И)
После того как мы построили маски для давления вращения и для давления воздуха, мы создаём итоговую маску:
- Для каждого момента времени:
активность = маска_вращения И маска_воздуха. - Если оба датчика показывают рабочий режим — ставим
true(бурение вероятно), иначе —false.
Затем мы «накладываем» эту итоговую маску на интервалы, найденные по глубине. Если в каком-то интервале маска показывает false, но при этом глубина растёт — мы всё равно оставляем интервал (маска только уточняет границы, но не отменяет бурение). Однако если на краях интервала маска долгое время false — мы «обрезаем» эти края, чтобы интервал точнее соответствовал реальному времени бурения.
Аналогия для понимания
Представьте, что вы наблюдаете за работой станка:
- Один индикатор загорается, когда включено вращение шпинделя.
- Второй индикатор загорается, когда подаётся сжатый воздух для удаления стружки.
Вы хотите узнать, когда станок реально обрабатывает деталь. Для этого вы включаете логическую схему: если оба индикатора горят одновременно — считаем, что идёт обработка. Если один погас на секунду (помеха) — вы не выключаете обработку. Это и есть «маска активности» и её заполнение коротких провалов.
В коде отчёта
BuildActiveMaskWithGapстроит маску для давления вращения с заполнением провалов.BuildAirActiveMaskWithGapстроит маску для давления воздуха.combinedActive[i] = rotActiveMask[i] && airActiveMask[i]— объединение.RefineEventsBySensorsиспользует объединённую маску, чтобы уточнить границы интервалов, найденных по глубине.
Таким образом, маска активности — это инструмент цифровой обработки сигналов, позволяющий устойчиво выделять периоды работы оборудования даже при наличии шумов и кратковременных сбоев датчиков.