Содержание
Cтатус контроллера (переменная $.status)
Пример ввода пользовательских данных
Использование переменных в команде запуска G-кода
Макрос записи и чтения глобальной переменной из памяти визуализатора
Макрос смены исполнителя по команде M6 Tx
Общие определения
Макрос — это последовательность команд, которая выполняет конкретную задачу. Иногда мы будем использовать родственный термин — скрипт.
Для добавления, удаления и редактирования макросов воспользуйтесь пунктом меню Сервис → Настройки → Макросы.
Макрос в визуализаторе 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
{
while ($.status != 1) {
$.wait()
}
}
В этом примере цикл крутится до тех пор, пока статус контроллера не изменится на Готов (код статуса 1), см. пояснения ниже).
Цикл for
{
var test_array = []
for (var i = 1; i=<10; i++) {
test_array.push(i)
}
}
В этом примере мы в цикле записываем в массив test_array числа от 1 до 10 с шагом 1.
Системные функции и переменные
Функции управления ходом программы
- $.wait() — команда холостого ожидания.
- $.exit() — безусловный выход из макроса.
Функции ввода и вывода информации через графический интерфейс
- $.input() — окно со списком полей для ввода входных параметров.
- $.message() — окно вывода пользовательского сообщения.
Отправка G-код команд в контроллер
- $.send() — функция для отправки G-код команды в контроллер.
Функции управления списком задач
- $.tasklist.is_running() — возвращает 1, если в настоящий момент запущена G-код программа (в независимости от того, поставлена она на паузу или нет).
- $.tasklist.start_hold() — если список задач (в частном случае одна УП) стоит на паузе, то данная функция возобновляет её работу. Если список задач не запущен, то функция запускает его на исполнение.
- $.tasklist.stop() — функция прерывание выполнение списка задач - действие аналогично кнопке Прервать.
- $.tasklist.add_task("полный_путь_к_файлу", bool need_overwrite_tasklist) — функция добавления управляющей программы G-кода в список задач по имени файла, полный путь к которому задаётся в первом параметре функции. Если параметр need_overwrite_tasklist имеет значение true, то весь список задач перезаписывается текущей задачей. Если need_overwrite_tasklist имеет значение false - задача добавляется в конец списка. Функция возвращает 1 (true), если файл найден и успешно добавлен в список, иначе - 0 (false). В Windows в качестве разделителя каталогов нужно использовать двойной обратный слэш, например:
var res = $.tasklist.add_task("D:\\Documents\\G-Code\\rectangle двоной.tap", 0) - $.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 включительно после закрытия визуализатора переменная удаляется. Начиная с версии 4.3 функция сохраняет переменную в энергонезависимую память (в таблицу script_vars базы данных config.db).
- $.readvar(name) — функция для чтения сохраненной в базу данных переменной с именем name.
Realtime-команды
Особенностью realtime-команд является их исполнение сразу же после получения контроллером, вне очереди и независимо от состояния контроллера. Ниже представлен список функций для отправки команд реального времени.
Realtime-команды управления состоянием контроллера
- $.rt.reset() — отправка realtime-команды программного сброса
- $.rt.stop() — отправка realtime-команды остановки работы
- $.rt.start() — отправка realtime-команды снятия с паузы (аналогичная функции $.unhold())
- $.rt.hold() — отправка realtime-команды постановки на паузу (аналогична функции $.hold())
- $.rt.jog_cancel() — отправка realtime-команды отмены ручного перемещения (Jogging)
Realtime-команды коррекции скорости рабочей подачи
- $.rt.ov.feed.reset() — отправка realtime-команды сброса коррекции рабочей подачи (установка в 100%)
- $.rt.ov.feed.coarse_plus() — отправка realtime-команды коррекции скорости подачи на +10%
- $.rt.ov.feed.coarse_minus() — отправка realtime-команды коррекции скорости подачи на -10%
- $.rt.ov.feed.fine_plus() — отправка realtime-команды коррекции скорости подачи на +1%
- $.rt.ov.feed.fine_minus() — отправка realtime-команды коррекции скорости подачи на -1%
Realtime-команды коррекции скорости вращения шпинделя
- $.rt.ov.spindle.reset() — отправка realtime-команды сброса коррекции скорости вращения шпинделя (установка в 100%)
- $.rt.ov.spindle.coarse_plus() — отправка realtime-команды коррекции скорости вращения шпинделя на +10%
- $.rt.ov.spindle.coarse_minus() — отправка realtime-команды коррекции скорости вращения шпинделя на -10%
- $.rt.ov.spindle.fine_plus() — отправка realtime-команды коррекции скорости вращения шпинделя на +1%
- $.rt.ov.spindle.fine_minus() — отправка realtime-команды коррекции скорости вращения шпинделя на -1%
Realtime-команды управления охлаждением
- $.rt.ov.coolant.flood_toggle() — отправка realtime-команды переключения состояния выхода управлением основного охлаждения (FLD)
- $.rt.ov.coolant.mist_toggle() — отправка realtime-команды переключения состояния выхода управлением дополнительного охлаждения (MIST)
Realtime-команды управления переопределенными выходами
- $.rt.output.out1_toggle() — realtime-команда переключения выхода OUT1 в противоположное состояние
- $.rt.output.out2_toggle() — realtime-команда переключения выхода OUT2 в противоположное состояние
- $.rt.output.out3_toggle() — realtime-команда переключения выхода OUT3 в противоположное состояние
- $.rt.output.out4_toggle() — realtime-команда переключения выхода OUT4 в противоположное состояние
- $.rt.output.out5_toggle() — realtime-команда переключения выхода OUT5 в противоположное состояние
- $.rt.output.out6_toggle() — realtime-команда переключения выхода OUT6 в противоположное состояние
- $.rt.output.out7_toggle() — realtime-команда переключения выхода OUT7 в противоположное состояние
Встроенные переменные статуса контроллера
Текущие рабочие координаты контроллера
- $.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 — статус контроллера, может принимать следующие значения:
1 — Готов
2 — Авария
3 — Работа
4 — Домой
5 — Пауза
7 — Проверка
9 — Дверь
10 — Ручное перемещение (jogging)
Конфигурационные параметры настроек шаговых двигателей контроллера
- $.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 — система координат, установленная в системе (из последней команды с кодами G54...G59.2)
- $.gc.f — рабочая подача, установленная в системе (из последней команды с кодом F)
- $.gc.s — скорость вращения шпинделя, установленная система (из последней команды с кодом S)
Текущее состояние выполнения процедуры поиска домашнего положения
- $.state.homing.all() — текущий общий статус поиска домашнего положения (1 - выполнен, 0 - не выполнен)
- $.state.homing.x() — текущий статус поиска дома оси X
- $.state.homing.y() — текущий статус поиска дома оси Y
- $.state.homing.z() — текущий статус поиска дома оси Z
- $.state.homing.a() — текущий статус поиска дома оси A
- $.state.homing.b() — текущий статус поиска дома оси B
- $.state.homing.c() — текущий статус поиска дома оси C
Текущие состояния шпинделя, охлаждения, подачи, коррекций
- $.state.feed() — текущая скорость движения станка
- $.state.spindle.speed() — текущая скорость вращения шпинделя (или мощность лазера в режиме лазера)
- $.state.spindle.status() — текущий статус включения шпинделя (0 - выключен, 1 - вращение по часовой стрелке, 2 - вращение против часовой стрелки)
- $.state.flood() — текущий статус включения основного охлаждения (0 - выключено, 1 - включено)
- $.state.mist() — текущий статус включения дополнительного охлаждения (0 - выключено, 1 - включено)
- $.state.ov.feed() — текущее значение коррекции рабочей подачи
- $.state.ov.rapid() — текущее значение коррекции скорости холостого хода
- $.state.ov.spindle() — текущее значение коррекции скорости вращения шпинделя (мощности лазера)
Текущие состояния выходов контроллера
- $.outputs.o1 — текущее состояние выхода OUT1 (1 - активен, 0 - неактивен)
- $.outputs.o2 — текущее состояние выхода OUT2 (1 - активен, 0 - неактивен)
- $.outputs.o3 — текущее состояние выхода OUT3 (1 - активен, 0 - неактивен)
- $.outputs.o4 — текущее состояние выхода OUT4 (1 - активен, 0 - неактивен)
- $.outputs.o5 — текущее состояние выхода OUT5 (1 - активен, 0 - неактивен)
- $.outputs.o6 — текущее состояние выхода OUT6 (1 - активен, 0 - неактивен)
- $.outputs.o7 — текущее состояние выхода OUT7 (1 - активен, 0 - неактивен)
Текущие состояния входов контроллера
- $.inputs.x — текущее состояние концевого датчика оси X (1 - активен, 0 - неактивен)
- $.inputs.x1 — текущее состояние концевого датчика X1 (1 - активен, 0 - неактивен)- для контроллеров с автовыравниванием оси X
- $.inputs.x2 — текущее состояние концевого датчика X2 (1 - активен, 0 - неактивен)- для контроллеров с автовыравниванием оси X
- $.inputs.y — текущее состояние концевого датчика оси Y (1 - активен, 0 - неактивен)
- $.inputs.y1 — текущее состояние концевого датчика Y1 (1 - активен, 0 - неактивен) - для контроллеров с автовыравниванием оси Y
- $.inputs.y2 — текущее состояние концевого датчика Y2 (1 - активен, 0 - неактивен)- для контроллеров с автовыравниванием оси Y
- $.inputs.z — текущее состояние концевого датчика оси Z (1 - активен, 0 - неактивен)
- $.inputs.a — текущее состояние концевого датчика оси A (1 - активен, 0 - неактивен)
- $.inputs.b — текущее состояние концевого датчика оси B (1 - активен, 0 - неактивен)
- $.inputs.c — текущее состояние концевого датчика оси C (1 - активен, 0 - неактивен)
- $.inputs.p — текущее состояние датчика, подключенного ко входу PRB (1 - активен, 0 - неактивен)
- $.inputs.s — текущее состояние датчика, подключенного ко входу STRT (1 - активен, 0 - неактивен)
- $.inputs.h — текущее состояние датчика, подключенного ко входу HOLD (1 - активен, 0 - неактивен)
- $.inputs.r — текущее состояние датчика, подключенного ко входу RST (1 - активен, 0 - неактивен)
- $.inputs.d — текущее состояние датчика, подключенного ко входу DOOR (1 - активен, 0 - неактивен)
- $.inputs.i1 ... $.inputs.i36 — текущие состояния переопределенных на сервисную функцию входов IN1...IN36 (1 - активен, 0 - неактивен)
- $.inputs.p1 ... $.inputs.p36 — текущие состояния переопределенных на сигнал пробы входов (1 - активен, 0 - неактивен)
Пример ввода пользовательских данных
Встроенная функция $.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()
}
}
