RR. Пользовательские переменные блочной модели
Иногда нам может потребоваться отображать поля, которые не были закодированы в исходной блочной модели. Например, определения руды и породы могут быть более комплексными, с несколькими сортами и типами материалов. В таком случае, в приложении присутствует опция добавления пользовательских переменных, позволяющая прописать любую более сложную логику в доступном для чтения и повторного использования виде, также доступную для объединения с другими формулами сопоставления блочной модели.
Язык написания скриптов - C#.
Создание пользовательской переменной
Перейдите вкладка Настройка > шаг Блочная модель > кнопка Изменить > окно Генератор модели запасов.
Нажмите Пользовательские переменные, чтобы открыть окно редактора кода.
Удалите весь текст из окна редактора кода.
Замените его на один из приведенных ниже.
В списке доступных переменных справа вы увидите новую переменную, например, CustomT("Parcel"), выделенную жирным шрифтом, сопоставьте ее с полем Parcel.
Примеры пользовательских переменных
Сухой тоннаж
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Alastri.Scripting;
using Alastri.BlockModel.Engine.CustomVariables;
public class DryTonnes : IDoubleCustomVariable
{
public double GetNumber(CustomVariablesContext context)
{
double density = context.N("DENSITY");
double volume = context.N("XINC")*context.N("YINC")*context.N("ZINC");
return (density > 0 ? density * volume : 0);
}
} |
Классификация по одному параметру сортировки
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Alastri.Scripting;
using Alastri.BlockModel.Engine.CustomVariables;
public class Parcel : ITextCustomVariable
{
public string GetText(CustomVariablesContext context)
{
double fe = context.N("fe");
if(fe > 60) return "hg";
else if(fe > 58) return "mg";
else if(fe > 57.5) return "lg1";
else if(fe > 56) return "lg2";
else if(fe > 50) return "minw";
else return "w";
}
}
Классификация по нескольким параметрам
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Alastri.Scripting;
using Alastri.BlockModel.Engine.CustomVariables;
public class Parcel : ITextCustomVariable
{
public string GetText(CustomVariablesContext context)
{
double fe = context.N("fe");
double al = context.N("al");
string geology = context.T("geology");
string fe_bin;
if(fe > 60)
{
fe_bin = "60";
}
else if(fe > 55)
{
fe = Math.Floor(fe);
fe_bin = fe.ToString("#,##0");
}
else
{
fe_bin = "50";
}
string al_bin;
if(al < 3)
{
al_bin = "3";
}
else if(al < 6)
{
al = Math.Ceil(al);
al_bin = al.ToString("#,##0");
}
else
{
al_bin = "9";
}
string geoClass = "1";
if(geology.Equals("detrital", StringComparison.OrdinalIgnoreCase))
{
geoClass = "2";
}
return fe_bin + "_" + al_bin + "_" + geoClass;
}
}
Коэффициент содержания руды
Поля блочной модели Rapid Reserver не могут сообщать коэффициент вскрыши (Stripping Ratio), поскольку он не является средневзвешенным или суммируемым полем. Вместо этого, приложение может сообщать коэффициент содержания руды, который является отношением среднего веса тонн руды к общим тоннам.
Для сообщения коэффициента содержания руды нам потребуется настроить поле средневзвешенных единиц с именем OreRatio (Коэффициент руды) как дочернюю запись параметра «dryTonnes» или «wetTonnes» (в зависимости от того, какие тонны (в сухом или во влажном состоянии) Вы хотите включить в отчет. В этом поле будет указано «1» для руды и «0» для вскрыши. Усредненное значение единиц и нулей во взрывном блоке и будет являться коэффициентом содержания руды.
Коэффициент содержания руды
Несколько пользовательских переменных
Для создания нескольких пользовательских переменных, для каждой переменной требуется создать классы, выполняющие запросы интерфейса IDoubleCustomVariable или ITextCustomVariable. Такие классы должны быть перечислены друг под другом в окне редактора кода пользовательских переменных, как показано в примерах ниже.
Несколько пользовательских переменных
Несколько пользовательских переменных с совместно используемой логикой
Доступ к пользовательской переменной из другой пользовательской переменной
Доступ к значениям пользовательской переменной из другой переменной