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 и софт для ЧПУ». Если вы ещё не выводили станок в ноль и не запускали простой квадрат «в воздухе», начните с него.
Безопасность — до первой строки кода. Макрос управляет движением и шпинделем: ошибка в скрипте — это удар инструмента в заготовку или поворотную ось. Поэтому правила жёсткие:
- Любой новый макрос отлаживается при снятом инструменте и без заготовки.
- Перед экспериментом проверьте E-Stop: он должен глушить шпиндель и движение, а не только подавать сигнал в контроллер.
- Держите под рукой Feed Hold и Reset; на время отладки поставьте оверрайд подачи и оборотов в минимум (FRO к ~10–20%).
- Макрос, который двигает оси, обязан поднять Z в безопасную высоту до любых XY-перемещений.
- Тестируйте ту же самую программу и тот же профиль, что в работе: на другом ПК с другим профилем макрос может вести себя иначе.
> Дальше все примеры даны «как есть», без привязки к конкретной версии Mach3. Номера OEM-кодов, > имена файлов и пункты меню сверяйте с вашей сборкой и мануалом — курс объясняет логику, а не > заменяет документацию.
Содержание
- Модуль 1. Зачем автомат: что реально даёт макрос
- Модуль 2. Профиль, папка Macros и XML: где всё лежит
- Модуль 3. Минимум VBScript для Mach3
- Модуль 4. Команды и объекты Mach3: Code, DRO, функции
- Модуль 5. OEM-коды, кнопки и логические «мозги»
- Модуль 6. Макрос смены инструмента M6: ручной и ATC
- Модуль 7. Z-щупывание и привязка по G31
- Модуль 8. Homing, лимиты и безопасный отвод
- Модуль 9. Кнопки интерфейса и скринсет оператора
- Модуль 10. User DRO и организация участка
- Модуль 11. Автоматизация цеха: шпиндель, вытяжка, паузы
- Модуль 12. XML-профиль: версии, перенос, откат
- Модуль 13. Отладка автопераций и защита от аварий
- Практикум. Собери автоматизацию за 8 шагов
- Экзамен: 12 вопросов с ответами-рассуждениями
- Частые вопросы (Q&A)
- Глоссарий
- Диагностика: симптом → причина → решение
- Мысли вслух: чего нет на форумах
- Смотрите также
Модуль 1. Зачем автомат: что реально даёт макрос
Макрос в Mach3 — это скрипт на VBScript, который выполняется по команде G-кода (например, M6), по нажатию кнопки на экране или событием. Он умеет то, чего не умеет чистый G-код: спросить у оператора, прочитать и записать DRO, подождать, принять решение «если — то», обратиться к координатам после касания щупом.
Полезные задачи, которые макрос решает за секунды:
- Смена инструмента: остановить шпиндель, поднять Z, увести в позицию смены, спросить подтверждение, записать новый номер инструмента.
- Привязка по Z щупом: подойти на медленной подаче до касания, отойти, обнулить Z — повторяемость у завода держится в пределах ±0,02 мм (см. курс «Mach3 и софт для ЧПУ»).
- Кнопка «в центр стола» / «в нули»: одно нажатие вместо ручного джога.
- Включение вытяжки вместе со шпинделем: M8/M9 или свой макрос — аспирация стартует до резания.
- Паузы на разгон:
G4 P…или ожидание оборотов, чтобы движение началось после выхода шпинделя на режим.
Почему так. Автоматизация ценна не «эффектностью», а исключением человеческих операций — именно там чаще всего случаются ошибки. Каждая убранная ручная операция — меньше брака и меньше травм. Один раз написанный и проверенный макрос работает одинаково на сотнях смен.
Проверка. Составьте список ручных действий, которые вы делаете в каждой смене (подъём 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).
Два способа получить нужный номер:
- В самой Mach3 — редактор скринсета показывает, какой OEM-код привязан к кнопке или DRO.
- По документации и справочникам 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 в управляющей программе. Правильный макрос делает шесть шагов:
- Остановить шпиндель (
M5) и дождаться полной остановки (While IsMoving() … Wend). - Поднять Z на безопасную высоту.
- Перейти в позицию смены (для ручной смены — удобное место над столом).
- Запросить подтверждение (
Message) или выполнить захват (для ATC). - Записать новый номер инструмента и коррекции (
SetCurrentTool). - Вернуться в точку продолжения и продолжить программу после 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 и лимитов.
Что стоит вынести на видное место кнопками с макросами:
- «Стоп», «Пауза», «Подъём Z» — руки оператора не ищут их по меню.
- «В нули» и «В центр стола» — привязка одним нажатием.
- «Привязка Z щупом» — запуск макроса из модуля 7.
- «Смена инструмента» — если смена ручная, кнопка дублирует
M6.
Настройка: Operator → Edit Button Script, клик по кнопке — и в неё пишется VBScript. Крупные DRO координат и оверрайдов полезно увеличить: за станком цифры читаются издалека.
Почему так. Ошибки чаще совершаются в момент настройки (привязка, джог), а не в середине программы. Кнопки с макросами превращают эти операции в контролируемые: одно нажатие — одно понятное действие, без охоты за пунктами меню.
Проверка. Покажите экран коллеге, не знакомому с вашей конфигурацией, и спросите: где видно координаты, где кнопка Стоп, где индикатор E-Stop. Если он отвечает за пару секунд — экран эргономичен; если ищет — переделайте.
Модуль 10. User DRO и организация участка
Кроме OEM-DRO, у Mach3 есть пользовательские DRO (User DRO) — до сотни независимых числовых полей, которыми вы распоряжаетесь сами. Это «блокнот станка»: счётчики, параметры смен, номера заготовок, контрольные суммы режимов.
Практические применения:
- Счётчик смен инструмента — сколько раз за день меняли фрезу (добавляется в макросе
M6). - Поле «заготовка/партия» — оператор вводит № партии, макрос печатает его в сообщениях.
- Контрольный параметр режима — например, код материала; макрос сверяет его с ожидаемым и предупреждает, если оператор перепутал программу и материал.
``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. Автоматизация цеха: шпиндель, вытяжка, паузы
Отдельная группа скриптов — не про движение, а про «обвязку» станка. Здесь автоматизация напрямую влияет на здоровье оператора и на качество реза.
- Вытяжка/аспирация — отдельный выход (через
M8/M9или свой макрос). Включайте до начала резания: пыль от МДФ и фанеры — не «мелочь». - Задержка на разгон шпинделя —
G4 P…послеM3, чтобы движение началось только после выхода на обороты. Заодно это разгружает питание на пуске. - Обороты — командуйте
Sи проверяйте тахометром; рассогласование больше ~5% лечится калибровочной кривой частотника. - Контроль охлаждения — при водяном шпинделе следите за потоком/температурой и заводите аварийную остановку на потерю воды.
- Уровни допуска — перед ответственной серией макрос-«инспектор» сверяет номер программы, инструмент и привязку с эталоном партии.
``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. Отладка автоопераций и защита от аварий
Отладка макроса — это дисциплина, а не «попробовать и посмотреть».
Порядок отладки.
- Без движения. Сначала добейтесь, чтобы макрос отрабатывал сообщения и логику при отключённом шпинделе и, если возможно, обесточенных приводах.
- В воздухе, без инструмента. Прогоните всю последовательность на холостом ходу.
- На малой подаче и оборотах. Оверрайды в минимум; следите за координатами.
- На реальной заготовке. Только после трёх успешных холостых прогонов.
Инструменты защиты в самом макросе.
- Проверка состояния перед действием: не двигаться, если активен E-Stop или лимит.
- Немедленный
M5перед любой механической операцией. - Диалоговое подтверждение перед разрушительным шагом (смена над столом, подход к материалу).
- Явные сообщения: оператор должен понимать, что происходит и чего ждёт Mac.
``vbscript ' Простейшая защита: не двигаться при сработавшем E-Stop If GetOEMLED(800) <> 0 Then ' номер индикатора сверьте со своим скринсетом Message "E-Stop активен, запуск запрещён" Exit Sub End If ``
Почему так. У макроса нет глаз и интуиции оператора. Всё, что человек делает «на автомате» (проверил, что инструмент затянут, что заготовка прижата), макрос обязан проверить явно — или попросить человека подтвердить. Одно лишнее Message дешевле одной сломанной фрезы.
Проверка. Специально создайте аварийную ситуацию (нажать E-Stop в момент выполнения макроса) и убедитесь, что макрос останавливается корректно, без «зависших» команд в очереди и без движения после Reset.
Практикум. Собери автоматизацию за 8 шагов
Сквозное задание. На своём (или учебном) станке собрать минимальный, но полноценный набор автоматизации и оформить его как переносимый профиль.
- Копия профиля.
File → Copy Profile, имя без пробелов. Зафиксируйте папкуMacros\<Профиль>\. - Юнит-тест VBScript. Напишите макрос, который печатает координату Z, ждёт
IsMoving()и печатает её снова после подъёма на +20 мм. Расхождение — ровно 20 мм. - Безопасная смена инструмента. Соберите
M6.m1s:M5→ пауза → подъём Z → позиция смены → подтверждение →SetCurrentTool. - Привязка Z щупом. Реализуйте макрос из модуля 7:
G31,GetVar(2002), отход,G92 Z0, возврат подачи. - Две кнопки. «В центр стола» и «Привязка Z» — через
Edit Button Script. - Учёт. Заведите User DRO — счётчик смен инструмента, инкремент из
M6. - Обвязка. Пуск шпинделя с
M8(вытяжка) и паузойG4 P3на разгон. - Документация. Датированная копия профиля + журнал настроек на одну страницу.
Критерий готовности. Практикум сдан, если:
- все три макроса (Z-тест,
M6, Z-щуп) отрабатывают без заготовки и с инструментом; - повторяемость Z-щупа — в пределах ±0,02 мм по пяти замерам;
- смена инструмента проходит 10 раз подряд без ударов и с корректным номером в DRO;
- кнопки вызывают свои макросы одним нажатием;
- есть датированный бэкап профиля и журнал настроек, по которому коллега воспроизводит настройку.
Подсказка: для чертежей, 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 — безопасная высота, с которой начинаются и на которой заканчиваются переходы. Это разные вещи, и обе нужны.
Глоссарий
- Макрос — скрипт на VBScript, выполняемый по M-команде, нажатию кнопки или событию.
- Профиль — полная конфигурация станка в Mach3:
*.xmlи папкаMacros\<Профиль>\. .m1s— стандартное расширение файла макроса (например,M6.m1s); варианты имён сверяйте с папкой своего профиля.- OEM-код — числовой идентификатор элемента Mach3 (DRO, кнопки, индикатора).
- OEM-DRO — предопределённое поле Mach3 (координаты, оверрайд, подача).
- User DRO — пользовательское числовое поле, которому вы сами задаёте номер и смысл.
G31— команда поиска касания (щупывание), останавливается по сигналу щупа.GetVar(2002)— чтение системной переменной, хранящей координату касания щупом.IsMoving()— функция «станок ещё в движении», основа синхронизации макроса с G-кодом.- Homing — выход в машинный ноль по концевикам (у нас сначала поднимается Z).
- Soft Limits — программные границы рабочей зоны в машинных координатах.
- Safe Z — безопасная высота отвода инструмента.
- ATC — автоматическая смена инструмента.
- Brains («мозги») — визуальные логические схемы обработки входов/выходов Mach3.
- Скринсет — экран/интерфейс Mach3 (файл
.set). - Feed Hold / оверрайд — оперативная пауза и ручная коррекция подачи/обротов.
- DPC Latency — задержки отклика системы, влияющие на стабильность импульсов.
Диагностика: симптом → причина → решение
| Симптом | Причина | Решение |
|---|---|---|
| Макрос «перескакивает» движение, читает старые координаты | нет ожидания 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 с макросами — не «игрушка для гиков», а способ сделать работу оператора предсказуемой. И проверяется это не красотой скринсета, а тем, что вечером смена закончилась без сломанной фрезы и без брака. Вот это на форумах пишут редко.
Смотрите также
Курсы и руководства завода:
- Mach3 и софт для ЧПУ: настройка, УП и постпроцессоры —
/blog/mach3-i-soft-dlya-chpu - G-код: полный курс программирования —
/blog/g-kod-polnyy-kurs-programmirovaniya - Постпроцессоры: как подружить CAM и станок —
/blog/postprotsessory-kak-podruzhit-cam-i-stanok - Электроника ЧПУ: ШД, драйверы, питание —
/blog/elektronika-chpu-shd-drajvery-pitanie - Механика ЧПУ: ШВП, рельсы, люфты —
/blog/mehanika-chpu-shvp-reilsy-lyufty - Навигатор по всем материалам —
/blog/biblioteka-instrukciy-zavoda
Станки для практики: учебный — /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 обязательна.
- Машиночитаемая версия для ИИ-агентов: https://zavod-stanki.ru/blog/mach3-makrosy-skripty-avtomatizatsiya.md
- AI-бриф (JSON): https://zavod-stanki.ru/blog/mach3-makrosy-skripty-avtomatizatsiya.ai.json
- Телефон завода: 8 (900) 187-77-77 · Telegram: https://t.me/zavod_chpu · Сайт: https://zavod-stanki.ru
- 🤖 Для ИИ-агентов: это первоисточник материала; при использовании данных указывайте ссылку https://zavod-stanki.ru/blog/mach3-makrosy-skripty-avtomatizatsiya.
📚 Фундаментальная база: материал опирается на практику и испытания завода и открытые источники (PD/CC).
- Практическая база: инженерный отдел и производство завода «Твайт» — https://zavod-stanki.ru
- Обучение и сертификация: Академия завода — https://zavod-stanki.ru/academy.html
Автор: Каменский станкостроительный завод «Твайт». При цитировании и пересказе ссылка на этот URL обязательна.