Мне 19. Днем я очный студент‑айтишник, а в остальное время — единственный человек в цеху, кто работает на 15-тонном советском горизонтально‑фрезерном станке ИР-500 1982 года выпуска. Мозги у этого монстра под стать эпохе: древняя японская стойка Fanuc 0-M начала 90-х.

Сам ИР-500 — настоящий танк. По оси Z ездит сразу вся огромная чугунная коробка на рельсах. А когда эта масса разгоняется, пол вибрирует, но сам станок стоит намертво. Он воспринимает дикие нагрузки на минимальных оборотах — как легкую прогулку.
Но есть проблема, передачу файлов через кабель он не поддерживает, CAM‑систему не подключить.
Для меня, привыкшего к созданию 3D‑моделей и визуализации всех траекторий в Fusion360 было непросто адаптироваться.
Мои первые самостоятельные дни были очень болезненными, хотелось просто уволиться, ведь малейшая ошибка и невнимательность здесь — это не упавший сервер, а разнесенная фреза и тиски. Поэтому каждый первый запуск новой программы — это паранойя. Рука на остановке подачи, покадровый режим, минимальные перемещения и подача. И только когда фреза пускала стружку, я выдыхал и выкручивал подачу на максимум.
Пока детали требовали обработки в пару проходов, было все отлично. Но потом..
Началось спагетти из g‑кода
Пошли заказы на глубокое торцевание (или более сложные траектории, но сегодня не об этом), где можно потратить полсмены на написание программы.
Первые трудности появились, когда принесли стальную болванку, с которой нужно снять больше 15 мм металла со всех сторон. Моя торцевая фреза за один проход безопасно берет 4 мм. +деталь широкая, нужно делать несколько проходов по высоте (Y).
Обычные программы для таких деталей превращались в огромные портянки однообразных строк кода, в которых меняются только глубина (Z) и шаг по высоте (Y). Десятки строк унылого хардкода, где ошибиться — плевое дело. У меня были лишь безобидные случаи, забывал минус перед координатой Z и станок послушно резал воздух) Но можно ошибиться серьезнее, испортив тиски за 150 тысяч.
После этого момента я начал копаться в стойке и просторах интернета, чтобы найти способ перестать быть роботом. Я все‑таки учусь на айтишника и здравый смысл мне твердил, что писать хардкод руками — это преступление.
Немножко о стеке 1982 года
Оказалось, что в моей стойке поддерживается полноценное программирование (Custom Macro B), я был поражен, ведь эта функция в те годы стоила заводам приличных денег, ±как хорошая подержанная машина.
Однако не без минусов, по памяти конечно беда, она ограничена килобайтами, много программ не сохранить, приходится удалять старые программы, фоткая их на телефон.
Количество переменных тоже ограничено 33, но главная боль не в этом. Комментарии на этой стойке писать нельзя. Вообще. Любой код превращается в месиво на пузатом экране.
Здесь меня очень выручает Obsidian. В нем у меня лежит всё: бэкапы кода, фото как крепить каждую из заготовок, нули по оси Z для инструментов (многие фрезы живут в постоянных оправках, это экономит время). Там же я храню расшифровки самописных кодов. На стойку текст не выведешь, поэтому телефон стал моим вторым монитором.
Пишу Custom Macro B
Итак, выяснив, что у меня есть макросы, я начал их осваивать. Принцип оказался очень примитивным и ограниченным, есть только 1 цикл и условие IF. Поэтому вместо else приходится использовать много переходов на другие строки командой GOTO.
Быстро освоив это все, я написал универсальный макрос для торцевания и вынес его в отдельную программу.
Теперь основная программа выглядит примерно так:
% O1000; (...) G0 Z50. (SAFE-Z) G65 P9001 X90. Y90. Z-10. D20. Q70. F400. K1.5 H10. I0.; M30 %
G65 — это вызов макроса. Для программиста это обычный вызов функции с передачей аргументов. Буквы стойка автоматически конвертирует в локальные переменные от #1 до #33.
Чтобы было понятнее, вот расшифровка:
P9001 — номер программы, в которой сохранен макрос.
X90. / Y90. — ширина и высота детали в мм.
Z-10. — финальная глубина.
D20. — диаметр фрезы (20 мм).
Q70. — перекрытие прошлого реза в процентах. Фреза будет смещаться на 70% от своего диаметра (14 мм).
F400. — рабочая подача (400 мм/мин).
K1.5 — съем за один проход по Z.
H10. (необязательный) — плоскость безопасности по Z.
I0. (необязательный) — координата нуля детали по оси X.
А вот сам код макроса. В нем есть комментарии в скобках для вас и моей базы в телефоне. На станке крутятся голые цифры.
% O9001; (FACING MACRO-B) N10 (STATE SAVING) #100 = #4003 (G90\91 SAVE) G90 N20 (SANITY CHECKS) IF [#24 EQ #0] GOTO 9901 (X - WIDTH) IF [#25 EQ #0] GOTO 9902 (Y - HEIGHT) IF [#26 EQ #0] GOTO 9903 (Z - DEPTH END) IF [#7 LT 1.] GOTO 9904 (D - CUTTER) IF [#17 LT 1.] GOTO 9905 (Q - STEPOVER) IF [#9 LT 1.] GOTO 9906 (F - FEED) IF [#6 EQ #0] GOTO 9907 (Z - STEP) N30 (INITIALIZATION) IF [#11 NE #0] GOTO 31 #11 = 10. N31 IF [#4 NE #0] GOTO 32 #4 = 0. N32 #8 = [#7 * [#17/100]] (STEPOVER_MATH) #10 = 0. (Z-START) #12 = [[#7 / 2] + 5.] (SAFE-X) #14 = 1. (ZIG-ZAG, 1 - CLIMB) IF [#25 GT #8] GOTO 33 (SINGLE PASS Y) #13 = [#25 / 2] (Y - START) #25 = #13 (Y - END) #22 = #13 (SAVE Y-START) GOTO 40 N33 (MULTI PASS Y) #13 = [#8 - [#7 / 2]] #25 = [#25 - [#7 / 2]] #22 = #13 N40 (MAIN) G0 X[#4 - #12] Y#13; (START_POSITION) Z#11 WHILE [#10 GT #26] DO 1 (CYCLE-Z) #10 = [#10 - #6] IF [#10 GT #26] GOTO 41 #10 = #26 N41 G0 Z#11 Y#13 Z#10 WHILE [#13 LE #25] DO 2 (CYCLE-Y) IF [#14 EQ 1.] GOTO 43 G1 X[#4-#12] F#9 GOTO 44 N43 G1 X[#24+#12+#4] F#9 N44 #14 = -#14 IF [#13 EQ #25] GOTO 49 #13 = [#13+#8] IF [#13 LT #25] GOTO 45 #13 = #25 N45 G0 Y#13; END 2 N49 #13 = #22 (RESTORE Y-START) END 1 N50 (RESTORE) N90 G0 Z#11 G#100 (G90/G91) GOTO 9999 (ERRORS) N9901 M00 (ERR: X - WIDTH) GOTO 9999 N9902 M00 (ERR: Y - HEIGHT) GOTO 9999 N9903 M00 (ERR: Z - DEPTH) GOTO 9999 N9904 M00 (ERR: D - CUTTER) GOTO 9999 N9905 M00 (ERR: Q - STEPOVER) GOTO 9999 N9906 M00 (ERR: F - FEED) GOTO 9999 N9907 M00 (ERR: Z - STEP) N9999 M99 %
Моя логика
Я постарался перенести в G‑код базовые паттерны из программирования.
1) Сохранение состояния
В блоке N10 я читаю системную переменную #4003. Она хранит текущий режим: абсолютный (G90) или инкрементальный (G91). Я сохраняю это значение в глобальную переменную #100, включаю G90 для своих расчетов, а в конце (N90) возвращаю все как было. Если этого не сделать, после выхода из цикла станок может поехать не туда, будет неприятно.
2) Защита от дурака
Блок N20 — это валидация входных данных. В Fanuc пустая переменная равна #0 (аналог null). Если я забыл передать ширину детали (#24), условие IF [#24 EQ #0] сработает и перекинет меня на строку GOTO 9901.
3) Защита от перереза глубины
В начале цикла я вычитаю шаг из текущей глубины, но если глубина не делится на шаг без остатка, то последний проход будет глубже чем нам нужно.
Решение здесь банально: Если результат выше дна (IF [#10 GT #26]), скрипт прыгает на кадр N41 и продолжает резать. Но как только глубина больше, скрипт игнорирует прыжок и жестко приравнивает текущую глубину к финальной: #10 = #26.
4) Вариативность высоты
В блок N30, После тестов кода на граничные условия (код, при значении Y меньше диаметра фрезы, не входил в цикл и тупо включал режим дятла, без перемещений) я добавил проверку IF [#25 GT #8] GOTO 33 — если высота (Y) меньше перекрытия (Q), то иди всегда по центру, без смещений.
В конце программы на строке N9901 стоит команда M00 — безусловный останов. Станок замирает. Я смотрю на экран, вижу, что выполнение остановилось на кадре 9901, открываю Obsidian на телефоне и читаю: «Ага, ошибка 9901 — забыл указать ширину по X».
Вторая частая ошибка на этой стойке — забыть точку. Если написать подачу F400 без точки, станок прочитает это не как 400 мм/мин, а как 400 микрон (0.4 мм/мин). Фреза будет ползти вечность. Поэтому я проверяю значения на < 1.. Задал диаметр фрезы в микронах? Ловлю ошибку 9904.
Также в блоке N30 я задаю некоторые дефолтные значения. Если я не передал начальную координату X или плоскость безопасности Z, макрос сам назначит им нуль и 10 мм соответственно.
Первый запуск и потные ладони
Писать код — одно. Запускать его на 15-тонном куске железа — совсем другое.
Сначала я прогнал макрос через симулятор CIMCO на ноуте. Траектории отрисовались идеально. Но симулятор не учитывает особенности стойки с возможными ошибками.
Поэтому первый запуск на станке был в воздухе, все прошло отлично.
Но на второй, я пошел сразу в бой по хардкору. В шпинделе — 100-миллиметровая сковородка. В тисках — стальная болванка. Включаю покадровый режим (Single Block) — станок выполняет всего по одной строке кода. Левая рука намертво лежит на кнопке удержания подачи (Feed Hold), правая жмет Cycle Start.
Станок с гулом опускается на первый проход. Стружка летит, звук ровный, по координатам идеально. Жму дальше. Цикл отрабатывает шаг по Y, переходит на следующий слой по Z. Математика фиксации дна сработала четко — последний проход снял ровно заданный припуск.
Преимущества подхода
Многие не задумываются, но большинство привычных нам циклов в ЧПУ — от банального сверления G81–G84 до автосмены инструмента через M06 — написаны таким же способом. Поэтому любой, кто освоит макросы — может сам запрограммировать цикл, адаптировав его под свои задачи.
Понятно, что сейчас почти везде есть CAM‑системы. Но чтобы просто подготовить базу и сторцевать пару миллиметров с черновой болванки, идти за компьютер — это лишние 10 минут. Макрос позволяет оператору просто замерить деталь и вбить одну строчку на пульте. И торцеванием это не ограничивается. Вы часто сверлите сетки отверстий или делаете гравировку даты? — это всё можно отдать математике станка, освободив CAM‑программиста для более сложных задач.
И для полного удобства этот вызов можно привязать к кастомному G‑коду через параметры стойки (например, сделать G100 X90...). Тогда для оператора это будет как родной безопасный цикл станка.
Подведем итоги
Раньше на написание программы торцевания для такой детали уходило минут двадцать, а то и полсмены нудного стучания по клавиатуре пульта, руки затекали. Сейчас — 10 секунд. Замерил заготовку, вбил семь параметров в строку G65, нажал зеленую кнопку.
Сама стойка Fanuc 0-M старше меня на двадцать с лишним лет. В ней нет CAM‑системы, нет графики, нет даже комментариев. Но логика программирования везде одинакова. Если есть переменные, циклы и операторы, то легко заставить поумнеть даже советский фрезерный танк. Дерзайте, парни.
На этом всё. Это мой первый макрос, поэтому судите строго и тыкайте в ошибки, буду этому рад. Также буду рад ответить на все вопросы по коду и режимам резания в комментариях.
Комментарии (109)

CitizenOfDreams
26.08.2026 16:00Но есть проблема, передачу файлов через кабель он не поддерживает, CAM‑систему не подключить.
Перфоленточного или еще какого интерфейса у него нет? Не набивали же программы каждый раз с клавиатуры в 1982 году.

Hafeg Автор
26.08.2026 16:00Интерфейс RS-232 есть, но на моем станке он мертв( А памяти на самой стойке пара десятков килобайт. Даже если бы порт работал, закинуть туда нормальную 3D-траекторию из CAM не вышло бы — память забьется мгновенно, нужно настраивать капельное чтение. А так как руководству это не нужно, приходится выкручиваться макросами и вбивать переменные руками. Кстати, в плане простых, повторяющихся операций, макросы мне показались даже лучшей альтернативой CAM!

CitizenOfDreams
26.08.2026 16:00Интерфейс RS-232 есть, но на моем станке он мертв
В смысле физически выгорел? Тогда паяльник в руки, найти на плате микросхему драйвера/ресивера (что там обычно ставили в 1982 году? SN75188/189 тогда уже были?) и поменять.

kuza2000
26.08.2026 16:00Не дадут студенту туда с паяльником лезть. Работает - не трогай! Тем более, вон какой смышлёный студент попался, макросы освоил! Как хорошо дело пошло, лучше и не надо! Лучшее - враг хорошего! )

Markscheider
26.08.2026 16:00Вот вот. Тем более, что
руководству это не нужно
Надеюсь, этот пассаж не доставит автору проблем и руководство не читает Хабр

EvilBeaver
26.08.2026 16:00Тут наверное неправильно вводить в уравнение "злое равнодушное руководство". Руководству "это" не нужно, "это" - что? Потратить время на потенциальное убийство работающего станка, ради прокачки скиллов способного студента? Ну да, я понимаю руководство. И студента понимаю, но станок сломанный вообще не починить, а со студентом еще можно договориться не трогать станок.

CitizenOfDreams
26.08.2026 16:00потенциальное убийство работающего станка, ради прокачки скиллов способного студента?
Ну так оно и так уже происходит. Если студент ошибется в макросе и станок сделает себе судоку, то оживлять его тоже будет долго и дорого.

P1ngZer0
26.08.2026 16:00Начальство скорее удавится, чем пустит стажера с паяльником к стойке. Запоротая плата фанука стоит как почка этого студента

Komrus
26.08.2026 16:00Надеюсь, Вы понимаете риски и стоимость ошибки при перепайке выгоревшей (и не критически важной для работы системы в целом) микросхемы?
Сколько будет стоить заменить вылетевшую плату у Fanuc ? И удастся ли её найти?Или - сколько стоит адаптировать современный пром.контроллер к этому станку?

ksbes
26.08.2026 16:00Или - сколько стоит адаптировать современный пром.контроллер к этому станку?
Там от простоя станка будет больше убытков чем цена работ (там миллион-другой максимум - это о-малое от оборота для такого производства). “Простой” - это самый страшный жупел производстенника (“заказы - все уже расписаны, сроки, сроки сдвигать нельзя!!! А-а-а-а!!!”). Поэтому пока станок не встанет никто и не почешется.

P1ngZer0
26.08.2026 16:00Цена простоя всегда кроет цену ремонта, это ж база) Пока из шпинделя дым не пойдет, бюджет на апгрейд никто не согласует)

RTFM13
26.08.2026 16:00Торцевать болванки вам может любой дядя ваня на ручном станке. По крайней мере перебиться на время ремонта на стороне можно. Обычно на производствах таких контактов навалом.
Впрочем, нормальный обрабатывающий центр из него всё равно не сделать, по этому никакие апгрейды большой погоды не сделают.

Komrus
26.08.2026 16:00миллион-другой максимум - это о-малое
Как показывает опыт общения с эксплуатантами - "О-малое" оно в процессе строительства. Когда инвестиции широкой рекой текут и на фоне общей стоимости создания Объекта, "миллион-другой" - действительно не особо заметен.
А вот в процессе эксплуатации уже существующего объекта обосновать выделение этого самого "миллиона" (а тем паче - "другого" :) - этот тот ещё квест...
ksbes
26.08.2026 16:00Обоснование затрат - это квест независимо от объёмов. Даже новые трекболы на 100 тыс для производства обосновать - квест. Знаю случай когда админ “билися” за новые патчкорды - десяток на пару тысяч (человек просто пошёл не принцип - не покупать самому). Чуть до гендира не дошёл - заму всё же стало стыдно.

khomenkoev
26.08.2026 16:00Круто, больше зрелища бы - фото,да на отечественную платформу видео)
Вспоминая школьные годы, когда на уроках труда можно было за раз выточить подсвечник и ножки для стула.

Hafeg Автор
26.08.2026 16:00Спасибо! На самом деле, эта статья — мой прощальный памятник этому станку. Я как раз увольняюсь, чтобы двигаться дальше. ИР-500 дал мне отличную суровую базу, но пора идти вперед. И спасибо за совет, в свои будущие статья обязательно добавлю больше зрелища!!

dimone73
26.08.2026 16:00Очень подкупает язык от первого лица. Обычно комментарии к коду или просто описание, да даже диссертации пишут от третьего "мы делаем, умножаем...".
На счёт этого учительница русского ещё в пятом классе четко подкадюлывала "кто это мы и сколько нас?".
Не вы же со станком....Тут же четко: задал, хранит, читает.
Слышал правдоподобную байку, что описания программ и хелпы заставляют писать кодеров, а они этого жутко не любят (чё писать, и так всё ясно).

sintech
26.08.2026 16:00"мы делаем" это все равно от первого лица только во множественном числе.
От третьего это "они делают".В диссертациях обычно используется пассивный залог "было сделано".

dimone73
26.08.2026 16:00Но я почитывал у некоторых "мы будем рассматривать...", "сделаем..", "умножим.." и т.д. типа из учебника, но в диссертации.
Про лица - все верно. Это я "забыл алфавит, падежей припомнил только два".

Yuriy_krd
26.08.2026 16:00Ну, сейчас уже, в большинстве случаев, можно смело употреблять "мы"... И отвечать учительнице: "я и ИИ" :)

Kogolbok
26.08.2026 16:00Ох уж этот Fanuc 0-m... G65... Помним. Скорбим.
Про неработающий rs232 отдельная боль. Я на своём восстанавливал. И оказалось... Оказалось, что внутри самого гнезда небыло контакта. Поменял и заработало. Мне повезло. И работал даже на dreep feeding через minicom. А для Freecad писал постпроцессор, который в CAM модуле для меня делал всю магию. Но всё давно ушло. И поделиться не могу.

inakrin
26.08.2026 16:00Почему не заменить контроллер на более современный? Grbl думаю для завода не лучший вариант, но в grbl прошивке например, можно откалибровать любую ось и сконвертировать pwm в милиметры(это если новый контроллер не те частоты выдаёт например по умолчанию). Вот только что собрал домашний станочек на grbl. Плата контроллера просто отправляет gcode, а вся логика на ноуте, где что угодно можно на любом языке и в любом cad.

CitizenOfDreams
26.08.2026 16:00Блин, ну только не GRBL. Вот в упор не понимаю любовь самодельщиков к этому нелепому уродцу. Да Mach3 на старом компе с параллельным портом и то была лучше в свое время. А уж для настоящего железного станка можно за разумные деньги купить настоящий железный контроллер, хотя бы тот же Syntec.

SGordon123
26.08.2026 16:00не понял про отсутстве комментов, а что такое в скобках? И про else не понятно, поменяй в IF условие, зачем GOTO?

Sloop
26.08.2026 16:00"А вот сам код макроса. В нем есть комментарии в скобках для вас и моей базы в телефоне. На станке крутятся голые цифры."
Автор ведь написал про комментарии

Kogolbok
26.08.2026 16:00На тех фануках нельзя было писать комментарии. И вообще куча ограничений.
А вообще не могу понять, мне казалось и математические функции там были через подпрограммы, а не просто в выражении. Это автор упростил для нас? Или у меня были ещё более примитивные фануки? Или что-то с моим блоком памяти? Если автор отпишется, буду благодарен.

Hafeg Автор
26.08.2026 16:00Дело в купленных опциях самой стойки. У меня на станке полный фарш, куплен Custom Macro B, он позволяет писать нормальные математические выражения прямо в квадратных скобках и использовать некоторые функции типа SIN/COS.
А на ваших станках, видимо, был открыт только базовый Macro A. Там да, даже математику нормально писать нельзя... Фанук очень любил продавать базовые функции за отдельные, не малые деньги. Придумали
микрогигатранзакции задолго до игр)

BobbieZi
26.08.2026 16:00Там должен быть ридер с перфоленты. так вот, сигнал там TTL и прекрасно эмулируется на микроконтроллере. А далее ставится какой-нибудь распбери пи и удаленно через сеть с любимого фьюжна кидаются ж-коды на распи, а далее станок просто исполняет ж-код как бы с ленты. :)

ksbes
26.08.2026 16:00Там если курочить - то по-крупному. На круг - проще, дешевле и надёжнее будет сделать новую управляющую плату, которая непосредственно выдаёт сигналы на исполнительные механизмы (контролёры моторов и т.п.). И программы соответственно хоть на питоне хоть прямо из КАДа какого-нибудь. Это, если что, реальный опыт - управление “старым” станком из МАТЛАБа .

Hafeg Автор
26.08.2026 16:00Ого , идеи просто огонь!
BobbieZi7, эмуляция перфоленты через Raspberry Pi — отличная идея. Хоть изредка и ковыряюсь с платками, но в голову такое не приходило. Дешево и сердито.
ksbes, а вот полная замена мозгов — полнейший хардкор, от прочтения страшно стало) Для лаборатории — мечта. Но из цеха вырвать родной ПЛК (электроавтоматику, смену инструмента, смазку) — это остановить станок на полгода. Директор меня вместе с этим Raspberry Pi в шпиндель зажмет за такие простои)

ksbes
26.08.2026 16:00Если директор умный и может заставить бухгалтера правильно подсчитать - то он эти полгода даст. Тем более что там именно останова будет мало - основная работа (исследование, разработка, испытания на макете) - идут без останова производства (или с очень короткими)
ЕСЛИ
Новые современные мозги могут дать довольно много экономии в долгой перспективе. Даже если по-началу не задваться оптимизациями. А оптимизации потом обязятельно попрут - т.к. делать их станет элементарно.

Hafeg Автор
26.08.2026 16:00Звучит очень интересно и сложно... К сожалению, в этом цеху горизонт планирования — "вчера") Но из интереса, поизучаю эту тему, спасибо!

GlennMiller1991
26.08.2026 16:00Ээх, когда-то готовился к Atomskills, и писал на стойке всё, вплоть до уклона по криволинейной траектории сферической фрезой. Но на соревнованиях всё равно тиски отфрезеровал при обычном торцевании)

Hafeg Автор
26.08.2026 16:00Ничего себе, AtomSkills — очень мощно! Писать 3D прямо со стойки через макросы — мое искреннее почтение, это высший пилотаж математики в голове, надеюсь дойду до такого уровня!
А про тиски... Классика жанра, на самом простом всё идёт не так(

scrllock
26.08.2026 16:00Здесь хорошо видна разница между инструкцией и ограничением.
Пока оператор должен помнить про знак, точку, глубину и параметры, результат зависит от его внимания. Когда эти требования превращаются в проверки и принудительные остановки, часть работы просто перестает требовать внимания человека.
Автоматизация здесь экономит не только время, а уменьшает количество ситуаций, в которых вообще можно ошибиться.

P1ngZer0
26.08.2026 16:00Хорошо что сваливаешь с этого завода, пока тебя не сделали главным по тарелочкам. Теперь этот G-код станет местным священным писанием. Следующий наладчик будет бояться даже дышать на твой макрос

UFO_01
26.08.2026 16:00О да, мой любимый тип мазохистского удовольствия. Когда видишь чужой код непонятно что делающий, как и зачем написанный, а тебе в него надо внести какие-то правки. Выживших нет, разумной жизни не наблюдается, как и остатков жизнедеятельности автора этого кода, помимо самого кода. Даже время в такие моменты замедляется, 20 минут работы превращаются в увлекательное приключение на 2 месяца с непредвиденными последствиями и неожиданными решениями.

CitizenOfDreams
26.08.2026 16:00О да, мой любимый тип мазохистского удовольствия. Когда видишь чужой код непонятно что делающий, как и зачем написанный, а тебе в него надо внести какие-то правки.
А код к тому же написан на немецком, которым ты не владеешь. И словарь не особо помогает, потому что названия переменных сокращены до чего-то вроде "LsDbOden". И вообще ты этот TwinCAT впервые в жизни видишь и смутно понимаешь, какой пункт меню сделает то, что тебе нужно, а какой обнулит PLC к чертям кошачьим.

ksbes
26.08.2026 16:00Я как то разбирал код написанный французами, дорабатывавщийся индусами и с дписанными дополнительными модулями китайцами: переменные и классы иероглифами в перемушку с комментариями на индусском французском - обожаю! (и гугл переводчик тогда был не сильно менее смешной чем ПРОМТ)

st1373
26.08.2026 16:00Я видел код с комментариями написанные на русском ... в трех разных кодировках в одном файле, так и живём

UFO_01
26.08.2026 16:00Ещё из прикольного когда вперемешку английский и транслит с путающими названиями. Что-то в духе CurrentUsilSvoy, нет, это не коэффициент усиления тока, это усиленный перед измерением ток. Ещё люблю макросы в которых меняется глобально объявленная переменная, хочешь использовать макрос в другом месте - делай extern (из сишный будней, ибо не одним плк едины). Или когда открываешь проект, а там список extern-ов на 1000 строк. В каждом файле, список минимум из 500 extern. В такие минуты трудно понять, где заканчивается реальность и начинается мечта.

Hafeg Автор
26.08.2026 16:00О да) Надеюсь, следующий наладчик не будет поминать меня недобрым словом)

InsiderCrush
26.08.2026 16:00Почитал статью. Очень интересно! Сразу скажу - я не эксперт вообще. Но у меня родилась идея. Почитай. Может что годным окажется. Суть - вместо того чтобы пытаться впихнуть логику в ограниченную память этой Фанук можно построить внешний параметрический интерпретатор. Прога на ноуте или твоем смартфоне, которая хранит базу шаблонов и макросов неограниченного объёма. Ты забиваешь туда размеры заготовки, инструмент и режимы — интерпретатор по этим данным собирает готовую управляющую программу или короткий вызов G65 с нужными аргументами. Эта програ не эмулирует станок, а генерирует для него команды, точно так же, ка ты сейчас дешаешь вручную в голове и на пульте, но автоматизировано, с проверками, тестами и гипотетическими прогонами холостыми. То есть ты испольхуешь тольк же канал доставки, что и сейчас убрав рутины и ошибоки. Все доки, комменты и логика работы хранятся внутри интерпретатора. Это будет полноценный наследуемый гайд для следующих наладчиков которые не будут орать "что тут поналяпано" и не придётся разбираться в голых цифрах чужого макроса. Очевидные плюсы - внешняя память. Не ограничена килобайтами стойки. Можно хранить миллиарды шаблонов, таблицы режимов резания, фотки креплений и пояснения для каждого шага и операции. Безопасность - ты подгоняешь и уточняешь все параметры до попадания в станок. интерпретатор не даст сгенерировать код с пропущенным минусом, нулевой подачей ну и какие там можно ошибки еще допустить? я их не знаю. Наследуемость - следующий наладчик получает не священный макрос, а твою понятную логику и твой понятный механизм исполнения. И где что за что отвечает и какие значения по умолчанию. Никакого вмешательства в железо. Не нужно лезть в стойку паяльником, менять платы или согласовывать апгрейд с руководством. Ты вообще не лезешь в него. Станок остаётся в заводской конфигурации. Единственный минус доставка кода по-прежнему требует ручного ввода с пульта. Но перепечатать готовую, проверенную программу из интерпретатора надежнее и быстрее чем каждый раз собирать логику обработки с нуля. Было бы круто получить от тебя фидбек по моей идее

Hafeg Автор
26.08.2026 16:00Идея супер! По сути, самописный мини-CAM в кармане получается) Я частично так и делаю — храню полную технологию для каждой детали в Obsidian на телефоне. Но, конечно, остается проблема ручного ввода. Даже если прога на телефоне выдаст мне идеальную готовую строку, вбивать ее руками — это всё еще риск опечатки. Прозевал и пропустил точку — и привет. Поэтому я постарался побольше математики зашить внутрь стойки, чтобы с пульта вводить только голые габариты с чертежа. Меньше кнопок нажал — чуть менее тревожно сидишь)

noldo
26.08.2026 16:00с похожей ерундой(станок вроде чпу и с программами и кнопками, но ушатаный и без доков и с паяльником врываца в бандуру за уйму денег такое себе предприятие, а настроек вагон, каждая деталь - целая олимпиада по математике и тд) ...решил вопрос внешним софтом, приложение с пачкой калькуляторов и вбитыми типа макросами...затыкал цифарки с чертежа, тык, готовые настройки и весь компот кто куда кого сверлит, выплевывает и тд

Devastator82
26.08.2026 16:00писать хардкод руками — это преступление.
Эмбеддеры печально вздохнули
За статью спасибо!

ksbes
26.08.2026 16:00Даже у эмбедеров обычно есть возможность вывести хардкод в тот или иной вид конфигурации хотя бы для условной компиляции. Чтоб порты потом не переименовывать по всему коду в тысяче мест при переезде на проапгрейженную плату. И обратно.
Хотя да, в DIY этим редко заморачиваются.

UFO_01
26.08.2026 16:00А вы уверены что только в DIY :)
То что я видел во вполне себе активно работающих проектах, даже не то что из 90-х, из 00-х и 10-х, там разработчикам впору у DIY-щиков учиться. Такое бывает когда человек вообще не разработчик, но в домене хорошо разбирается.

pistoletov
26.08.2026 16:00Перспективная тема ловить звуковые аномалии и останавливаться. Правда очень не завидую отладке этого процесса... Или писать все с контактных микрофонов потом анализировать

RTFM13
26.08.2026 16:00Ага, 256 раз убить шпиндель чтобы научить нейронку распознавать убитый шпиндель. Кстати, чтобы что?
Впрочем, я давно перестал удивляться всякому.

pistoletov
26.08.2026 16:00Да нейронка и не обязательна. Фурье достаточно думаю. Просто собирать данные для анализа. Специально убивать точно не стоит

UFO_01
26.08.2026 16:00Не, Фурье там хватит максимум на то, чтобы понять физику процесса и собрать данные для анализа. Если мы говорим о какой-то автоматизации, то наверное больше подойдёт кепстральный анализ и сравнение с эталоном. И угрохаем мы на это кучу времени, зато кандидатскую закрыть можно.

RTFM13
26.08.2026 16:00Задача уже давно и качественно решена другими гораздо более надёжными способами.
Вместо того чтобы детектить "аномалии" их заранее предупреждают и избегают самыми разными сособами.

UFO_01
26.08.2026 16:00Это я знаю. Я поэтому и говорю про кандидатскую, потому что академические изыскания и реальное производство вещи несколько разные.

RTFM13
26.08.2026 16:00Академические изыскания в прикладных сферах вроде подразумевают потенциальную пользу хотябы номинально.

UFO_01
26.08.2026 16:00Не ну как, в подобных изысканиях (даже в этом) польза номинально есть, но вот реально ли применить результаты вопрос другой. Как бы и по построению мажоритарных систем до сих пор проводят исследования, но все почему-то используют просто дублирование. Да и надо всё-таки разделять кто проводит исследование - технологи с завода или университеты, потому что в последних зачастую исследование ради исследования.

RTFM13
26.08.2026 16:00За 10 лет на небольшом парке станков при мне шпиндель был убит ровно 1 раз и то его можно было легко избежать. Останов по звуку там не помог бы никак. Т.е. до момента столкновения все звуки были идеальные.
Не говоря о том, что ложный останов это часто запоротая деталь.

UFO_01
26.08.2026 16:00Ну, многое из того что не различает человек ухо, вполне можно отследить математическими методами. Да, экономическая целесообразность около нулевая. Разве что для удовлетворения желания заняться какой-то сложной фигнёй потому что круто. Плюс у каждой системы распознавания есть ошибки. Если принять ложноположительную ошибку в 0.1%, станок производит ну скажем 8 деталей в сутки, получим брак каждые 4 месяца что как бы много.

RTFM13
26.08.2026 16:00Единственное что полезного может сделать нейронка постфактум - это определить степень нормального износа инструмента. Но во-первых с этим справляется калибратор. А во-вторых делать это надо не по звуку, а по картинке с микроскопа. И если бы это было целесообразно лидеры рынка бы давно внедрили.

UFO_01
26.08.2026 16:00Не, я даже не про нейронку говорю, у этих точность дай бог 90%, а если идёт различение звуков, в лучшем случае 80% (лично убеждался в универе в своё время). Вы мне кстати напомнили одно выступление где студенты грозились на основе статистики предсказывать степень износа составов и вагонов для диагностики на основе статистических данных с участка.

grt_pretender
26.08.2026 16:00Можно спокойно нанять саунд-дизайнера и получить от него готовый синтезированный аудиодатасет с нужными звуками. А потом дообучить.

UFO_01
26.08.2026 16:00Использовать примерно похожие на правду обучающие данные чтобы получить примерно похожий на правду результат. Гениально. Причём хочу заметить, примерно похожие для человеческого уха данные, а его характеристика нелинейная.

grt_pretender
26.08.2026 16:00Можно в процессе проверить по известным мелграммам. Способов масса.
Не все можно качественно записать. Не все безопасно записывать. Не на все есть бюджет или время. Иногда людям нужны компромиссы.
Иногда - лишний способ показать, как они умны. Ну, ок)

UFO_01
26.08.2026 16:00MFCC можно использовать, но тут тоже есть проблема при разложении звука на субполосы - резкие всплески, особенно если они попадают на края окна, это даёт отклик по всем частотам. Точности выше 80% добиться нереально, поверьте мне, я пробовал. Как минимум потому что у человеческого уха точность тоже 75-80%.
Когда дело касается денег и безопасности, компромиссы могут быть только в методах достижения требуемого уровня точности. Сам уровень неизменен.
Не ну а что, вот когда человек красивый, сразу видно. А что умный не поймёшь пока рот не откроет. А свои выгодные стороны надо подчёркивать :)

Moog_Prodigy
26.08.2026 16:00Вот насчет запрета влезать в станок, сразу напрашивается такая конструкция. Обьемная, из алюминиевого профиля, по сути повторяющая проект 3018, только с увеличенными габаритами. По XY ездит каретка, и по Z координате специальным пластмассовым пальцем оно будет само натыкивать программу любой сложности. Пришел на смену, поставил конструкцию на стойку, ушел курить на 20 минут, а оно пусть набивает код. Конструкция не изменяет схему станка и вообще никак с ним не взаимодействует, кроме физического нажимания кнопок.
Я это к чему. У меня по работе тоже такие решения бывают. Операторы некоторой установки захотели ее автоматизировать (не чпу станок а скорее огромный шкаф с кнопками и не один), ну а я соответственно рассматривал это предложение со всех ракурсов поскольку эту установку обслуживаю я. В чем беда - при работе с установкой нужно повторять буквально сотни нажатий кнопок, и операторы задалбывались. Они предложили на каждую значимую кнопку параллельно поставить маленькое реле, а этими реле рулить уже с ардуинки по скрипту. Решение с реле вполне красивое, но это вмешательство в схему, а поскольку установка хитрая и со своими приколами, то я запретил это делать, т.к. случись что это я буду бегать с горящей...в общем с воспламененными штанами. Предложил им вариант другой - раз вы такие прошаренные ардуинщики, сделайте физические кнопконажималки, которые будут примагничиваться на шкаф когда вам надо, а не надо - отлепили и сложили в ящик. Ну они и сделали на 15 сервах такие "нажималки", по нажималке на кнопку. Сами написали себе скрипты, красота, оно реально работает. Изменений в конструкции не внесено. Ответственность полностью лежит за пределами физических кнопок на операторе. Поработал, не нужно более - снял и убрал. Костыль, но практически единственно допустимый в ситуации, когда внутрь нельзя лазить. А для клавиатуры древнего ЧПУ я бы порекомендовал координатную систему.

ksbes
26.08.2026 16:00А на всяких западах и востоках, говорят, человекоподобные роботы таким занимаются! “Нас не победить!” )))
Мы делали нечто похоже. Но у нас и проще и научнее: световое перо, камера (да не простая, а 120 fps - чтобы следить за лучём), распознование и специальная контактная площадка для пера, которая в нужный момент давала импульс.
Слышал(но не видел) про накладку на трекбол …

Hafeg Автор
26.08.2026 16:00Вау, гениальный костыль! Представил картину: ЧПУ станок, который управляется другим самодельным ЧПУ станком, матрешка автоматизации!) Для закрытых систем — решение топ. Но боюсь, если бы мой директор увидел, как робот-палец тыкает в Фанук, пока я пью кофе, у него случился бы инфаркт)

pistoletov
26.08.2026 16:00Чтоб порты потом не переименовывать по всему коду в тысяче мест при переезде на проапгрейженную плату. И обратно.
Ну для этого код писать нужно платформонезависимый. Так называемый слой hal

vesowoma
Сразу не понял откуда на советском станке
корейскаяяпонская система FANUC. Но 1982 это все же наверное не год выпуска системы управления, а год выпуска оригинального станка. Делали мне детальки на ИР-800, там Маяк уже был кажется.Hafeg Автор
Привет! И правда, с Кореей я затупил) На заводе начальник байку пустил, а я и поверил.. Fanuc конечно япония.
А 1982 год действительно год рождения самого чугуна. Родные советские мозги прошлый наладчик давно поменял. И слава богу, потому что писать макросы на перфолентах я бы точно не осилил)
Наш 500-й по сравнению со зверем 800-м просто малыш) Спасибо за внимательность!
sim2q
Зато I/O доступен, а из статьи не понятно, что у вас с этим кроме кнопок и "пузатого экрана" - ЭЛТ ? фото бы не помешало, а то гуглится красивое LCD
Hafeg Автор
Физически порт RS-232 есть. Но на этом станке он давно мертв( Начальству восстанавливать линию невыгодно, “и так же работает”. Поэтому пульт — единственное спасение… А насчет экрана, корпус там родной, огромный и пузатый (от старой ЭЛТ). Но сама трубка давно выгорела, и вместо нее внутрь вколхозили LCD.
kuza2000
Там именно rs-232, без развязки? Если да - то не удивительно, что мертв. В условиях производства они сгорают как спички. Есть с гальванической развязкой, с трансформатором на входе, вот они-живучие. Называются по другому, хотя временные диаграммы как у rs232. Сам физический интерфейс другой.
Hafeg Автор
vbifkol
Ставили. У меня на токарном Ивановце был фанук, вся электрика Сименс, главный шпиндель тоже немецкий, роликовые направляли хайвин - крч, советский только чугун. И на одном из первых 16к20ф30 тоже, причем на нем был а стойка фанук, а привода болгарские. На портальном фрезере тех годов видел бошевскую стойку. Интернационал однако.
Hafeg Автор
О да, советский чугун реально неубиваемый, станины льют на века. Поэтому модернизация таких монстров хорошими мозгами лучшее, что с ними могло случиться!
Evgenisav
Да, там единственное что может сломаться это фундамент, или сам цех рухнет
bkar
Оказалось проще снести страну, чем сковырнуть такой станок. : (
vbifkol
Нет. Лить не умели, качество металла тоже так себе. Я видел лопнувшую станину шестишпиндельного - дефект литья. Повторить немецкий VDF 20х годов у страны советов не получалось, станина лопалась. Пришлось вдвое увеличить толщину, тогда получился ДИП200/1Д62/1А62/1K62/16К20
RTFM13
Советские станины любят самодельщики за то, что они отлежались 50+ лет и их уже ведёт не так сильно как новые по тем же технологиям. На этом их плюсы заканчиваются.
А так подтверждаю, в нулевых кто-то из крупных типа DMG пытался локализовывать обрабатывающие центры, литьё оказалось ни в какие ворота. А строить с нуля нормальную литейку затея не из дешевых. Не знаю чем кончилось, но вроде что-то они потом производили.