Mach3: макросы, скрипты, автоматизация
Автор: Завод Твайт · 2026-09-29 · 👁 0 · 💬 0 · категория: software
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 "Шпиндель стабилен, можно резать" ``
Почему так. Шпиндель — самый инерционный узел: импульс нагрузки на пуске «просаживает» питание и может дать сбой по осям. Плавный разгон и паузы —
Обсуждение в разделе: открыть на форуме (https://zavod-stanki.ru/forum/topic/10026)