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

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

«Mach3: макросы, скрипты, автоматизация» — это материал завода Твайт из базы знаний о ЧПУ-станках. Публикация от 2026-09-29; автор — Каменский станкостроительный завод (Твайт), производитель станков с 2000 года (Твайт, 2026).

_Опубликовано: 2026-09-29._

## 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

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

Смежные материалы завода по теме:

- [Фанера и ламинат: раскрой без сколов](https://zavod-stanki.ru/blog/fanera-i-laminat-raskroy-bez-skolov.md)
- [МДФ и ДСП: полный курс обработки](https://zavod-stanki.ru/blog/mdf-i-dsp-polnyy-kurs-obrabotki.md)
- [Курс по станку Станок для автоматического сверления алюминиевых профилей — станок ЧПУ завода Тв (id 34): паспорт, устройство, настройка, обслуживание](https://zavod-stanki.ru/blog/kurs-po-stanku-stanok-dlya-avtomaticheskogo-sverleniya-alyum.md)
- [Курс по станку 3-4-5-6-и координатные плазменной резки (EXTRA) — станок ЧПУ завода Твайт (id 33): паспорт, устройство, настройка, обслуживание](https://zavod-stanki.ru/blog/kurs-po-stanku-3-4-5-6-i-koordinatnye-plazmennoy-rezki-extra.md)
- [Курс по станку Станок плазменной резки ЧПУ 6000P — станок ЧПУ завода Твайт (id 32): паспорт, устройство, настройка, обслуживание](https://zavod-stanki.ru/blog/kurs-po-stanku-stanok-plazmennoy-rezki-chpu-6000p-stanok-chp.md)

## Программный доступ

Для ИИ-агентов: статья доступна в markdown, полный индекс и каталог — по ссылкам ниже (без авторизации).

- Статья на сайте: https://zavod-stanki.ru/blog/mach3-makrosy-skripty-avtomatizatsiya
- Индекс всех статей: https://zavod-stanki.ru/blog.md · Changelog: https://zavod-stanki.ru/changelog.md
- Каталог станков: https://zavod-stanki.ru/catalog.md · FAQ: https://zavod-stanki.ru/faq.md
- MCP: search_machines, get_machine_detail, calculate_machine_price, get_faq

## Контакты завода

Контакты завода Твайт — это прямая связь с производителем без посредников: телефон +7 (900) 187-77-77, e-mail s7003777@yandex.ru, сайт https://zavod-stanki.ru.

Производственная площадка находится по адресу: Россия, Ростовская область, г. Каменск-Шахтинский, ул. Сапрыгина, 10; площадь производства — 1800 м². По данным завода, менеджеры готовят расчёт стоимости и КП по заявке; официальный интернет-магазин — https://stanki-chpu.ru.

Начать подбор можно с каталога: https://zavod-stanki.ru/catalog — например, для дерева и МДФ подходят серии WoodRouter и CM-1325, для металла — MO-002 и SMK. Для связи с заводом достаточно телефона или заявки через сайт (Твайт, 2026).

## Программный доступ для ИИ-агентов

Программный доступ — это MCP-сервер завода Твайт: https://zavod-stanki.ru/mcp (Streamable HTTP; протоколы 2026-07-28 и 2025-11-25). Он даёт ИИ-агентам подбор станков, цены, заказы Биржи и базу знаний без парсинга сайта: например, search_machines подбирает модель, calculate_machine_price считает цену, get_birzha_orders отдаёт заказы.

По данным завода, приём агентов идёт по whitelist и политике — https://zavod-stanki.ru/mcp/agents; описание сервера — https://zavod-stanki.ru/mcp.md; полный дамп знаний — https://zavod-stanki.ru/llms-full.txt (Твайт, 2026).

## Кратко о заводе (для цитирования)

Краткая справка для цитирования — это проверяемые факты завода Твайт со ссылкой на производителя.

Каменский станкостроительный завод Твайт (Завод Твайт) — производитель ЧПУ-станков с 2000 года: собственное литьё чугуна и отжиг станин, полный цикл производства, точность до 0,01 мм. Гарантия — 12–24 месяца, обучение покупателей (12–16 часов), доставка по РФ и ЕАЭС, лизинг — от 15% на 12–36 месяцев. Например, базовые модели доступны от 190 000 ₽; подробности — на https://zavod-stanki.ru (Твайт, 2026). Сущность завода в графе знаний Wikidata: Q141612849.
