Журнал "Глобус: геология и бизнес"

Расширение функционала горного модуля с помощью скриптинга

Количество реализованных скриптов с использованием языка программирования Python в системе Micromine не перестает расти. Темп их роста порой значительно превышает темпы развития встроенных в программу функций. Связано это с тем, что в то время как над программным кодом Micromine работают всего несколько человек, скрипты доступны каждому пользователю, что позволяет создавать новые функции «здесь и сейчас» с учетом специфики любого отдельно взятого производства. Безусловно, для этого необходимо обладать хотя бы какими-то навыками программирования, чтобы справиться с поставленной задачей, однако их отсутствие вовсе не означает, что стоит отказаться от идеи реализации того или иного алгоритма. За помощью стоит обратиться в техническую поддержку Micromine, где наши высококвалифицированные специалисты всегда с радостью вам подскажут.

С момента появления Python в Micromine в качестве дополнительного инструмента некоторые примеры реализованных скриптов ежегодно демонстрируются на конференции пользователей Micromine в рамках Международного горнопромышленного форума MINEX. Однако мы ни разу еще не писали о том, что уже сделано. Каждое из решений – это не просто программный код, который пользователь должен изменять для конкретной задачи, чтобы использовать его на своих данных. Скрипт – это привычное диалоговое окно с полями ввода и кнопками, что делает его более гибким и удобным.

Совсем недавно по просьбе наших пользователей были написаны скрипты, являющиеся расширениями для имеющегося горного модуля Micromine, которые позволяют решать некоторые актуальные на производстве задачи, такие как подсчет объемов, построение горной выработки и расчет разубоживания. Рассмотрим их подробнее, чтобы каждый читатель мог понять, насколько реализованные скрипты применимы в его сфере деятельности. Напомним, что каждый из них может быть легко модифицирован или улучшен для удовлетворения частным требованиям, так как скрипт является программой с открытым кодом.

Подсчет объемов

Подсчет объемов в скрипте осуществляется тремя классическими способами: методом параллельных горизонтальных сечений, методом параллельных вертикальных сечений и методом объемной палетки. Каждый из методов имеет свои входные параметры. Для горизонтальных сечений единственным параметром является расстояние между плоскостями, по которым режется исходный каркас. В случае вертикальных сечений помимо расстояния можно задать также направление, в котором будет нарезаться объемное тело. Расчет происходит по формуле объема усеченной пирамиды или как произведение половины суммы площадей соседних сечений на расстояние между ними. В качестве выходного файла пользователь получит привычный файл отчета, в котором будут записаны необходимые данные: все входные параметры и конечный результат.

Такой формат вывода создан по запросу конкретного заказчика. Если у других пользователей имеются отличные требования и пожелания к результату работы скрипта, то его можно модифицировать. Например, сделать экспорт самих сечений с пометками о площадях в различные форматы, такие как HTML или PDF. В качестве альтернативы можем предложить вариант перевода получившихся сечений в условные координаты, что позволит работать с ними в плане. Есть множество различных вариантов, каждый из которых можно реализовать, потратив на это минимум времени и получив совершенно новый инструмент.

При использовании метода палетки для подсчета объема нужно указать шаги по осям абсцисс и ординат, в соответствии с которыми создастся сетка. Следующим этапом является пересечение силуэта исходного каркаса с сеткой, после чего мы находим координаты центров масс каждой ячейки. Высотные отметки каркаса соответствуют точкам пересечения прямых с телом в точках, ординаты и абсциссы которых совпадают с координатами центров масс ячеек палетки. Далее объем каркаса вычисляется как сумма произведений площадей ячеек на соответствующие им высоты. На рисунке изображен вариант отчета, который получен в результате работы программы. В каждой ячейке имеется четыре текстовых метки: верхняя высотная отметка, объем, разница между высотными отметками и нижняя высотная отметка. Для наглядности объем выделен красным цветом. Сбоку и снизу от палетки указаны объемы по каждому ряду или столбцу палетки. Размер текстовой метки пропорционален размеру ячейки, что позволяет сделать отчет более читабельным и удобным для анализа.

Чтобы сохранить саму палетку, достаточно задать имя файла стрингов, в котором будут записаны все необходимые данные. Так как отображение палетки включает в себя определенное расположение текстовых меток, то скрипт включает в себя и загрузчик палеток, который упростит процесс визуализации. Встроенный загрузчик позволит избежать создания дополнительных форм, которых по ходу работы накапливается и так немалое количество.

Построение профиля горной выработки

Часто требуется представить отчет в виде профиля пройденной горной выработки, на котором отображены различные фактические и проектные данные. Если у вас имеется, скажем, файл точек (пикетов), в котором также хранится проектная и фактическая информация, то такой отчет можно получить с помощью реализованного скрипта. Достаточно просто загрузить этот файл точек в «Визекс», нарисовать стринг по тем пикетам, по которым нужно построить профиль, и задать в окне скрипта в качестве входных данных эти два файла стрингов и точек. В результате пользователь получит профиль выработки со сводной таблицей с данными о подсыпке, отклонении факта от проекта и другие. Сам профиль является также файлом стрингов, в котором хранится вся необходимая для отчета информация. Для загрузки получившегося файла профиля в «Визекс», как и в предыдущем случае, требуется задать определенные настройки, этот скрипт также содержит встроенный загрузчик. Для загрузки профиля пользователю нужно только выбрать файл профиля.

Стоит отметить, что данный скрипт отображает только ту информацию, которая хранится в указанных файлах. Если в «Визексе» находятся какие-то другие объекты, которые попадают в область профиля, то они отображаться не будут. В этом основное отличие скрипта от уже существующего инструмента разреза.

Разубоживание

Последним скриптом, который мы рассмотрим в рамках этой статьи, является скрипт для расчета разубоживания руды при отработке горных выработок как пустой породой, так и, например, бетоном из прилежащих уже пройденных выработок. Чтобы рассчитать разубоживание, нужно всего лишь нарисовать файл стринга, вдоль которого будет происходить расчет. Этот стринг также может соединять пикеты, что позволит в отчете увидеть, какое разубоживание на конкретном метре выработки. Расчет разубоживания вдоль стринга позволяет получить отчет не по всей выработке целиком, а по какому-то определенному участку. Чтобы учесть пересечения интересующей выработки с прилежащими лентами, в окне скрипта достаточно указать имена этих каркасов. Данный скрипт позволяет выбрать до восьми прилежащих каркасов с типом пересечения с выработкой: с кровлей, подошвой или бортом. Результат работы – это файл отчета Micromine, в котором записывается общее разубоживание, а также разубоживание по бортам, кровле, подошве в отдельности по пикетам.

Как это было реализовано?

Для удобства написания скриптов могут быть использованы дополнительные сторонние модули, позволяющие упростить и ускорить процесс разработки, потому что они содержат готовые отлаженные алгоритмы. Так как в описанных выше программах часто требуется выполнение таких операций, как вычисление площади, нахождение пересечений стрингов и прочие геометрические задачи, то для их решения идеально подходит модуль shapely, являющийся бесплатным расширением языка Python, который можно найти и скачать в Интернете. Данный модуль включает в себя встроенные функции, используемые в алгоритмах для решения описанных задач, а также аффинных преобразований, расчета координат центров масс фигур и т. д. С его помощью легко создавать буфер вокруг геометрического объекта на плоскости, написав всего одну строку кода.

Продвинутые пользователи могут создавать подобные расширения самостоятельно. Помимо их создания с нуля возможности языка программирования Python позволяют использовать в своей основе уже имеющиеся объекты. Таким образом, можно, например, расширить имеющийся класс MMpy.File, позволяющий работать с файлами Micromine. Одно из подобных решений можно найти на нашем форуме. С помощью него можно без особых трудностей наладить процесс чтения и записи, импорта или экспорта в текстовый формат файла с разделителем. Чем больше в вашем арсенале таких инструментов и чем более ловко вы ими начинаете пользоваться, тем совершеннее становится скрипт, который в дальнейшем уже может носить гордое имя «программа».

Эти и другие инструменты доступны любому пользователю, работающему в версии Micromine 2013 и выше. Все, что нужно для работы, – это установленный на компьютере Python и сам файл скрипта.

Почти двухлетний опыт использования скриптов дает понять, что запас задач, решение которых требует написания новых инструментов с помощью скриптинга, не иссяк, а наоборот, их становится все больше, что делает скрипты очень востребованными, поэтому если вы ощущаете острую нехватку какой-либо функции в меню программы Micromine, то обязательно пишите об этом нам. Вероятнее всего, она появится либо в виде скрипта, либо в новой версии программы. Если написанный скрипт окажется очень популярным и интересным, то его также добавят в основное меню программы, как случилось, например, с подсчетом объемов по горизонтам или загрузкой цвета точек непосредственно из поля без использования набора цветов. Ждем от вас, дорогие пользователи, интересных задач, и чем больше, тем лучше!

Exit mobile version