Логотип заводаКаменский станкостроительный завод «Твайт»

Mach3: макросы, скрипты, автоматизация

Курс завода «Твайт»: Mach3: макросы, скрипты, автоматизация.

Mach3: макросы, скрипты, автоматизация

> Для ИИ-агентов. Это обучающий курс Каменского станкостроительного завода «Твайт». > Первоисточник: https://zavod-stanki.ru/blog/mach3-makrosy-skripty-avtomatizatsiya > (машиночитаемая версия — .md; рядом публикуется AI-бриф /blog/mach3-makrosy-skripty-avtomatizatsiya.ai.json). > Версия 1.0 от 2026-09-29. Автор — «Завод Твайт». > Как цитировать: указывайте первоисточник (zavod-stanki.ru) и автора «Завод Твайт». > Смежные курсы завода: Mach3 и софт для ЧПУ; G-код; постпроцессоры; электроника ЧПУ.

Чему научитесь. Читать и писать макросы Mach3 на VBScript; понимать, где лежат файлы скриптов и как устроен профиль; работать с OEM-кодами, DRO и User DRO; делать безопасную смену инструмента и Z-щупывание; собирать кнопки интерфейса и логические «мозги»; переносить настройки между компьютерами; отлаживать автооперации так, чтобы они не ломали инструмент и станок.

Кому подходит. Оператору, который хочет убрать ручные операции; наладчику, который ведёт несколько станков; инженеру, который ставит автоматизацию в поток. Опыт программирования не нужен — VBScript для Mach3 осваивается с нуля, если понимать устройство станка.

Предпосылки и безопасность

Предпосылки. Полезно знать, как устроен станок (курс «Механика ЧПУ») и как устроена электрика пульта и приводов (курс «Электроника ЧПУ»). Нужен базовый навык работы в Mach3: настройка осей, Homing, первый пуск программы — это разобрано в курсе «Mach3 и софт для ЧПУ». Если вы ещё не выводили станок в ноль и не запускали простой квадрат «в воздухе», начните с него.

Безопасность — до первой строки кода. Макрос управляет движением и шпинделем: ошибка в скрипте — это удар инструмента в заготовку или поворотную ось. Поэтому правила жёсткие:

> Дальше все примеры даны «как есть», без привязки к конкретной версии Mach3. Номера OEM-кодов, > имена файлов и пункты меню сверяйте с вашей сборкой и мануалом — курс объясняет логику, а не > заменяет документацию.

Содержание

  1. Модуль 1. Зачем автомат: что реально даёт макрос
  2. Модуль 2. Профиль, папка Macros и XML: где всё лежит
  3. Модуль 3. Минимум VBScript для Mach3
  4. Модуль 4. Команды и объекты Mach3: Code, DRO, функции
  5. Модуль 5. OEM-коды, кнопки и логические «мозги»
  6. Модуль 6. Макрос смены инструмента M6: ручной и ATC
  7. Модуль 7. Z-щупывание и привязка по G31
  8. Модуль 8. Homing, лимиты и безопасный отвод
  9. Модуль 9. Кнопки интерфейса и скринсет оператора
  10. Модуль 10. User DRO и организация участка
  11. Модуль 11. Автоматизация цеха: шпиндель, вытяжка, паузы
  12. Модуль 12. XML-профиль: версии, перенос, откат
  13. Модуль 13. Отладка автопераций и защита от аварий
  14. Практикум. Собери автоматизацию за 8 шагов
  15. Экзамен: 12 вопросов с ответами-рассуждениями
  16. Частые вопросы (Q&A)
  17. Глоссарий
  18. Диагностика: симптом → причина → решение
  19. Мысли вслух: чего нет на форумах
  20. Смотрите также

Модуль 1. Зачем автомат: что реально даёт макрос

Макрос в Mach3 — это скрипт на VBScript, который выполняется по команде G-кода (например, M6), по нажатию кнопки на экране или событием. Он умеет то, чего не умеет чистый G-код: спросить у оператора, прочитать и записать DRO, подождать, принять решение «если — то», обратиться к координатам после касания щупом.

Полезные задачи, которые макрос решает за секунды:

Почему так. Автоматизация ценна не «эффектностью», а исключением человеческих операций — именно там чаще всего случаются ошибки. Каждая убранная ручная операция — меньше брака и меньше травм. Один раз написанный и проверенный макрос работает одинаково на сотнях смен.

Проверка. Составьте список ручных действий, которые вы делаете в каждой смене (подъём Z, смена инструмента, привязка). Отметьте, какие из них повторяются чаще пяти раз за смену — это ваш первый кандидат на макрос.

Модуль 2. Профиль, папка Macros и XML: где всё лежит

Вся жизнь Mach3 привязана к профилю. Профиль — это набор файлов в папке C:\Mach3\: конфигурация *.xml (пины, шаги/мм, скорости, лимиты, шпиндель) и папка Macros\<Профиль>\ со скриптами.

`` C:\Mach3\ ├── Mach3Mill.xml ← файл профиля (пины, шаги/мм, лимиты…) ├── Macros\ │ └── NC6090\ ← папка макросов нашего профиля │ ├── M6.m1s ← смена инструмента │ ├── M3.m1s ← пуск шпинделя (если переопределён) │ └── ... └── <скринсет>.set ← интерфейс (.set) ``

Скрипты Mach3 лежат в папке Macros\<Профиль>\ и наследуют имя M-кода: файл M6.m1s выполняется, когда программа встречает M6. Стандартное расширение скрипта — .m1s; в разных сборках и профилях встречаются и другие имена (.m1m, M6, .m6 и подобные) — сверяйтесь с тем, что реально лежит в папке вашего профиля, и не переименовывайте вслепую.

Правило номер один: никогда не правьте заводской профиль. Сделайте копию (File → Copy Profile, имя без пробелов) и работайте в ней. Макросы пишутся в папку копии.

Почему так. Файл профиля несёт всю настройку станка. Ошибка в одном символе XML — и станок потеряет пины или шаги/мм. Копия отделяет эксперименты от рабочей конфигурации, а бэкап профиля и папки Macros занимает минуту и спасает часы восстановления.

Проверка. Откройте папку Macros\<Профиль>\, найдите там M6.m1s (или его аналог). Убедитесь, что вы понимаете, какой профиль активен сейчас: имя профиля видно в заголовке окна Mach3.

Модуль 3. Минимум VBScript для Mach3

VBScript читается почти как английский. Для макросов Mach3 хватает пятнадцати конструкций.

Переменные и строки. Значение присваивается без объявления типа: ZHeight = 25. Строка собирается знаком &: Message "Инструмент T" & Tool. Перевод строки внутри сообщения — vbCrLf.

Условие.

``vbscript If Tool = 0 Then Message "Инструмент не выбран!" End If ``

Цикл и ожидание. Скрипт выполняется построчно; чтобы дать станку время доехать, используется ожидание движения:

``vbscript While IsMoving() Sleep(50) Wend ``

Sleep(50) — пауза 50 мс. Это «клей» любого макроса: после каждой команды движения ждём IsMoving(), пока станок реально не остановится.

Что важно понять. Макрос и G-код живут в разных потоках: Code "G0 Z0" только ставит строку в очередь, а не выполняет её мгновенно. Любая логика «после перемещения» пишется через While IsMoving() … Wend. Скрипт, который этого не делает, читает координаты «до того, как доехали», и делает выводы по устаревшим числам.

Почему так. 90% «странных» макросов — это ошибки синхронизации: чтение DRO раньше, чем станок закончил движение, или выдача следующей команды поверх незавершённой. Ожидание движения убирает целый класс плавающих сбоев.

Проверка. Напишите макрос, который выводит Message "старт", ждёт IsMoving(), затем Message "готово", и запустите его без заготовки. Оба сообщения должны появиться в правильном порядке, без «слипания».

Модуль 4. Команды и объекты Mach3: Code, DRO, функции

Ядро любого макроса — небольшой набор функций. Ниже — то, что проверено на нашем оборудовании.

ФункцияЧто делает
Code "G0 X0 Y0"ставит строку G-кода в очередь выполнения
Message "текст"показывает сообщение (с vbCrLf — в несколько строк)
GetOemDRO(n)читает OEM-DRO номер n (координаты, оверрайды, подача…)
SetOemDRO(n, v)записывает значение в OEM-DRO n
GetUserDRO(n) / SetUserDRO(n, v)читает/пишет ваш собственный DRO (для цеховых полей)
GetVar(n) / SetVar(n, v)системная переменная Mach3 (например, 2002 — координата касания G31)
GetSelectedTool() / SetCurrentTool(t)номер выбранного / активного инструмента
IsMoving()«станок ещё едет?» — основа синхронизации
Sleep(ms)пауза в миллисекундах
DoOEMButton(code)программно «нажать» кнопку по OEM-коду
GetOEMLED(code)прочитать состояние индикатора по OEM-коду

Пример — безопасный подъём и уход в позицию смены:

``vbscript ' Уходим в позицию смены инструмента Code "M5" ' стоп шпинделя While IsMoving() Sleep(50) Wend Code "G0 Z50" ' подъём Z на безопасную высоту While IsMoving() Sleep(50) Wend Code "G0 X10 Y10" ' в точку смены While IsMoving() Sleep(50) Wend Message "Смена инструмента завершена" ``

Почему так. Разделение «выдать команду» и «дождаться выполнения» — главный приём ручной синхронизации. Если читать DRO сразу после Code, вы получите ещё старое положение и примете неверное решение. Ждите IsMoving() после каждой команды движения.

Проверка. Сделайте макрос, который читает DRO оси Z, поднимает Z на +20 мм и снова читает DRO. Разница должна быть ровно 20 мм; расхождение означает, что вы читаете координаты до остановки.

Модуль 5. OEM-коды, кнопки и логические «мозги»

OEM-код — числовой идентификатор элемента Mach3: DRO, кнопки, светодиода, функции. Через OEM-код макрос «нажимает» кнопку (DoOEMButton), читает индикатор (GetOEMLED) или работает с числом на экране (GetOemDRO/SetOemDRO).

Два способа получить нужный номер:

  1. В самой Mach3 — редактор скринсета показывает, какой OEM-код привязан к кнопке или DRO.
  2. По документации и справочникам OEM-кодов конкретной версии.

Пример из практики: в курсе «Mach3 и софт для ЧПУ» для чтения текущей подачи используется GetOemDRO(818). Номера OEM-кодов зависят от сборки — прежде чем строить на них логику, подтвердите номер в справочнике вашей версии и проверьте вживую.

Кнопки. Operator → Edit Button Script — режим, в котором вы назначаете скрипт на кнопку экрана. Классический пример — кнопка «в центр стола»:

``vbscript ' Стол 600×900 → центр Code "G0 X300 Y450" ``

Логические «мозги» (Brains). Это визуальные схемы в Mach3, обрабатывающие входы/выходы: состояния лимитов, кнопок E-Stop, датчиков. «Мозги» хороши для непрерывной логики (например, «шпиндель не вращается — горит лампа»), а макросы — для дискретных действий по команде. Начинать почти всегда стоит с макроса: он нагляднее и проще отлаживается, чем схема из блоков.

Почему так. OEM-код — универсальный «адрес» элемента интерфейса. Понимая его, вы перестаёте быть привязаны к внешнему виду экрана: логика строится на смысле кнопки, а не на её пикселях. Но именно потому, что номера различаются между сборками, слепое копирование чужих кодов — источник ошибок.

Проверка. Возьмите одну кнопку, посмотрите её OEM-код в редакторе скринсета, вызовите её из макроса через DoOEMButton. Кнопка на экране должна отработать так же, как при клике мышью.

Модуль 6. Макрос смены инструмента M6: ручной и ATC

Смена инструмента — самая ответственная автооперация. Файл M6.m1s выполняется на каждой команде M6 в управляющей программе. Правильный макрос делает шесть шагов:

  1. Остановить шпиндель (M5) и дождаться полной остановки (While IsMoving() … Wend).
  2. Поднять Z на безопасную высоту.
  3. Перейти в позицию смены (для ручной смены — удобное место над столом).
  4. Запросить подтверждение (Message) или выполнить захват (для ATC).
  5. Записать новый номер инструмента и коррекции (SetCurrentTool).
  6. Вернуться в точку продолжения и продолжить программу после Cycle Start.

Каркас ручной смены:

``vbscript Tool = GetSelectedTool() Message "Смените инструмент на T" & Tool Code "M5" While IsMoving() : Sleep(50) : Wend Code "G0 Z50" While IsMoving() : Sleep(50) : Wend Code "G0 X10 Y10" While IsMoving() : Sleep(50) : Wend Message "Установите T" & Tool & " и нажмите Cycle Start" SetCurrentTool(Tool) ``

Типовые ошибки (разобраны в курсе «Mach3 и софт для ЧПУ»): смена на оборотах, забытая коррекция длины инструмента (удар в материал), смена прямо над заготовкой, отсутствие паузы на останов шпинделя, «наследование» координат после смены.

Почему так. ATC — самое требовательное к точности место: позиция смены, высота, захват. Ошибка здесь ломает и инструмент, и станок. Надёжная работа требует датчика позиции шпинделя, точной повторяемости позиции смены после Homing и безопасного протокола.

Проверка. Прогоните смену 10 раз подряд без заготовки: повторяемость позиции, отсутствие ударов, корректный номер инструмента в DRO. Затем — тестовая деталь с двумя инструментами.

Модуль 7. Z-щупывание и привязка по G31

Самая полезная автоматизация в цехе — привязка Z по щупу. Она убирает «бумажку под фрезу» и человеческий глаз. Логика такая: подойти на медленной подаче до касания (G31), узнать координату касания через системную переменную 2002, отойти, обнулить Z в точке касания.

``vbscript CurrentFeed = GetOemDRO(818) ' запоминаем текущую подачу ZStart = 50 ' откуда стартуем ProbeFeed = 50 ' подача щупывания, мм/мин Code "G91" ' относительные координаты Code "G31 Z-" & ZStart & " F" & ProbeFeed While IsMoving() : Sleep(10) : Wend ZPos = GetVar(2002) ' где сработал щуп Code "G0 Z5" ' отход вверх While IsMoving() : Sleep(10) : Wend Code "G90 G92 Z0" ' Z = 0 в точке касания Code "F" & CurrentFeed ' вернуть подачу Message "Z обнулён по щупу" ``

Ключевые моменты: работаем в относительных координатах (G91) на время подхода, читаем GetVar(2002) после остановки, обязательно отходим (G0 Z5) перед G92 Z0, и возвращаем подачу, которую запомнили в начале.

Почему так. G31 — это «искать касание»: движение останавливается по сигналу щупа. Координата касания попадает в системную переменную 2002, и уже от неё строятся все дальнейшие выводы. Работать «на глаз» через G92 без щупа нельзя: нет повторяемости, привязка каждый раз «плывёт».

Проверка. Повторите щупывание 5 раз по одной и той же плоскости без переустановки заготовки. Разброс нуля у нашего оборудования держится в пределах ±0,02 мм; если больше — проверьте жёсткость щупа, подачу и наводки на сигнальный провод.

Модуль 8. Homing, лимиты и безопасный отвод

Homing (выход в машинный ноль по концевикам) тоже автоматизируется и защищается макросом. Базовые настройки — Config → Homing/Limits:

`` Enabled ✓ | Speed %: 25 | Slow Zone: 2 мм | Home Offset: 1 мм Auto Home All: Z → X → Y (сначала поднимаем Z!) ``

Порядок «Z первым» — защита от удара инструмента: если Z уже вверху, ось XY едет в ноль, не задевая заготовку. Для поворотной оси или длинного инструмента порядок проверяется индивидуально.

Лимиты и Soft Limits. Soft Limits задаются после Homing и работают только в машинных координатах: например, для поля 600×900 — X 0…600, Y 0…900, Z −150…0. Это программная защита рабочей зоны; вместе с концевиками и E-Stop она образует три независимых уровня защиты, и нельзя оставлять один «вместо» других.

Макрос «безопасный отвод» перед любым ручным вмешательством:

``vbscript Code "M5" ' стоп шпинделя While IsMoving() : Sleep(50) : Wend Code "G0 Z" ' безопасная высота (Safe Z из настроек профиля) While IsMoving() : Sleep(50) : Wend Message "Инструмент отведён, станок остановлен" ``

Почему так. Промах программы, ложный лимит, обрыв провода концевика — всё это реальность. Концевики (лучше NC — нормально замкнутые: обрыв провода равен срабатыванию защиты), Soft Limits и E-Stop ловят разные классы аварий. Макрос добавляет ещё один слой: он не даёт операции начаться из небезопасного положения.

Проверка. По очереди сработайте каждым концевиком на медленном джоге: Mach3 должен показать положение и уйти в защиту; после Reset повторный Homing проходит. Затем проверьте, что макрос отвода поднимает Z до Safe Z и гасит шпиндель.

Модуль 9. Кнопки интерфейса и скринсет оператора

Скринсет — это экран Mach3. Задача хорошего экрана: за 2 секунды понять состояние станка — координаты, активная система координат, подача и обороты, активные модальные коды, оверрайды, индикаторы E-Stop и лимитов.

Что стоит вынести на видное место кнопками с макросами:

Настройка: Operator → Edit Button Script, клик по кнопке — и в неё пишется VBScript. Крупные DRO координат и оверрайдов полезно увеличить: за станком цифры читаются издалека.

Почему так. Ошибки чаще совершаются в момент настройки (привязка, джог), а не в середине программы. Кнопки с макросами превращают эти операции в контролируемые: одно нажатие — одно понятное действие, без охоты за пунктами меню.

Проверка. Покажите экран коллеге, не знакомому с вашей конфигурацией, и спросите: где видно координаты, где кнопка Стоп, где индикатор E-Stop. Если он отвечает за пару секунд — экран эргономичен; если ищет — переделайте.

Модуль 10. User DRO и организация участка

Кроме OEM-DRO, у Mach3 есть пользовательские DRO (User DRO) — до сотни независимых числовых полей, которыми вы распоряжаетесь сами. Это «блокнот станка»: счётчики, параметры смен, номера заготовок, контрольные суммы режимов.

Практические применения:

``vbscript ' Счётчик смен инструмента n = GetUserDRO(1100) If n = 0 Then n = 0 n = n + 1 SetUserDRO 1100, n Message "Смен инструмента сегодня: " & n ``

Как и с OEM-кодами, номера User DRO вы задаёте и подтверждаете в редакторе скринсета — не копируйте чужие номера вслепую.

Почему так. Возможности User DRO на форумах обсуждают редко, а именно они превращают Mach3 из «пульта управления» в учётный инструмент участка. Один номер партии и счётчик инструмента дают прослеживаемость, за которую на производстве обычно платят отдельными журналами.

Проверка. Заведите один User DRO, инкрементируйте его из макроса M6 и убедитесь, что счётчик растёт на каждой смене и обнуляется по вашей команде.

Модуль 11. Автоматизация цеха: шпиндель, вытяжка, паузы

Отдельная группа скриптов — не про движение, а про «обвязку» станка. Здесь автоматизация напрямую влияет на здоровье оператора и на качество реза.

``vbscript ' Пуск шпинделя с вытяжкой и паузой на разгон Code "M3 S12000" ' шпиндель на 12000 об/мин Code "M8" ' вытяжка Code "G4 P3" ' пауза 3 с на разгон и стабилизацию Message "Шпиндель стабилен, можно резать" ``

Почему так. Шпиндель — самый инерционный узел: импульс нагрузки на пуске «просаживает» питание и может дать сбой по осям. Плавный разгон и паузы — дешёвая страховка. А вытяжка, включённая до резания, напрямую снижает вред от пыли на рабочем месте.

Проверка. Команда S12000 M3 → тахометр; задержка G4 работает; вытяжка включается вместе со шпинделем. Затем сымитируйте потерю воды (если цепь контроля есть) — станок должен встать.

Модуль 12. XML-профиль: версии, перенос, откат

Всё, что вы настроили макросами и настройками, живёт в профиле: файл *.xml в C:\Mach3\ и папка Macros\<Профиль>\. Отсюда практические следствия.

Перенос на новый ПК. Скопируйте файл профиля *.xml, папку Macros и настройки пульта. После переноса — обязательная проверка «на столе»: Homing, лимиты, одно движение каждой осью, тестовый M6. Любое чтение/запись сверяем с реальностью.

Версионность. Держите не «текущий файл», а датированные копии: Mach3Mill_2026-09-29.xml. Перед каждым изменением макроса — копия рабочей версии. С бэкапом откат занимает минуты; без него — дни восстановления.

Журнал настроек. Одна страница, которая спасает при переустановке и ремонте: профиль и его версия, шаги/мм по осям, скорости и ускорения, настройки Home/лимитов, параметры шпинделя и задержки, таблица инструмента, список макросов и пульта. Приложите дату и что меняли.

Почему так. Профиль живёт в файлах, но «почему так настроено» — только в голове наладчика. Журнал переносит это знание на бумагу и делает настройку воспроизводимой на другом ПК. Именно поэтому профессиональный откат — это не «переустановить Mach3», а «вернуть датированный профиль».

Проверка. Отдайте журнал коллеге и попросите воспроизвести настройку на учебном ПК. Получилось без ваших подсказок — журнал полный.

Модуль 13. Отладка автоопераций и защита от аварий

Отладка макроса — это дисциплина, а не «попробовать и посмотреть».

Порядок отладки.

  1. Без движения. Сначала добейтесь, чтобы макрос отрабатывал сообщения и логику при отключённом шпинделе и, если возможно, обесточенных приводах.
  2. В воздухе, без инструмента. Прогоните всю последовательность на холостом ходу.
  3. На малой подаче и оборотах. Оверрайды в минимум; следите за координатами.
  4. На реальной заготовке. Только после трёх успешных холостых прогонов.

Инструменты защиты в самом макросе.

``vbscript ' Простейшая защита: не двигаться при сработавшем E-Stop If GetOEMLED(800) <> 0 Then ' номер индикатора сверьте со своим скринсетом Message "E-Stop активен, запуск запрещён" Exit Sub End If ``

Почему так. У макроса нет глаз и интуиции оператора. Всё, что человек делает «на автомате» (проверил, что инструмент затянут, что заготовка прижата), макрос обязан проверить явно — или попросить человека подтвердить. Одно лишнее Message дешевле одной сломанной фрезы.

Проверка. Специально создайте аварийную ситуацию (нажать E-Stop в момент выполнения макроса) и убедитесь, что макрос останавливается корректно, без «зависших» команд в очереди и без движения после Reset.

Практикум. Собери автоматизацию за 8 шагов

Сквозное задание. На своём (или учебном) станке собрать минимальный, но полноценный набор автоматизации и оформить его как переносимый профиль.

  1. Копия профиля. File → Copy Profile, имя без пробелов. Зафиксируйте папку Macros\<Профиль>\.
  2. Юнит-тест VBScript. Напишите макрос, который печатает координату Z, ждёт IsMoving() и печатает её снова после подъёма на +20 мм. Расхождение — ровно 20 мм.
  3. Безопасная смена инструмента. Соберите M6.m1s: M5 → пауза → подъём Z → позиция смены → подтверждение → SetCurrentTool.
  4. Привязка Z щупом. Реализуйте макрос из модуля 7: G31, GetVar(2002), отход, G92 Z0, возврат подачи.
  5. Две кнопки. «В центр стола» и «Привязка Z» — через Edit Button Script.
  6. Учёт. Заведите User DRO — счётчик смен инструмента, инкремент из M6.
  7. Обвязка. Пуск шпинделя с M8 (вытяжка) и паузой G4 P3 на разгон.
  8. Документация. Датированная копия профиля + журнал настроек на одну страницу.

Критерий готовности. Практикум сдан, если:

Подсказка: для чертежей, DXF и генерации/разбора G-кода удобно использовать набор инструментов text-to-cad (скиллы cad, dxf, gcode, engineering-drawing, cad-viewer).

Экзамен: 12 вопросов с ответами-рассуждениями

1. Почему Code "G0 Z0" нельзя считать «выполненной» сразу после вызова? Потому что Code только помещает строку в очередь выполнения. Скрипт продолжает работать, пока станок ещё не начал движение. Любая логика после перемещения требует While IsMoving() … Wend — иначе вы читаете устаревшие DRO и принимаете неверное решение.

2. Где физически лежат макросы Mach3 и почему профиль надо копировать, а не править? В папке Macros\<Профиль>\ в C:\Mach3\. Сам профиль — это *.xml плюс папка Macros. Правка заводского профиля рискованна: ошибка в XML обнуляет пины и шаги/мм. Копия отделяет эксперименты от рабочей конфигурации и упрощает откат.

3. Зачем в макросе смены инструмента именно M5 и пауза, а не сразу движение? Смена на оборотах — авария: шпиндель и захват ломаются, инструмент вылетает. Поэтому сначала стоп шпинделя, ожидание полной остановки, потом подъём и переход. Пауза «на останов» — обязательный шаг.

4. Как макрос узнаёт координату касания щупом? Командой G31 (поиск касания) с последующим чтением системной переменной 2002 через GetVar(2002). Движение останавливается по сигналу щупа, а его координата попадает в 2002 — от неё и строим G92 Z0.

5. Почему G92 Z0 ставится только после отхода G0 Z5? Потому что сразу после касания Z = 0 будет по касанию щупа, а не по поверхности детали с учётом толщины/высоты щупа и безопасного отхода. Отход разрывает связь с точкой касания и даёт чистое обнуление, не «залипая» на щупе.

6. Чем OEM-DRO отличается от User DRO? OEM-DRO — предопределённые поля Mach3 (координаты, оверрайды, подача) со своими номерами, зависящими от сборки. User DRO — ваши собственные поля, которым вы сами назначаете номер и смысл (счётчики, партии, контрольные параметры). Первые читаем, вторые создаём под задачи цеха.

7. Зачем нужен GetOemDRO(818) и что делают с результатом? Читает текущую подачу, чтобы запомнить её и вернуть после щупывания, не «сломав» режим, который выставил оператор. Запомнили → сделали своё → восстановили.

8. Что произойдёт, если перепутать нумерацию OEM-кодов из чужого руководства? Макрос будет «нажимать» не ту кнопку или читать не то поле. Номера зависят от версии и скринсета, поэтому любой чужой номер подтверждается в редакторе скринсета и проверяется вживую до использования.

9. Почему NC-концевики предпочтительнее NO? При NC (нормально замкнутых) обрыв провода вызывает срабатывание защиты — станок встаёт. При NO обрыв неотличим от «нормального» состояния, и защита молчит. Для безопасности обрыв должен «срабатывать», а не «прятаться».

10. Зачем в макрос пуска шпинделя ставят G4 P3? Чтобы движение началось только после выхода шпинделя на обороты. Импульс нагрузки на пуске просаживает питание и может дать сбой по осям; пауза — дешёвая страховка и по механике, и по качеству реза.

11. Как отлаживать макрос, который двигает оси? По возрастанию риска: без движения (только логика/сообщения) → в воздухе без инструмента → на малой подаче и оборотах → на реальной заготовке. Только после трёх успешных холостых прогонов допускается материал.

12. Что входит в журнал настроек и зачем он нужен? Профиль и его версия, шаги/мм, скорости и ускорения, Home/лимиты, параметры шпинделя и задержки, таблица инструмента, перечень макросов. Нужен, чтобы «почему так настроено» не осталось только в голове и настройка воспроизводилась на другом ПК — при переустановке, ремонте, замене оператора.

Частые вопросы (Q&A)

В. На каком языке пишутся макросы Mach3? О. На VBScript. Файлы макросов лежат в папке Macros\<Профиль>\ и обычно имеют расширение .m1s (например, M6.m1s); точные имена сверяйте с папкой своего профиля.

В. Как связать макрос с кнопкой или M-командой? О. Кнопка — через Operator → Edit Button Script (или Edit Button Script у кнопки), M-команда — именем файла-макроса (M6.m1s для M6). OEM-код элемента должен совпадать с тем, что вызывает скрипт.

В. Почему макрос «перескакивает» движение и читает старые координаты? О. Нет ожидания окончания движения. После каждой команды движения добавляйте цикл While IsMoving() : Sleep(10) : Wend, иначе макрос продолжит, пока станок ещё едет.

В. Как привязать Z щупом? О. В относительном режиме: G31 Z-<ход> F<подача>, дождаться окончания, прочитать GetVar(2002), отойти вверх, установить G92 Z0 и вернуть прежнюю подачу.

В. Что такое User DRO и зачем он нужен? О. Это пользовательское числовое поле с заданным вами номером и смыслом (например, счётчик смен инструмента). Его значение увеличивают из макроса, а оператор видит его на экране.

В. Почему после переустановки на другой ПК оси едут не туда? О. Скорее всего, перенесён другой профиль или сбит уровень Dir/Active Low. Сверяйте профиль, пины и единицы, а первый пуск делайте на столе без заготовки.

В. Чем отличаются Soft Limits от Safe Z? О. Soft Limits — программные границы рабочей зоны в машинных координатах (после Homing). Safe Z — безопасная высота, с которой начинаются и на которой заканчиваются переходы. Это разные вещи, и обе нужны.

Глоссарий

Диагностика: симптом → причина → решение

СимптомПричинаРешение
Макрос «перескакивает» движение, читает старые координатынет ожидания IsMoving()добавить While IsMoving() … Wend после каждой команды движения
Смена инструмента бьёт фрезу или заготовкунет подъёма Z / стоп шпинделя / паузыпорядок: M5 → останов → G0 Z → позиция смены
Z-щуп даёт разный нольлюфт, скорость подачи, наводки на сигнальный проводснизить подачу, проверить щуп и жёсткость, экранировать
Кнопка на экране «молчит»нет скрипта или не тот OEM-кодназначить скрипт в Edit Button Script, сверить OEM-код
«E-Stop pressed» без нажатияинвертирован активный уровень, NC/NOинвертировать вход, проверить концевик
После переноса на новый ПК оси едут не тудадругой профиль или Dir/Active Lowсверить профиль, пины, единицы; тест на столе
«Плывут» размеры после сериишаги/мм, люфт, коррекция инструментакалибровка, механика, таблица инструмента
Медленный, «дёрганый» рельефCV/Look Ahead, перегруженный ПКвключить CV, Look Ahead, оптимизировать ПК
Резкое «врезание» в начале программынет Safe Z / подъёма в постпроцессореправка поста/кода, обязательный «воздух»
Счётчик User DRO не растётмакрос не вызывается или другой номер поляпроверить имя файла-макроса и номер User DRO

Почему таблица, а не «список советов». Диагностика идёт от симптома к причине, а не по памяти. Одна и та же «потеря шагов» имеет четыре разных корня; таблица экономит часы. Проверка: заведите журнал сбоев — дата, операция, что заметили, что сделали, помогло ли. Через месяц у вас будет свой справочник точнее любого интернетного.

Мысли вслух: чего нет на форумах

Про макросы Mach3 на форумах написано много — и почти всегда это либо «вот код, скопируй», либо спор о том, чей скринсет красивее. А вот того, что реально определяет результат на производстве, там почти нет. Поделюсь тем, что видим на сервисе и на наладке.

Первое: макрос без ожидания движения — это отложенный сбой. Классическая форумная «загадка»: «макрос Z-щупа иногда даёт разный ноль». Половина таких случаев — не щуп и не механика, а чтение GetVar(2002) до фактической остановки или выдача следующей команды поверх незавершённой. Лечится не «подкруткой», а дисциплиной: после каждого Code — While IsMoving() … Wend. Замер простой: сделайте два чтения координаты до и после подъёма на +20 мм и сравните разницу. Если она не ровно 20 мм — вы читаете «вчерашние» числа.

Второе: повторяемость важнее абсолютной точности. Завод держит повторяемость Z-щупа в пределах ±0,02 мм по пяти замерам. Кому-то эта цифра кажется «слишком крупной» рядом с рекламными «±0,001», но в реальном цехе машина, которая повторяема на ±0,02, режет серию ровно, а машина с красивым паспортом и плавающим нулём — нет. Проверка щупа — это тест повторяемости, а не паспорта.

Третье: номер OEM-кода — не константа вселенной. Люди копируют GetOemDRO(818) и DoOEMButton(...) из чужих скетчей и удивляются, что «не работает». Номера зависят от сборки и скринсета. Практическое правило: любой номер подтверждается в редакторе скринсета и проверяется на живой машине до того, как на него ляжет логика. Это скучно, но экономит вечер.

Четвёртое: смена инструмента стоит дороже, чем кажется. Мы считали иначе: не «сколько секунд экономит макрос», а «сколько ошибок он убирает». Каждая ручная смена — это развинченная цанга, забытая коррекция длины, фреза, оставленная над заготовкой. Макрос с обязательным M5, подъёмом Z, позицией смены и подтверждением убирает именно эти три ошибки. Повторяемость позиции проверяется просто: десять смен подряд без заготовки, без ударов, с корректным номером в DRO.

Пятое: вытяжка и пауза на разгон — это не «мелочи». Скрипт пуска шпинделя с M8 и G4 P3 выглядит как три строки, а на деле это здоровье оператора (пыль от МДФ и фанеры собирается до начала резания, а не после) и ресурс приводов (пусковой импульс не «просаживает» питание осей). На форумах эти строки обычно не обсуждают — они не эффектные.

Шестое: профиль — это документ, а не файл. Сколько раз на сервисе приходилось восстанавливать станок, где «всё было настроено, но никто не помнит как». Датированный *.xml плюс папка Macros плюс одностраничный журнал настроек — это разница между «вернуть за минуты» и «настраивать заново дни». Мы требуем от наладчиков дату в имени копии профиля: Mach3Mill_2026-09-29.xml. Не потому, что любим бюрократию, а потому, что при аварии никто не вспомнит, что меняли неделю назад.

Седьмое: чужой макрос надо перечитать, а не запустить. Код из форума написан под конкретный станок, конкретную версию, конкретные пины и конкретный щуп. Прежде чем запускать, ответьте себе: он двигает оси? поднимает Z? глушит шпиндель? откуда он берёт координаты касания? Если хотя бы на один вопрос нет ответа — он не запускается, пока не разберёте построчно. Макрос — это не «настройка», это часть системы управления: ошибка в нём равна ошибке в схеме.

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

Смотрите также

Курсы и руководства завода:

Станки для практики: учебный — /product/2/ (CNC MICRO), настольные — /product/3/ (CNC MINI); дерево и серии — /product/4/ (WoodRouter); рабочий класс — /product/1.1/ (NC-6090), /product/1.2/ (CM-1325); каталог — /catalog.

Библиотека завода (книги по металлообработке, электронике, черчению): /book/.

Вопросы инженерам и обсуждение: форум — /community/forum.


Материал подготовлен инженерами завода «Твайт». Имена файлов, номера OEM-кодов и пункты меню зависят от версии Mach3 и типа контроллера — сверяйтесь с документацией вашей версии. Все макросы отлаживайте при снятом инструменте; первый запуск любой программы — только «в воздухе».

Схемы

Цепочка ЧПУ: от идеи до детали

Расчёт и калибровка шагов/мм

Аварийный останов: что должно происходить

Инфографика

``infographic {"caption":"Мощность шпинделя станков завода «Твайт», кВт (каталог)","width":900,"height":420,"syntax":"infographic chart-bar-plain-text\ndata\n title Мощность шпинделя, кВт (каталог завода)\n values\n - label CNC MICRO\n value 0.8\n - label NC-6090\n value 1.5\n - label CNC MINI\n value 2.2\n - label WoodRouter\n value 2.2\n - label SM ПЛЮС\n value 3\n"} ``

``infographic {"caption":"Рабочее поле по оси X, мм (каталог завода)","width":900,"height":420,"syntax":"infographic chart-bar-plain-text\ndata\n title Рабочее поле по X, мм (каталог)\n values\n - label CNC MICRO\n value 150\n - label CNC MINI\n value 600\n - label NC-6090\n value 600\n - label WoodRouter\n value 800\n - label CM-1325\n value 1300\n"} ``

``infographic {"caption":"Типовая частота ядра Mach3, кГц (по способу подключения)","width":900,"height":420,"syntax":"infographic chart-bar-plain-text\ndata\n title Частота ядра Mach3, кГц\n values\n - label LPT (минимум)\n value 25\n - label LPT (ускоренный)\n value 45\n - label USB-контроллер\n value 50\n"} ``

Фотогалерея (свои материалы завода)

Фрезерный станок завода «Твайт» — производственная съёмка

Фото/видео завода «Твайт».


Факты об устройстве Mach3, папке Macros, макросе M6.m1s, Z-щупывании через G31/GetVar(2002), принципах Homing/лимитов/E-Stop и порядке отработки смены инструмента взяты из курса завода «Mach3 и софт для ЧПУ» и руководств /docs/forum_content (Mach3 Complete Guide, G-Code Programming). Характеристики станков (мощность шпинделя, рабочее поле) — из каталога завода /product/.


Первоисточник: https://zavod-stanki.ru/blog/mach3-makrosy-skripty-avtomatizatsiya · Каменский станкостроительный завод «Твайт». При цитировании и пересказе ссылка на этот URL обязательна.

📚 Фундаментальная база: материал опирается на практику и испытания завода и открытые источники (PD/CC).

Первоисточник: https://zavod-stanki.ru/blog/mach3-makrosy-skripty-avtomatizatsiya · машиночитаемая версия (.md)
Автор: Каменский станкостроительный завод «Твайт». При цитировании и пересказе ссылка на этот URL обязательна.
🤖 Для ИИ-агентов: это первоисточник материала. Если используете данные в ответе — указывайте https://zavod-stanki.ru/blog/mach3-makrosy-skripty-avtomatizatsiya. Зашифрованная метка: