Дизайнер обложки Татьяна Вяльцева
© Андрей Вяльцев, 2024
© Георгий Кирьяков, 2024
© Татьяна Вяльцева, дизайн обложки, 2024
ISBN 978-5-0064-1169-2
Создано в интеллектуальной издательской системе Ridero
Введение
Книга написана в помощь специалистам, работающим с Datamine (любой версии) и желающим сделать свой труд более эффективным. Макросы – очень неплохое подспорье в работе, позволяющее ее ускорить и/или упростить. По сути, написание макросов – это программирование. Несмотря на то, что у большинства геологов когда-то там в ВУЗе был курс информатики с элементами программирования, почти никто из студентов геологических специальностей не уделяли этому предмету большого внимания. В результате, когда пришло время применять «полученные знания», оказалось, что «методом научного тыка» получается освоить не более чем линейные алгоритмы. Как итог – большинство макросов, написанных большинством специалистов, работающих с Datamine, представляют собой огромные «простыни», которые трудно читать, еще труднее править и/или отлаживать. Кроме того, макросы, имеющие относительно длительную историю, часто похожи на классическое письмо из Простоквашино, когда начинал писать макрос один специалист, потом при изменении условий (количества каркасов, поля зонального контроля или еще чего-нибудь) уже другой специалист, не разобравшись в исходном макросе (а как в нем разобраться, если это документ объема «Войны и мира» на языке то ли майя, то ли шумеров?), начал подставлять «костыли», потом пришел третий (четвертый, пятый и далее по списку), каждый со своими костылями, и так далее. О модификации таких фундаментальных макросов речи не идет, и все ими пользуются по принципу «работает – и слава богу». Это неправильно. Макросы должны быть короткими, настолько, насколько это возможно для решения конкретной задачи, понятными, легко анализируемыми и относительно легко модифицируемыми. А еще – должна существовать возможность использования макросов в относительно широком диапазоне входных данных, а не только в данных конкретных.
Книга, которую вы приобрели и открыли, призвана помочь вам научиться писать такие компактные, понятные и гибкие макросы. В книге содержатся основы программирования в применении к языку макросов для решения геологических задач. Мы старались излагать материал максимально доступным и понятным языком, разбавляя повествование шутками и прибаутками, чтобы вас, не дай бог, посередине книги не потянуло в сон.
Для освоения материала не требуется никаких специальных познаний в области IT, программировании и т. д. (хотя вредными они не будут). Достаточно навыков работы с Datamine.
Книга рекомендована специалистам, работающим в Datamine, у которых часто «горят сроки». Книга также может быть полезна творческим личностям, которым лень выполнять механическую однообразную работу. В принципе нет никаких отличий в написании макросов для геологического моделирования и для задач, скажем, горняков или маркшейдеров. Но авторы книги – геологи, поэтому изложение материала дается применительно к задачам, возникающим перед геологами. Любой специалист, работающий в Datamine, может вынести из книги полезные знания и умения, но не-геологам сделать это в рамках данной книги будет немножко сложнее.
Книга разработана с использованием версии Datamine Studio RM 2.0.66.0. Однако можно с достаточно большой степенью уверенности утверждать, что навыки, полученные при его прохождении, могут быть с успехом применены и для более ранних версий и, видимо, для более поздних (с учетом процессов или параметров процессов, которые появляются с новыми версиями). Макросы, приведенные в книге, ориентированы именно на упомянутую версию Datamine, но, скорее всего, будут работать и в более ранних версиях, просто часть параметров (появившихся в свежих версиях) будет проигнорирована.
Книга создана на основе учебного курса, который можно найти на широко известном обучающем ресурсе Stepik. Если книга покажется интересной – милости просим и туда. Книга – штука неизменяемая, а в учебном курсе что-то может быть изложено по-другому – понятнее или глубже. Примеры файлов, используемые по ходу книги, расположены на GitHub.
Если в ходе изучения изложенного материала у вас возникнет недопонимание прочитанного и/или горячее желание что-то переспросить или возразить – добро пожаловать в telegram-канал «Ресурсные геологи». Мы, скорее всего, где-то там присутствуем.
А теперь кратко об авторах.
Кирьяков Георгий
Кандидат геолого-минералогических наук. Стаж работы в геологии 29 лет, из которых 23 года занимался построением моделей минерализации месторождений различной металлогенической специализации – от черных металлов (Fe, Cr…) до цветных и благородных, а также алмазов, бокситов, известняков. Сопровождал работы добывающих предприятий в Гвинее, Гайане, России (подсчет запасов, проектирование ГРР и т. д.). Выполнял все аспекты оценки минеральных ресурсов, включая анализ первичных данных, их обработку, геологическую интерпретацию и геологическое моделирование. Написал большое количество макросов и скриптов для ПО Datamine, которые в настоящий момент используются на множестве месторождений (проверка базы данных опробования, проверка контактов рудных каркасов, анализ длин подвесок, сближенные пакеты MSO, степень увязки проб в каркасы и др.). Разработал методики моделирования и написал макросы построения моделей минеральных ресурсов для следующих месторождений: Албазино, Капан, Викша, Маломыр и др. Проводит тренинги и обучение специалистов на добывающих и разведочных предприятиях в области геологического моделирования.
Вяльцев Андрей
Компетентная персона в области оценки минеральных ресурсов (IOM3 (QMR), AusIMM, AIG, MPONEN, ОЭРН). Стаж работы в геологии 12 лет, из которых 11 лет занимался ведением баз данных и построением моделей минерализации и моделей контроля содержаний. За время работы принимал участие в построении моделей МР нескольких десятков месторождений полезных ископаемых, которые располагаются в России, Казахстане, Армении, Африке. Выполнял все аспекты оценки минеральных ресурсов, включая анализ первичных данных, их обработку, геологическую интерпретацию и геологическое моделирование. За время работы посетил порядка 15 золотых, серебряных и медных рудников. Курировал процесс процедуры согласования. В настоящий момент по разработанным им методикам и написанным макросам строятся модели минеральных ресурсов следующих месторождений: Бакырчик, Варваринское, Комаровское, Майское, Лунное, Воронцовское и другие. Читал множество докладов на конференциях в Великобритании и России. Проводит тренинги и обучение специалистов на добывающих и разведочных предприятиях в области геологического моделирования.
Внимание! В тексте книги, в отличие от скриншотов, некоторые функции приводятся с пробелом перед открывающей скобкой. Это чисто техническая проблема: в выбранном нами редакторе присутствует неотключаемая опция автокоррекции, которая автоматически ставит пробел перед любой открывающей скобкой. Например, на странице 63 приводится функция возведения числа в степень, в которой присутствует лишний пробел между именем функции и открывающей скобкой с перечислением параметров. К сожалению, обнаружили мы эту неприятность в момент, который не предполагал смены редактора. Приносим свои извинения за эту неприятность и уведомляем, что при наличии разночтений между текстом и скриншотами правильный вариант написания функции – на скриншотах.
Макросы: что это, для чего нужны, что могут и что не могут
Для чего нужны макросы
Макросы являются прекрасным средством для того, чтобы:
– Быстро сделать много механической работы. Наверное, лучшее определение «быстро» звучит так: «быстро – это не торопясь, но без перерывов». Любое действие в Datamine будет выполняться с одинаковой скоростью вне зависимости от того, запущено оно руками или макросом (при прочих равных). Но если вам надо выполнить более одного действия, макрос будет работать быстрее вас просто потому, что он не делает перерывов между этими действиями. А человек – делает. Просто в силу своей природы: если вам надо выполнить связку TRIFIL+PROMOD на большом и сложном файле каркасов, вы вряд ли будете сидеть и любоваться тем, как выполняется TRIFIL. Скорее всего, вы отвлечетесь (поводов масса). А макрос – нет. Но даже если у вас железная сила воли и вы не отвлекаетесь от наблюдения за работой TRIFIL, на ввод параметров для PROMOD у вас уйдет времени больше, чем у макроса. Итог: макрос не делает перерывов, поэтому он быстрее ручной работы.
– Выполнить то, что сделать вручную технически сложно и долго – например, длительный циклический перебор тех или иных параметров с целью получения некоего оптимального результата. Один из макросов, разработанных авторами книги, занимается тем, что подбирает оптимальные параметры дробления при заполнении каркасов ячейками. То есть схема такая: выбрали размеры подъячеек, заполнили, проверили качество. То, что заполнено хорошо – отложили в сторону. То, что заполнено плохо, заполняется повторно с меньшими подъячейками. И так до достижения удовлетворительного результата. Для выполнения этой задачи надо многократно запускать несколько процессов (TRIFIL+PROMOD+TRIVAL+EXTRA). Да, физически вы можете запустить любой процесс несколько десятков раз (нажать на кнопку – процедура не так чтобы особо утомительная), но есть большие сомнения, что ваша психика выдержит эту монотонную «работу». У макроса психики нет. Ему сказали – он делает.
– Обеспечить прозрачность моделирования. Вместо длинных словесных описаний того, как выполнялось моделирование, можно приложить к отчетным материалам макрос – и 99% вопросов о методике моделирования будут сняты.
– Пофилонить на рабочем месте без ущерба для рабочего процесса. Ну или же заняться в это время более творческой работой – зависит от личных предпочтений. Логично переложить техническую работу на бездушную железяку, а самому в это же самое время с абсолютно чистой совестью поразмышлять о возвышенном.
Ну и, наконец, это интересно и увлекательно (хотя на этот счет есть разные мнения).
Язык макросов – неплохо развитый внутренний для Datamine язык программирования, поэтому, по сути, написание макросов – это программирование. Но поскольку вы, вероятнее всего, все-таки не программист, лучше не заявлять лишний раз о том, что вы программируете, а на вопрос «что делаешь?» отвечать нейтральное «макрос пишу».
Что такое макрос
Макрос – текстовый файл, имеющий расширение *mac и кодировку Win-1251 (да, это не совсем так, если вы находитесь в стране, где актуальность кириллицы близка к 0, но данная книга ориентирована в первую очередь на «пользователей с кириллицей»). Макросы, написанные в кодировке семейства UTF, выполняться будут, но при работе со строками результат может не вполне соответствовать ожиданиям, плюс при выводе комментариев вы, скорее всего, увидите кракозябры вместо знакомых с детства символов кириллицы.
![](/pub/t/70820635.json/image0_66359f6ae7995c87185a0f49_jpg.jpeg)
Макрос, содержащий строку на кириллице в кодировке UTF (слева), и вывод этой же строки в окно Command Datamine (справа)
Еще одна неприятность при работе с кодировками не-Win-1251 – это все те же кракозябры при редактировании файлов в кодировке «не той системы»: если вы настроили ваш любимый редактор на чтение именно кодировки Win-1251, то открытие файла в другой кодировке приведет к неожиданному эффекту, показанному на следующей странице.
В общем, давайте в рамках данной книги считать, что макросы пишутся в кодировке Win-1251 – и все тут.
Макрос содержит последовательность команд, которые необходимо выполнить для решения какой-либо задачи. Все команды в макросах начинаются с восклицательного знака. Макрос всегда начинается с команды START, после которой идет имя макроса. Макрос всегда заканчивается командой END. «Минимальный» макрос выглядит следующим образом (да, мы нарушим традиции и не будем писать программу «Hello, world!»):
!START NOACTION
!END
![](/pub/t/70820635.json/image1_6635fbb57089f4000756bb47_jpg.jpeg)
Макрос с кириллицей, созданный в кодировке Win-1251, открытый в кодировке UTF (сверху) и в кодировке Win-1251 (снизу)
Этот макрос содержит все атрибуты, необходимые для того, чтобы Datamine воспринимал файл с этим текстом как макрос: у него есть начало, имя (NOACTION) и конец. Макрос не делает ничего, но пока этого и не требуется. Пока что достаточно выглядеть как макрос. Дальше этого будет мало, но на текущем этапе можно и так.
Как запускать макрос
Существующий макрос можно запустить тремя способами (может, есть еще, но нам, кроме этих трех, ничего в голову не приходит):
– с помощью кнопки в ленте команд; кнопка расположена непосредственно на вкладке Home;
![](/pub/t/70820635.json/image2_6635a0a6e7995c87185a1327_jpg.jpeg)
– прямо под кнопкой запуска макроса находится кнопка вызова меню работы с макросами, одним из пунктов которого также является запуск макроса; из остальных предложенных вариантов наиболее полезным является вариант Start Recording – его разберем чуть позже;
![](/pub/t/70820635.json/image3_6635a0a5e7995c87185a1324_jpg.jpeg)
– с помощью контекстного меню, которое вызывается правой кнопкой мыши из дерева проекта.
![](/pub/t/70820635.json/image4_6635a0a3e7995c87185a1321_jpg.jpeg)
Варианты не вполне равнозначные. Во-первых, как несложно заметить, в третьем варианте, кроме выбора файла макроса, сразу же предлагается выбрать имя макроса, так как в файле может быть больше одного макроса. В рамках книги мы не будем подробно останавливаться на этой возможности, просто будет нелишним помнить о ней. Так вот, если в файле содержится один макрос, кнопкой в ленте (первый способ) будет запущен именно он. Если несколько, то при первом или втором способе запуска после выбора файла будет предложено выбрать также и имя макроса. При запуске макроса из контекстного меню в любом случае будет предложено выбрать имя макроса – даже если он там один.
Во-вторых, в случае, если при оформлении макроса были допущены ошибки, с помощью контекстного меню макрос, скорее всего, даже не получится запустить, а с помощью кнопки меню Datamine попытается его запустить, у него ничего не получится, и в окно Command будет выведено сообщение об ошибке.
Что может и не может макрос
Макрос может:
– выполнять все операции, выполняемые процессами Datamine (теми, что запускаются из командной строки Datamine);
![](/pub/t/70820635.json/image5_6635a0a2e7995c87185a131e_jpg.jpeg)
Командная строка Datamine, если кто забыл
– читать файлы формата dm без использования процессов Datamine, но, увы, не создавать и не изменять их (об этом чуть позже);
– управлять командами операционной системы (есть тут кто-нибудь, кто помнит, как жить без графического интерфейса, под чистой DOS?).
Например, вот такой макрос:
!START SYSMACRO
!OPSYS
echo Hello, world>> newfile. txt
!END
создаст в рабочем каталоге вашего проекта файл `newfile. txt` и запишет туда текст «Hello, world» (давайте-таки соблюдем традиции!).
Макрос не может сделать ничего, что бы выходило за рамки процессов Datamine. Например, макрос не может управлять объектами в окне 3D: он не может загрузить в окно 3D что-либо, не может в этом окне что-то сделать с загруженными данными и т. д., например, «штатными» инструментами макрос не может выполнить проверку каркасов на ошибки или соединение двух стрингов.
Когда-то давно, когда компьютеры были большими, а Datamine существовала без добавки Studio (и представляла собой набор программ), в пакете программ Datamine существовал еще один внутренний язык программирования, который как раз мог управлять окном 3D (точнее, на тот момент – программой Guide). Однако с появлением Datamine Studio этот язык тихо умер (кажется, это произошло сразу, как вышла Datamine Studio 1). В текущих версиях Datamine автоматизацию работы в окне 3D должен обеспечить JavaScript или любой язык программирования, способный подключиться к API Datamine. И, в принципе, обеспечивает. Беда в том, что делает это так себе – главным образом из-за отвратительной степени документированности этого самого API.
Да, сразу предупреждаем: скрипты, написанные на JavaScript, в этой книге не рассматриваются.
Необходимые навыки
Собственно, единственный обязательный навык для написания макросов – это умение работать с Datamine, которое должно включать знание процессов, понимание того, для чего они используются и как работают. Временами приветствуется знание школьного курса математики и любознательность. Никакого тайного таланта к программированию не требуется. Вообще, утверждение «я не способен программировать» – полнейший абсурд. Задумайтесь на минуту: что вы будете делать сегодня после работы? Ответ, вероятно, будет примерно следующим: «В 18:00 я отключу компьютер, надену уличную обувь, запру кабинет и пойду домой. По дороге я зайду в магазин N и куплю (далее следует список)». Ну, собственно, вот: вы только что написали программу. Программу вашей жизни сегодняшним вечером. Сложно? Талант потребовался? Ситуация с написанием макросов примерно такая же: если вы знаете, что надо сделать для получения нужного результата, вы можете написать макрос.
На самом деле, ситуация с макрописательством – такая же, как, например, с бегом на 100 м: вы можете пробежать 100 м за, предположим, 18 секунд, после некоторой тренировки вы можете довести это время до 14—15 сек. При упорных тренировках, наверное, вы сможете «выбежать» из 12—13 сек. Но для того, чтобы довести это время до 10 сек., нужен талант. Так и здесь: простые макросы может писать любой, но для чего-то более сложного нужны тренировки, а с некоторого момента – предрасположенность. Но даже простые макросы здорово улучшают жизнь. Данное руководство рассчитано на людей, начинающих что-то такое писать на языке макросов и не требует наличия «чего-то эдакого».
$ Задание 1.1
Чем завершится выполнение данного макроса?
!START MACRO
!END
A) Макрос запустится, не сделает ничего и выведет информацию о завершении работы в окно Command
B) Ошибкой и выводом информации об ошибке в окне Command
C) Макрос запустится, выведет информацию об имени макроса в окно Command и не сделает более никаких действий
D) Макрос даже не запустится
$ Задание 1.2
Чем завершится выполнение данного макроса?
START MACRO
!END
A) Ошибкой и выводом информации об ошибке в окне Command либо даже не удастся его запустить
B) Макрос запустится, выведет информацию об имени макроса в окно Command и не сделает более никаких действий
C) Макрос запустится, не сделает ничего и выведет информацию о завершении работы в окно Command
$ Задание 1.3
Чем завершится выполнение данного макроса?
!START MACRO
END
A) Макрос даже не запустится
B) Ошибкой и выводом информации об ошибке в окне Command
C) Макрос запустится, выведет информацию об имени макроса в окно Command, выведет информацию о завершении работы в окно Command, но исполнительный файл макроса останется заблокированным для редактирования до перезагрузки Datamine
D) Макрос запустится, не сделает ничего и выведет информацию о завершении работы в окно Command
$ Задание 1.4
Чем завершится выполнение данного макроса?
START MACRO
END
A) Ошибкой и выводом информации об ошибке в окне Command либо же даже не удастся его запустить
B) Макрос запустится, выведет информацию о начале работы в окно Command и не сделает более никаких действий
C) Макрос запустится, выведет информацию об имени макроса в окно Command и не сделает более никаких действий
D) Макрос запустится, не сделает ничего и выведет информацию о завершении работы в окно Command
$ Задание 1.5
Чем завершится выполнение данного макроса?
!START
!END
A) Ошибкой и выводом информации об ошибке в окне Command
B) Макрос запустится, выведет информацию об имени макроса в окно Command и не сделает более никаких действий
C) Макрос запустится, не сделает ничего и выведет информацию о завершении работы в окно Command
D) Макрос запустится, выведет информацию о начале работы в окно Command и не сделает более никаких действий
E) Ошибкой и выводом информации об ошибке в окне Command, при этом исполнительный файл макроса останется заблокированным для редактирования до перезагрузки Datamine
Инструменты разработки
На данный момент мы уже знаем, что макрос – это текстовый файл. Чем можно создавать и редактировать текстовый файл? Очевидно, текстовым редактором. Каким? Да хоть бы и штатным «Блокнотом». И в родном учебнике Datamine все скриншоты макросов приведены именно с использованием этого бессмертного редактора.
![](/pub/t/70820635.json/image6_6635a098e7995c87185a12f7_jpg.jpeg)
Учебник по макросам
Однако «можно» – не значит «нужно». Вообще, рекомендовать использовать «Блокнот» для написания макросов можно только злейшему врагу. Никому другому «Блокнот» для этих целей рекомендовать не стоит. Поскольку мы не питаем столь сильных чувств к читателям данной книги, то и рекомендовать использовать «Блокнот» не будем. А что будем? А будем любой из перечисленных ниже:
– Sublime Text;
– Visual Studio Code;
– Notepad++.
Выбор инструмента для работы – штука сугубо интимная, и никого ни к чему принуждать не собираемся. Далее кратко опишем упомянутые инструменты.