Общие определения
Макрос — это последовательность команд, которая выполняет конкретную задачу. Иногда мы будем использовать родственный термин — скрипт.
Для добавления, удаления и редактирования макросов воспользуйтесь пунктом меню Сервис → Настройки → Макросы.
Макрос в визуализаторе Inectra CNС представляет собой последовательность G-код команд со вставками кода на языке JavaScript. Вставки JavaScript-кода, которые включают в себя переменные, массивы, условные конструкции, циклы, обязательно должны быть заключены в фигурные скобки {}.
Объявление переменных
Переменные объявляются с помощью ключевого слова var, например:
{ var slow_f = 500 }
В этом примере переменная slow_f инициализируется значением 500. Переменные в JavaScript не имеют типа.
Объявление массива
{ var x_pos_list = [100, 200, 300, 400] }
Условные конструкции
{ if ($.tn < 1 || $.tn > 4) { $.message("Bad next tool number!"); $.exit() } }
В этом примере если переменная $.tn меньше 1 или больше 4, то нужно вывести текстовое сообщение и завершить макрос.
Циклы
{ while ($.status != 1) { $.wait() } }
В этом примере цикл крутится до тех пор, пока статус контроллера не изменится на Готов (код статуса 1), см. пояснения ниже).
Встроенные функции
$.wait() — команда холостого ожидания.
$.input() — окно со списком полей для ввода входных параметров.
$.message() — окно вывода списка значений.
$.send() — функция для отправки G-код команды. Используется только внутри блока Javascript-кода.
$.tasklist.is_running() — возвращает 1, если в настоящий момент запущена G-код программа (в независимости от того, поставлена она на паузу или нет).
$.tasklist.start_hold() — если список задач (в частном случае одна УП) стоит на паузе, то данная функция возобновляет её работу. Если список задач не запущен, то функция запускает его на исполнение.
$.tasklist.stop() — функция прерывание выполнение списка задач - действие аналогично кнопке Прервать.
$.hold() — функция отправляет в контроллер realtime-команду постановки на паузу ("!"). Контроллер переходит в состояние Пауза.
$.unhold() — функция снимает контроллер с паузы, отправляя в него realtime-команду старт ("~").
$.gotosafe() — функция отправляет в контроллер команды перехода в безопасное положение - действие аналогично кнопке Безопасное положение.
$.executors[i].enable() — функция выполняет переключение системы на исполнитель с индексом i в таблице исполнителей (нумерация с 0).
$.executors[i].profile_enable() — функция выполняет применение настроек установленного профиля для исполнителя с индексом i (нумерация с 0).
$.executors[i].bind_gcode_tool_number — функция возвращает 1, если для исполнителя с индексом i в его настройках установлена галочка Привязать номер инструмента.
$.executors[i].gcode_tool_number — функция возвращает сконфигурированный в настройках исполнителя с индексом i соответствующий ему номер инструмента в G-код команде Tx.
$.savevar(name, value) — функция для сохранения в памяти визуализатора глобальной переменной name со значением value. Эта переменная сохранит свое значение после выхода из макроса и будет доступна для чтения из других макросов. До версии 4.2 включительно после закрытия визуализатора переменная удаляется.
$.readvar(name) — функция для чтения из памяти визуализатора глобальной переменной с именем name.
Встроенные переменные
$.wc.x — текущее значение рабочей координаты X
$.wc.y — текущее значение рабочей координаты Y
$.wc.z — текущее значение рабочей координаты Z
$.wc.a — текущее значение рабочей координаты A
$.wc.b — текущее значение рабочей координаты B
$.wc.c — текущее значение рабочей координаты C
$.mc.x — текущее значение машинной координаты X
$.mc.y — текущее значение машинной координаты Y
$.mc.z — текущее значение машинной координаты Z
$.mc.a — текущее значение машинной координаты A
$.mc.b — текущее значение машинной координаты B
$.mc.c — текущее значение машинной координаты C
$.prb.x — текущее значение координаты (машинной) зонда по оси X
$.prb.y — текущее значение координаты (машинной) зонда по оси Y
$.prb.z — текущее значение координаты (машинной) зонда по оси Z
$.prb.a — текущее значение координаты (машинной) зонда по оси A
$.prb.b — текущее значение координаты (машинной) зонда по оси B
$.prb.C — текущее значение координаты (машинной) зонда по оси C
$.tc — текущий номер инструмента
$.tn — следующий номер инструмента
$.status — статус контроллера
$.params.maxTravelValueX — размер рабочего поля по оси X
$.params.maxTravelValueY — размер рабочего поля по оси Y
$.params.maxTravelValueZ — размер рабочего поля по оси Z
$.params.maxTravelValueA — размер рабочего поля по оси A
$.params.maxTravelValueB — размер рабочего поля по оси B
$.params.maxTravelValueC — размер рабочего поля по оси C
$.params.axisTravelResolutionX — разрешение оси X (шаг/мм)
$.params.axisTravelResolutionY — разрешение оси Y (шаг/мм)
$.params.axisTravelResolutionZ — разрешение оси Z (шаг/мм)
$.params.axisTravelResolutionA — разрешение оси A (шаг/мм)
$.params.axisTravelResolutionB — разрешение оси B (шаг/мм)
$.params.axisTravelResolutionC — разрешение оси C (шаг/мм)
$.params.axisMaxRateX — максимальная скорость перемещения по оси X (командой G0)
$.params.axisMaxRateY — максимальная скорость перемещения по оси Y (командой G0)
$.params.axisMaxRateZ — максимальная скорость перемещения по оси Z (командой G0)
$.params.axisMaxRateA — максимальная скорость перемещения по оси A (командой G0)
$.params.axisMaxRateB — максимальная скорость перемещения по оси B (командой G0)
$.params.axisMaxRateC — максимальная скорость перемещения по оси C (командой G0)
$.params.axisAccelerationX — ускорение по оси X
$.params.axisAccelerationY — ускорение по оси Y
$.params.axisAccelerationZ — ускорение по оси Z
$.params.axisAccelerationA — ускорение по оси A
$.params.axisAccelerationB — ускорение по оси B
$.params.axisAccelerationC — ускорение по оси C
$.gc.cs — текущая система координат
$.gc.f — текущая рабочая подача
$.gc.s — текущая скорость вращения шпинделя
Cтатус контроллера (переменная $.status)
1 — Готов
2 — Авария
3 — Работа
4 — Домой
5 — Пауза
7 — Проверка
9 — Дверь
10 — Ручное перемещение (jogging)
Пример ввода пользовательских данных
Встроенная функция $.input() из макроса вызывает окно ввода пользовательских данных:
{ var p = $.input("Введите параметры", ["1", "2", "3"], [100, 200, 300]) }
Текст выше создаёт окно с заголовком «Введите параметры», в котором предлагается ввести значения трёх переменных. Эти значения заносятся в массив p:
Доступ к каждому введенному значению осуществляется через соответствующую ячейку массива (индексация массива начинается с 0):
{ var fast_f = parseFloat(p[0]) }
Здесь введенное значение параметра «1» извлекается из нулевой ячейки массива и преобразуется в число с плавающей точкой, а далее записывается в переменную fast_f.
Вывод значений переменных
Для вывода какой-либо информации служит встроенная функция $.message(). Например:
{ $.message(["Введенные значения: ", "1: " + p[0], "2: " + p[1], "3: " + p[2]]) }
Этот пример выводит следующее окно:
Использование переменных в команде запуска G-кода
Часто возникает необходимость запустить G-код команду, в которой значение какой-либо координаты нужно вставить из определенной переменной. В этом случае переменную необходимо заключить в фигурные скобки как вставку JavaScript-кода, например:
G38.2X{-search_dist}F{slow_f}
В этом примере дистанция поиска для команды G38.2 подставляется из переменной search_dist с противоположным знаком, а скорость поиска — из переменной slow_f.
Внутри фигурных скобок можно также помещать сложные арифметические выражения, например:
G0G91Y{(q - ($.prb.y + offset)) / 2}
Макрос записи и чтения глобальной переменной из памяти визуализатора
В этом примере в функции f1 происходит инкрементирование (увеличение на 1) входной переменной x.
Сначала в переменную gv читается глобальная переменная var1. Если gv не определена (макрос вызывается впервые после запуска визуализатора), то переменной gv присваивается значение 50. Если переменная gv определена (макрос уже ранее вызывался), то для неё вызывается функция f1, увеличивающая её значение на 1. По завершении макроса в переменную var1 сохраняется новое значение gv. Таким образом, при каждом запуске этого макроса будем видеть на экране увеличивающееся на 1 число, начиная с 50.
{
function f1 (x) {
return x + 1;
}
var gv = $.readvar("var1")
if (gv) {
gv = f1(gv);
}
else {
gv = 50;
}
$.message(["gv = " + gv])
$.savevar("var1", gv)
}
Макрос процедуры Z-щуп
{
// !!! Настройте параметры ниже под свой станок !!!
// В данном макросе процедура Z-щуп выполняется в 2 этапа:
// сначала быстрый поиск, затем отскок на расстояние отката
// и второй этап поиска на малой калибровочной подаче.
// По завершении процедуру выполняется подъем на безопасную высоту
// Высота шайбы
var PROBE_HEIGHT = 20
// Скорость быстрого поиска шайбы (первый этап)
var SEARCH_RATE_PROBE = 150
// Калибровочная подача
var SLOW_RATE_PROBE = 10
// Расстояние отката перед калибровочным поиском шайбы
var OFFSET = 1
// Машинная кооордината Z точки возврата после выполнения процедуры
var RETURN_ZMPOS = 0
// Если шайба расположена в определенной позиции,
// установите переменную MOVE_TO_PROBE_POSITION в значение 1
// и пропишите координаты позиции шайбы.
// Если нужно выполнять процедуру z-щуп из текущей точки,
// оставьте MOVE_TO_PROBE_POSITION = 0
var MOVE_TO_PROBE_POSITION = 0
// Безопасная высота
var SAFE_Z_POS = 0
// Машинная координата X позиции шайбы
var PROBE_X_MPOS = 100
// Машинная координата Y позиции шайбы
var PROBE_Y_MPOS = 100
// Машинная координата Z позиции шайбы (стартовой точки процедуры)
var PROBE_Z_MPOS = 0
}
{
// Функция для поиска шайбы
function tool_measure() {
if (MOVE_TO_PROBE_POSITION) {
$.send("G90G0G53Z" + String(SAFE_Z_POS))
$.send("G0G53G90X" + String(PROBE_X_MPOS) + "Y" + String(PROBE_Y_MPOS))
$.send("G0G53G90Z" + String(PROBE_Z_MPOS))
}
$.send("G21G91G38.2Z-" + String($.params.maxTravelValueZ) + "F" + String(SEARCH_RATE_PROBE))
$.send("G0Z" + String(OFFSET))
$.send("G38.2Z-3F" + String(SLOW_RATE_PROBE))
$.send("G4P0.1")
}
}
{
// Выполняем поиск шайбы
tool_measure()
// Запоминаем машинную координаты поверхности шайбы
var edge_zmpos = $.prb.z
//Выполняем перемещение точно к поверхности шайбы
$.send("G53G0G90Z" + String(edge_zmpos))
// Делаем коротку паузу, чтобы фреза точно остановилась в нужной точке
$.send("G4P0.1")
// Устанавливаем на поверхности шайбы рабочую координату Z, равную высоте шайбы
$.send("G10L20P0Z" + String(PROBE_HEIGHT))
// Поднимаемся на заданную высоту по завершении процедуры)
$.send("G53G0Z" + String(RETURN_ZMPOS))
}
Макрос смены исполнителя по команде M6 Tx
В данном макросе выполняется поиск исполнителя с установленной галочкой Привязать номер инструмента, для которого сконфигурировано соответствие инструменту с номером Tx. Если такой исполнитель найден, то макрос переключает на него систему и применяет соответствующий ему профиль.
G4P0.1
{
while ($.status != 1) { $.wait() }
}
{
var cur_index = $.current_executor
var cur_exec_tool_number = $.executors[cur_index].gcode_tool_number
if (!$.executors[cur_index].bind_gcode_tool_number)
cur_exec_tool_number = 0
var exec_len = $.executors.length
var next_tool = $.tn
if (cur_exec_tool_number == next_tool) {
$.message(["Следующий номер инструмента совпадает с номером инструмента текущего исполнителя!"])
$.exit()
}
var next_executor_index = -1
for (var i = 0; i < exec_len; i++) {
if ($.executors[i].gcode_tool_number == next_tool && $.executors[i].bind_gcode_tool_number) {
next_executor_index = i;
}
}
if (next_executor_index >= 0) {
$.executors[next_executor_index].enable()
$.executors[next_executor_index].profile_enable()
}
else {
$.message(["Исполнитель, привязанный к номеру инструмента " + next_tool + ", не найден!"])
$.exit()
}
}