Skip to content

About

Программа для фрезера Roland MDX-40A вместо SRP Player и VPanel: платы из Gerber/Excellon, 3D-модели из STL с обработкой с двух сторон, управление станком по USB. Kotlin + Compose Desktop, Windows.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MillStudio

Программа для фрезера Roland MODELA MDX-40A — одна вместо связки SRP Player + VPanel + сторонних утилит для плат: платы из Gerber и Excellon, 3D-модели из STL и управление станком. Интерфейс на русском. SRP Player, VPanel и драйвер Roland для работы не нужны (см. «Как программа говорит со станком»).

A Windows app for the Roland MDX-40A desktop mill: PCB isolation milling from Gerber/Excellon (single- and double-sided, with alignment pins), 3D milling from STL (including two-sided jobs with supports and an illustrated flip guide), stock preparation and machine control over USB — one program instead of SRP Player + VPanel. The interface is in Russian.

Release License: MIT Windows 10/11 Kotlin + Compose Desktop

Модель, обработанная с двух сторон: деталь в рамке заготовки

Warning

На настоящем станке проверено только чтение по USB: координаты головки, ноль и прошивка. Движения — джог, ноль, шпиндель, задания, пауза, поворотная ось и переворот на вторую сторону — проверены тестами и в симуляторе. Первое задание прогоните в воздухе — без заготовки или с нулём Z на 10–20 мм выше неё. Подробнее — в разделе «Что проверено, а что нет».

Скачать и запустить

  1. Скачайте MillStudio-0.2.0-windows.zip со страницы Releases.
  2. Распакуйте архив целиком и запустите MillStudio\MillStudio.exe. Java уже внутри, устанавливать ничего не нужно. Нужна 64-битная Windows 10 или 11.
  3. Если Windows покажет «Windows защитил ваш компьютер», нажмите «Подробнее» → «Выполнить в любом случае»: у программы нет цифровой подписи.

Если на компьютере стоит SRP Player, при первом запуске программа возьмёт из него фрезы, режимы резания и My Tools. Без него — встроенные фрезы ZHS-100/200/400/600, отмеченные ★ «есть у меня»; свои инструменты добавьте и отметьте в разделе «Инструменты».

Станок подключается по USB. На экране «Станок» выберите режим «Станок»: если стоит драйвер Roland, связь пойдёт через принтер «Roland MDX-40A», если нет — напрямую по USB. Без станка всё можно проверить в режиме «Симулятор».

Возможности

  • Плата — Gerber (RS-274X, X1/X2) и Excellon из KiCad, EasyEDA, Eagle, Altium → изоляция дорожек, сверловка, вырезание контура с перемычками. Двусторонний текстолит: верх и сверловка, переворот по штифтам совмещения, низ и контур.
  • 3D-модель — STL → ориентация, масштаб, заготовка, черновая послойная и чистовая растровая обработка, обработка с двух сторон с поддержками (как «Cut both sides» в SRP Player) и схемой переворота со стрелками — перевернули не так, как задумано, вторая сторона разворачивается сама, сдвиг модели внутри заготовки (полями или мышью), подготовка неровной заготовки — выравнивание верха и боков и отверстия под болты подложки, симуляция результата.
  • Станок — координаты головки прямо со станка, как в VPanel, кнопка VIEW, джог, ноль Z/XY, ноль XY по заготовке (станок сам встаёт над углом заготовки по её месту на столе), шпиндель, очередь заданий с пошаговой сменой инструмента, пауза во время резки как у 3D-принтера, живой 3D-вид «на столе», симулятор станка, отправка готовых RML-файлов.
  • Стол как в слайсере — заготовка с моделью лежит на столе 305×305 (сетка, рабочая зона, высота хода). Её можно перетащить мышью. Есть проверка хода станка и досягаемости фрезы при заданном вылете. Столы: обычный, фанерная подложка (по чертежу автора, с креплением заготовки болтами М3) и поворотная ось (4-я ось). С поворотной осью обычный стол снят, показывается только ось вращения.
  • Инструменты — библиотека фрез, свёрл и материалов с режимами резания; при первом запуске подхватываются данные Roland из установленного SRP Player. Пока он установлен, программа держит копию его баз в %APPDATA%\MillStudio\roland-srp, поэтому импорт работает и после удаления SRP Player. Без него и без копии — встроенные фрезы ZHS и рекомендуемые режимы.
  • Подбор инструментов «Авто» — как My Tools в SRP Player: фрезы и свёрла подбираются только из отмеченных «есть у меня» (★), с пояснением, почему выбран этот инструмент, и подсказкой, если подходящего среди ваших нет (см. «Подбор инструментов»).

Скриншоты

Траектории обеих сторон и поддержки Плата: изоляция дорожек, отверстия, контур
Траектории обеих сторон, оранжевые бруски — поддержки Плата: изоляция дорожек, отверстия и контур; «Авто» подсказывает, какого инструмента не хватает
Станок: задание идёт, пауза как у 3D-принтера Заготовка на фанерной подложке
Станок: очередь заданий, прогресс, пауза во время резки Заготовка на фанерной подложке: болты М3 и поддержки
Перед второй стороной: как перевернуть заготовку Двусторонняя плата: сторона 2 после переворота
Перед второй стороной: как перевернуть, куда уйдут торцы и модель, выбор «как перевернули» Двусторонняя плата: медь низа после переворота, штифты на оси переворота

Сборка из исходников

Нужна JDK 21 или новее в JAVA_HOME (например, Temurin или JBR из IntelliJ IDEA).

gradlew run                 — запустить
gradlew test                — тесты (платы, 3D, импорт Roland, снимки интерфейса в build\test-out)
gradlew createDistributable — папка с MillStudio.exe (Java внутри): build\compose\binaries\main\app\MillStudio
gradlew releaseZip          — архив для Releases: только программа (build\release)
gradlew portableZip         — архив для своего второго компьютера: программа и свои настройки (build\dist)
gradlew portableParts       — тот же архив частями по 29 МиБ и сценарий сборки (build\dist\parts)
gradlew packageMsi          — установщик MSI (нужен WiX Toolset)

Часть тестов берёт Piano.stl и базы установленного SRP Player; без него эти проверки пропускаются.

Настройки и библиотека хранятся в %APPDATA%\MillStudio\ (settings.json, library.json); файлы RML из режима «Только файлы» — в Документы\MillStudio.

На свой второй компьютер. gradlew portableZip собирает build\dist\MillStudio-<версия>-windows.zip. В архиве папка с MillStudio.exe, инструкция packaging\app\Как запустить.txt и data: настройки, библиотека и копия баз SRP Player из %APPDATA%\MillStudio (путь последней папки убирается). Установка не нужна: распаковать и запустить. При первом запуске программа копирует data к себе (AppDirs.importCarried), если своих настроек на том компьютере ещё нет. В архиве для Releases (releaseZip) папки data нет.

Как программа говорит со станком

Два пути, оба без SRP Player и VPanel:

  • Принтер Windows «Roland MDX-40A», если стоит драйвер Roland: RAW-задание через winspool (JNA), так же, как отправляет SRP Player.
  • «USB напрямую (без драйвера)» (machine/UsbPrint.kt). MDX-40A — USB-устройство класса «принтер» (VID 0B75, PID 03DB). Windows сама ставит для него стандартный драйвер «USB Printing Support» (usbprint.sys), программы Roland для этого не нужны. Программа находит устройство через SetupAPI (интерфейс GUID_DEVINTERFACE_USBPRINT) и пишет байты прямо в него (CreateFile + асинхронный WriteFile). У драйвера Roland нет языкового монитора, поэтому станок получает те же байты, что и через очередь печати. Так же, напрямую по USB, со станком работает и сам VPanel. Если принтера станка нет, а станок виден по USB, программа сама переключается на этот путь.

Формат RML-1 повторяет вывод SRP Player: ^IN; ^PA; !RC<об/мин>; !MC1; !VZ<мм/с>; Z x,y,z; … !MC0;, координаты в шагах 0.01 мм.

Особенности:

  • координаты головки станок сообщает сам — по служебному каналу (см. ниже). Если канал недоступен, программа считает их сама: XY известны после «Домой» (H — переезд в ноль XY, записанный в станке), Z — после «Ноль Z здесь» (^PR;!ZO0; — ставит ноль Z в станке на текущей высоте);
  • ноль XY — программный: он прибавляется ко всем заданиям MillStudio и к готовым RML-файлам (rml/RmlShift.kt сдвигает их абсолютные координаты X/Y). Его можно поставить джогом или по заготовке (см. «Ноль по заготовке»). Кнопка «Ноль XY самого станка» убирает сдвиг;
  • станок крутит шпиндель при любом перемещении, пока ему не сказано !MC0. Поэтому джог, «К нулю», «Поднять» и «Домой» идут с !MC0, если шпиндель не включён кнопкой (на станке шпиндель крутился при «К нулю»);
  • поворотную ось A можно повернуть вручную (0/90/180/270°) — как в VPanel: шпиндель стоп, фреза вверх, !ZEA<градусы>;
  • «Стоп» удаляет задания из очереди Windows, но то, что уже в буфере станка, он доработает. Для мгновенной остановки откройте крышку.

Служебный канал: координаты и VIEW, как у VPanel

VPanel узнаёт положение головки не командами RML, а управляющими USB-запросами производителя — через тот же стандартный драйвер usbprint.sys (IOCTL_USBPRINT_VENDOR_GET_COMMAND / _SET_COMMAND, bRequest = 1, номер запроса в wValue). Протокол восстановлен по VP_MDX40A.exe (VPanel 1.10) и проверен чтением на MDX-40A с прошивкой V170;B210 (machine/MdxPanel.kt):

  • GET 0x100 — 32 байта: состояние, X, Y, Z, A головки в координатах станка (int32, старший байт первым, 0.001 мм и 0.001°), обороты шпинделя. Координаты станка: X 0…305 слева направо, Y 0…305 — фреза над столом спереди назад, Z от −105 (низ) до 0 (верх). Чаще ~10 мс станок данные не обновляет и отдаёт одно состояние;
  • GET 1 — состояние: шпиндель вращается, открыта крышка, станок разбирает команду, идёт перемещение, длина ответа на запрос;
  • запросы (SET без данных → ждать ответ → GET 3): 0x30B — ноль RML-1 в координатах станка (точка «Домой» и ноль Z), 0x101 — прошивка, 0x302 — пределы хода;
  • команда 0x500 FFFF — переезд в позицию VIEW (VPanel обрамляет её командами 0x3F5 2/FF и 0x1109 0/FF, станок ждём по биту «перемещение»).

Программа опрашивает станок 4 раза в секунду, в том числе во время задания: RML идёт своим путём, канал ему не мешает. Координаты RML = координаты станка − ноль RML-1. Когда станок стоит, а команд программы в пути нет (3 с после последней, очередь печати доставляет их не сразу), положение программы сверяется со станком. Так она узнаёт о перемещениях без неё: кнопки станка, VPanel, перезапуск станка (при включении он сам уезжает в VIEW). Пропала связь — положение и ноль Z снова неизвестны. После «Ноль Z здесь» ноль перечитывается из станка.

VIEW — кнопка в карточке «Положение»: фреза вверх, стол вперёд. Как и VPanel, при вращающемся шпинделе и открытой крышке станок не едет: шпиндель программа сначала останавливает, про крышку — пишет. В симуляторе VIEW — переезд в верхней точке к середине заднего края стола.

По этому же каналу VPanel делает коррекцию подачи и оборотов на ходу, очистку буфера станка при «Стоп», датчик нуля Z и поиск оснастки поворотной оси — это ещё не повторено.

Пауза во время резки

Принтер «Roland MDX-40A» настроен на «печать после полной буферизации», поэтому одно большое задание нельзя притормозить. Пауза сделана так, как работают хосты 3D-принтеров (OctoPrint и т. п.):

  • Программа разбита на блоки с оценкой времени (rml/RmlStream.kt). Станку уходят небольшие порции, каждая — отдельное RAW-задание в очереди Windows, с запасом не больше «передавать наперёд» (по умолчанию 8 с работы).
  • Пауза. Подача останавливается в конце текущего прохода, когда фреза уже поднята. Если такого места нет в ближайшие 30 с, подача останавливается сразу. Станок дорабатывает переданное и выполняет вставку: подъём на безопасную высоту плюс 10 мм, отвод к нулю XY (по желанию), остановка шпинделя.
  • Продолжить. Шпиндель включается, фреза едет над точкой остановки, быстро опускается до 1 мм над ней, врезается со скоростью врезания и восстанавливает прежнюю скорость. Пока задание идёт или стоит на паузе, ручное управление заблокировано.
  • Стоп работает так же: станок дорабатывает переданное, поднимает фрезу и выключает шпиндель. Задания в очереди Windows не удаляются, чтобы не оборвать команду на середине. Мгновенно останавливает только крышка станка.
  • Время. Станок не сообщает, где он находится, поэтому прогресс, «осталось» и момент паузы считаются по модели разгона и торможения (toolpath/Motion.kt). Если станок быстрее модели, он может на долю секунды подождать данных.
  • Проверка. Тестами проверено, что с паузой посередине и продолжением съём материала тот же, что без паузы (PauseTest, MachinePauseTest).
  • По USB напрямую порции пишет отдельный поток, впереди тоже не больше одной порции. Если станок не принимает данные 20 с, программа предупреждает.

Стол

  • machine/Table.kt — модель стола, проверка хода станка и досягаемости фрезы. Данные MDX-40A: стол 305×305, ход 305×305×105, от торца шпинделя до стола до 123 мм, вылет фрезы задаётся. ui/TableScene.kt — 3D-сцена.
  • Поворотная ось ZCL-40A. Ставится вместо обычного стола. В сцене рисуются только ось вращения (пунктир, засечки на торце патрона и в конце рабочей длины) и габарит хода, корпус оси не рисуется. Чертежей нет, размеры приблизительные (вместимость 270ר120 мм из брошюры) и настраиваются. Сторона 1 — при A = 0°, сторона 2 — при A = 180°. Выбор стола по умолчанию берётся из настройки SRP Player (rotation_id).
  • Фанерная подложка (PlywoodSpec, Plywood в machine/Table.kt) — по чертежу КОМПАС stol_frezera.frw. Лист 305×305 из двух слоёв фанеры по 3 мм лежит на столе. В нижнем слое 25 гнёзд под гайки М3 (под ключ 5.6 мм), в верхнем над ними отверстия Ø3.25. Сетка 5×5 с шагом 50 мм по центру листа. Ещё 10 отверстий Ø3.2 (X = центр ± 107.5, Y = центр, ±70, ±140) — крепление подложки к столу, в сцене это красные кольца. Все размеры можно поправить в программе.
    • Заготовка лежит на подложке (верх подложки — 6 мм над столом). Её прикручивают болтами М3 через отверстия сетки. Программа показывает, какие отверстия под заготовкой свободны от зоны резания, и рисует там головки болтов.
    • Проверки: болт некуда поставить или он один; фреза задевает головку болта (переходы ниже головки — нужна бóльшая «Безопасная высота»); фреза уходит в фанеру до слоя с гайками.
    • Для двух сторон: кнопка «По сетке отверстий» ставит центр заготовки на узел сетки или между узлами. Тогда после переворота отверстия в заготовке попадают на те же гайки. Программа проверяет это и пишет «встанет на те же болты».
    • Формат .frw закрытый, КОМПАС на ПК нет. Координаты вынуты из сжатого потока Contents (окружности: центр, оси, полуоси, углы; шестиугольники: центр, вписанный радиус 2.8).

Ноль по заготовке

Ноль XY не обязательно искать джогом. Программа знает, где заготовка лежит на столе (раздел «Стол и размещение» у 3D-модели, «Положение на столе» у платы), и какая её точка — ноль задания («Ноль станка» у 3D-модели, «Ноль XY» у платы).

  • «Ноль XY по заготовке» — кнопка в карточке «Ноль» экрана «Станок» (и в подготовке шага, если ноль стоит не там). Программный ноль XY встаёт в эту точку, фреза подъезжает к ней. Если положение XY неизвестно (станок не отвечает по служебному каналу, а «Домой» после запуска программы не нажимали), станок сначала идёт «Домой». Перед переездом фреза поднимается: на безопасную высоту, если ноль Z задан, иначе в верхнюю точку (^PA;!ZM0;, как у SRP Player).
  • Положите заготовку на станке так же, как на экране, с теми же отступами от краёв стола, — и ноль XY готов. Если фреза встала не точно над углом, подгоните её джогом и нажмите «Ноль XY здесь».
  • Привязка стола. Все координаты RML станок считает от своего нуля XY. Этот ноль записан в самом станке: его ставят в VPanel («Set Origin Point»), он сохраняется после выключения и может стоять где угодно. «Домой» (H) приводит именно в него: на MDX-40A после H VPanel показывает X 0, Y 0 в системе пользователя. Без привязки программа считает, что этот ноль в левом переднем углу стола. Если это не так, «Ноль XY по заготовке» отправит фрезу не туда. Привязка делается один раз: подвести фрезу джогом точно к левому переднему углу стола (или фанерной подложки), нажать «Фреза над углом стола» (если станок не отвечает по служебному каналу — сначала «Домой»). Программа запомнит, где на столе ноль станка (TableSetup.zeroX/zeroY). Если ноль в станке переставят в VPanel, привязку нужно повторить.
  • Если ноль после привязки всё равно приходится подгонять на одно и то же расстояние, положите заготовку точно как на экране, подгоните ноль и нажмите «Запомнить как поправку стола».
  • Ход станка проверяется по столу (305×305), где бы ни стоял ноль станка. Координаты RML от него могут быть и отрицательными.
  • Перед каждым шагом программа пишет, стоит ли ноль XY по заготовке, подогнан ли он джогом или остался от другого задания.
  • На второй стороне ноль XY тот же: заготовка после переворота занимает то же место. Так и при перевороте вокруг другой оси — тогда разворачиваются траектории, а не ноль (см. «Обработка с двух сторон»).
  • Ноль Z — по-прежнему касанием: высоту кончика фрезы программа не знает.
  • Проверка. StockZeroTest: подъём и переезд в симуляторе, подгонка джогом, ноль вне хода станка, ноль станка у заднего края стола (отрицательные координаты), режим «Только файлы», ход станка по столу. UiSnapshotTest: ноль платы и 3D-модели, на второй стороне тот же, поправка и привязка стола.

Обработка с двух сторон и поддержки

Устроено как «Cut both sides» и «Add support to model» в SRP Player (cam3d/Cam3d.kt, раздел 4 экрана «3D-модель»).

  • Разъём. Сторона 1 фрезеруется сверху до плоскости разъёма (по умолчанию середина модели) с перекрытием 0.5 мм. Сторона 2 — то же снизу после переворота. Над моделью фреза идёт до её поверхности, даже ниже разъёма, поэтому с каждой стороны снимается всё, что с неё видно. Вокруг модели заготовка прорезается насквозь, рамка за полем обработки остаётся целой.
  • Поддержки — бруски толщиной и высотой 5 мм на высоте разъёма, от края заготовки до модели (заходят в неё на 1 мм). Их 2 (слева и справа) или 4 (со всех сторон). Их можно сдвинуть от центра модели. Поддержки не фрезеруются и держат модель в рамке, когда вторая сторона её прорежет. Программа предупреждает, если поддержка не встречает модель или если рамка тоньше 2 мм. Кнопка «По модели + поле и рамка» подбирает заготовку с рамкой.
  • Срезка поддержек — последний шаг, пока заготовка ещё лежит второй стороной вверх. Фреза снимает каждый брусок сверху насквозь, на 0.5 мм ниже его низа. Карта инструмента строится по одной модели, поэтому в модель фреза не заходит. Центр фрезы не выходит за зону, которую уже прошли фрезы сторон, и рамку не задевает: у рамки остаётся обрубок поддержки. Под нависающими краями модели могут остаться крохи — их зачищают. По умолчанию режет чистовая фреза, она уже стоит после второй стороны. Можно оставить тонкую перемычку (0.2–0.5 мм) и отломить модель рукой. Программа проверяет, что каждая поддержка перерезана по всему сечению, и предупреждает, если фреза не проходит между моделью и рамкой. Перед шагом станок предупреждает, что модель освободится.
  • Обычный стол. Заготовку переворачивают вручную: вокруг X (передний край уходит назад) или вокруг Y. Ноль XY прежний, если заготовку положить на то же место (к тем же упорам или на те же болты). Ноль Z выставляется заново. Толщина заготовки должна совпадать с введённой.
  • Как перевернуть — картинкой (ui/FlipGuide.kt). В разделе «Стороны и поддержки» и перед первым шагом стороны 2 на экране «Станок» — брусок с осью и стрелкой поворота и вид сверху до и после переворота. Передний торец помечен оранжевым, правый — голубым: видно, куда они уйдут, где после переворота окажется модель и что ноль XY остаётся на месте. Если модель стоит не по центру заготовки, программа пишет, в какую сторону и на сколько она переедет. Так и должно быть: вторая сторона рассчитана под это положение (в SRP Player на этом путались).
  • Перевернули по-другому — вторая сторона подстраивается сама (JobFlip в jobs/Jobs.kt). Перед стороной 2 станок спрашивает «Как перевернули: вперёд-назад / влево-вправо». Переворот вокруг X и вокруг Y отличаются ровно поворотом на 180° вокруг центра заготовки. Если выбрать не тот, что был задуман, все шаги стороны 2 (и 3D-вид) разворачиваются на 180°, а ноль XY не меняется. Это поворот, а не зеркало: попутное фрезерование остаётся попутным. После начала стороны 2 выбор закрывается.
  • Поворотная ось. Переворачивать не нужно: перед каждым шагом фреза поднимается в верхнюю точку и ось встаёт в свой угол — как у SRP Player: !MC0;!ZM0;!ZEA180.00;. Команда !ZEA<градусы> найдена в SRPCore.dll SRP Player.
  • Проверка. TwoSidedTest: шар в заготовке на обычном столе (переворот вокруг X и вокруг Y) и на поворотной оси, симуляция обеих сторон. Шар не зарезан, вокруг него сквозной прорез, рамка на месте. Поддержки без срезки на месте, со срезкой перерезаны насквозь (или до перемычки 0.3 мм), обрубки у рамки остались. Шар не по центру заготовки рассчитан под переворот вперёд-назад, а перевернули влево-вправо: с развёрнутой второй стороной зарез 0 мм, без разворота — 10 мм. Результат с двух сторон показывается сплошной деталью в рамке (SoftRenderer.addSlab).

Двусторонние платы

Раздел «Плата и заготовка» экрана «Плата»: «Текстолит — Двусторонний» (pcb/PcbCam.kt).

  • Порядок. Сторона 1 (медь верха, F_Cu, как в редакторе): отверстия под штифты, изоляция верха, сверловка. Переворот. Сторона 2 (медь низа, B_Cu, отражённая под переворот): изоляция низа и контур платы — последним, чтобы плата держалась до конца. На превью можно переключать «Сторона 1 — верх / Сторона 2 — низ»: вторая сторона показана так, как её увидит станок.
  • Штифты совмещения. Первым шагом в поле заготовки сверлятся два отверстия на оси переворота, по обе стороны платы, насквозь и в подложку (по умолчанию Ø3, на 2.5 мм — на фанерной подложке глубже нельзя: ниже слой с гайками). Поле вокруг платы при этом не меньше диаметра штифта плюс 3 мм. Перед второй стороной в отверстия вставляют штифты (отрезки прутка, хвостовики свёрл) и надевают на них перевёрнутую плату. Стороны совпадут, даже если текстолит отрезан неровно. Отверстия стоят симметрично центру заготовки, поэтому подходят и при перевороте вокруг другой оси; вторая сторона тогда разворачивается, как у 3D-модели. Инструмент — «Авто» из ваших: сверло нужного диаметра или фреза тоньше (отверстие по спирали).
  • Ноль. XY — тот же угол или центр заготовки: плата переворачивается вокруг оси через центр заготовки. Z — снова на поверхности меди.
  • Переходные отверстия не металлизированы: после фрезеровки их пропаивают проволокой.
  • Если в проекте нет меди низа, плата делается с одной стороны, программа об этом пишет.
  • Проверка. PcbTwoSidedTest (плата KiCad с добавленной медью низа; переворот вокруг X и Y; ноль в углу и в центре): порядок шагов; штифты на оси и попадают в свои отверстия при любом перевороте; все металлизированные отверстия после переворота попадают в площадки меди низа (при перевороте не вокруг той оси — ни одно); всё в пределах заготовки.

Подготовка заготовки

Раздел 4 экрана «3D-модель» (cam3d/Prep.kt). Шаги встают в начало задания модели или идут отдельным заданием («Только подготовку — в очередь»). В окне «Траектории» они голубые, неровная заготовка до подготовки — голубой каркас.

  • Отверстия под болты (только с фанерной подложкой) — первым шагом, пока болтов нет: заготовку держит скотч или прижимы по краям. Сквозные отверстия Ø3.4 над теми отверстиями подложки, где встанут болты, и на 0.3 мм в подложку. Фреза идёт по спирали и кругами изнутри наружу, если она почти равна отверстию — врезается с отскоками. «Утопить головки» добавляет гнёзда Ø(головка + 0.6) на 0.5 мм глубже высоты головки под выровненным верхом.
  • Выравнивание верха — змейка плоской фрезой от самой высокой точки на заданную глубину. Если болты стоят и головки не утоплены, фреза обходит их поверху: вокруг остаются невыровненные пятачки, программа предупреждает.
  • Выравнивание боков — обход снаружи по часовой (попутное фрезерование) от неровного верха до низа заготовки или заданной глубины. Лишнее («до N мм с каждого бока») снимается кругами снаружи внутрь, последний круг — кромкой точно по размеру X×Y. Углы острые, центр фрезы огибает их по дуге. Каждый слой начинается снаружи за пределами лишнего, то есть врезание в воздухе. Шаг по Z по умолчанию — из режимов фрезы, глубже при узком съёме.
  • Ноль Z. У шагов подготовки при нуле «верх» он ставится на самую высокую точку невыровненного верха, у модели — на выровненный верх. Перед первым шагом модели станок об этом напомнит. С нулём «основание» перевыставлять не нужно.
  • Проверки: фреза для отверстий не тоньше отверстия; режущая часть короче глубины; цанга упирается в заготовку при заданном вылете; траектории подготовки — в ходе станка.
  • Сдвиг модели в заготовке — поля «Сдвиг по X/Y/Z» в разделе 2 или мышью («Мышь двигает: модель в заготовке» внизу окна). Модель не выходит за заготовку, сдвиг упирается в край.
  • Проверка: PrepTest — бока не заходят внутрь размера и снимают всё лишнее до низа; верх обходит головки болтов; отверстия и гнёзда нужного диаметра насквозь; сдвиг модели и упор в края.

Подбор инструментов

Как в SRP Player: в каждом выборе фрезы или сверла первым пунктом стоит «Авто» — подбор только из инструментов, отмеченных «есть у меня» (★, раздел «Инструменты»; при импорте ★ ставятся по My Tools SRP Player). Под выбором — почему подобран этот инструмент; если подходящего среди ваших нет, берётся инструмент из библиотеки, и программа пишет, какой нужен. Правила — library/ToolAdvisor.kt, подбор чистовой по модели — cam3d/ToolFit.kt.

  • «Подбор фрез: Детально / Быстро» (раздел «Заготовка») — вопрос «время или качество» SRP Player.
  • Черновая — самая крупная из ваших (при «Детально» не крупнее 6 мм, как в SRP Player), лучше та, чья режущая часть достаёт на всю глубину.
  • Чистовая — по модели: для каждой вашей шаровой и плоской фрезы (не крупнее черновой) считается карта кончика и огибающая — где фреза оставит материал. Берётся самая крупная, у которой непрорезанного не больше допуска: «Детально» — 0.5 % поверхности глубже 0.15 мм, «Быстро» — 3 % глубже 0.4 мм. Если проходит та же, что черновая, — без смены фрезы. Если не проходит ни одна — самая тонкая и подсказка, сколько поверхности останется. Считается в фоне и при расчёте. Не учитываются сквозные отверстия и щели между частями модели на дне стороны.
  • Срезка поддержек — чистовая (она уже стоит), если её режущей части хватает на толщину поддержки, иначе самая тонкая из ваших, что прорежет насквозь.
  • Подготовка — выравнивание самой широкой плоской; отверстия под болты — самой крупной не толще 2/3 отверстия (так требует SRP Player), впритык — тоньше хотя бы на 0.3 мм.
  • Плата — изоляция: самый тонкий рез из ваших гравёров и фрез до 0.8 мм; контур: ваша плоская 0.8–3.2 мм ближе к 2 мм; отверстия: сверло или фреза того же диаметра → фреза тоньше (отверстие по спирали) → чуть крупнее, до +0.25 мм (отверстие выйдет больше, программа предупреждает). Свой выбор для диаметра хранится отдельно, остальные остаются «Авто». Если инструмент изоляции шире самых узких зазоров между медью, расчёт предупреждает, что дорожки не разделятся.
  • Прежние настройки: фрезы, что раньше стояли по умолчанию (ZHS-400, шаровая R1.5, ZHS-600, ZHS-200, гравёр 30°/0.1, плоская Ø1), при первом запуске новой версии становятся «Авто»; выбранные вручную остаются.
  • Проверка: ToolAdvisorTest — только из моих; модель с пазом 1.5 мм — чистовая ZHS-100, гладкий брусок — ZHS-600 без смены фрезы; «Быстро» на мелкой выемке берёт крупную; свёрла для платы; перенос прежних настроек.

Что проверено, а что нет

Проверено автотестами:

  • разбор Gerber/Excellon на реальных платах KiCad 2013/8, Eagle и на файлах формата EasyEDA;
  • изоляция, сверловка и контур; рендер плат — в build\test-out\*.png;
  • 3D на рельефе и на Piano.stl из SRP Player: зарез модели ≤ 0.003 мм, проверено симуляцией;
  • генерация RML и обратный разбор;
  • импорт базы SRP Player: 85 фрез, 1000 режимов MDX-40A, «My Tools»;
  • переворот на вторую сторону: модель не по центру и «чужой» переворот (TwoSidedTest), двусторонняя плата со штифтами (PcbTwoSidedTest).

Проверено на станке: чтение по служебному каналу — координаты головки, ноль RML-1, прошивка, пределы хода (PanelTest разбирает байты, которые прислал станок).

Не проверено на станке: кнопка VIEW (команда взята из VPanel, в тестах — модель станка), сверка положения с движущимся станком, связь «USB напрямую» (проверены поиск устройств и асинхронная запись — в файл, StandaloneTest), джог, «Ноль Z здесь», «Ноль XY по заготовке» с привязкой стола (что «Домой» приводит в ноль XY, записанный в станке, проверено на станке по VPanel), включение шпинделя без движения, отправка заданий, пауза и продолжение (подача порциями через очередь Windows), поворот оси A командой !ZEA и переворот на вторую сторону (у 3D-модели и у двусторонней платы со штифтами), подготовка заготовки (отверстия, выравнивание боков). Первое задание прогоните в воздухе: поднимите ноль Z на 10–20 мм над заготовкой и нажмите «Пауза»/«Продолжить».

Устройство кода

Код — в src/main/kotlin/millstudio/, тесты — в src/test/kotlin/millstudio/.

core/       геометрия, хранение настроек
library/    модель инструментов/материалов/режимов, рекомендуемые режимы, подбор «Авто» из моих (ToolAdvisor), импорт из SRP Player
toolpath/   траектории, построитель безопасных подходов, упорядочивание контуров
rml/        генератор RML-1 (как у SRP Player), интерпретатор RML, программа блоками (RmlStream), вставки паузы/возврата
machine/    профиль станка, очередь принтера Windows (JNA), подача порциями с паузой (JobStreamer), контроллер,
            служебный канал станка — координаты и VIEW (MdxPanel), виртуальный станок, стол и поворотная ось (Table)
pcb/        Gerber (апертуры, макросы, дуги, регионы, полярность), Excellon, распознавание слоёв, CAM плат
cam3d/      STL, Z-карта модели, карта кончика инструмента и огибающая, черновая/чистовая, подбор чистовой по модели (ToolFit),
            подготовка заготовки (Prep), симуляция, 3D-рендер
jobs/       задания и шаги для станка, переворот заготовки перед второй стороной (JobFlip)
ui/         интерфейс Compose: экраны Плата / 3D-модель / Станок / Инструменты, схема переворота (FlipGuide)

Тестовые платы в testdata/: clockblock, mchck, 8bit-mixtape взяты из фикстур проекта tracespace, у каждой своя лицензия (LICENSE в папке). kicad8 и easyeda — синтетические файлы в формате этих программ.

Что можно добавить дальше

  • обработка с 4 сторон на поворотной оси (A = 0/90/180/270°) и цилиндрическая заготовка;
  • выборка меди (rub-out) и V-гравировка текста/логотипов на платах;
  • сверловка отверстий под штифты для двусторонней 3D-обработки (Hole в SRP Player);
  • контурная (Z-level) чистовая, доработка остатков меньшей фрезой, «карандашная» обработка углов (возможности уровня SRP Player Pro);
  • коррекция подачи и оборотов на ходу и очистка буфера станка при «Стоп» по служебному каналу, как у VPanel;
  • импорт DXF/SVG для 2.5D-гравировки.

Лицензия

Код — MIT. Тестовые платы в testdata/ — под своими лицензиями (файл LICENSE в папке каждой).

Roland, MODELA, SRP Player и VPanel — товарные знаки Roland DG Corporation. MillStudio — независимый проект, с Roland DG не связан.

About

Программа для фрезера Roland MDX-40A вместо SRP Player и VPanel: платы из Gerber/Excellon, 3D-модели из STL с обработкой с двух сторон, управление станком по USB. Kotlin + Compose Desktop, Windows.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages