ООО «СинкТвин Технологии» +7 925 353-56-35 info@synctwin.ru

Программы-примеры пород

У каждой породы есть программа, которую человек видит первой, — и та же программа идёт входом приёмочного сценария: создать станок → preflight → запуск → база → отправка → пин HAL. Пример обязан проходить чисто; ожидание записано числами до прогона. 20 пород, своя программа у 19 пород, остальные работают «как фрезер».

Список станков: карточки всех пород
Список станков /machines: по карточке на породу, зрелость — бейджем.
породапрограммародболванка, ммсменыслово Sконечная позазрелость
mill-xyz торцовка (общая: торцовка) cut 40 × 30 × 10 T9 → T4 12000 — серийный
mill-5axis-trunnion три грани за один установ cut 40 × 30 × 10 T9 → T4 → T4 12000 B = 90 · C = 90 бета
mill-5axis-head плита: косые отверстия по кругу и скос кромок cut 100 × 80 × 30 T9 → T4 → T4 → T4 → T4 → T9 → T9 → T9 → T9 12000 B = -20 · C = -270 бета
lathe-2axis вал из прутка cut 20 × 20 × 40 T1 → T2 → T3 1200 — бета
laser-plotter раскрой лучом cut 40 × 30 × 10 стола нет 30 X = 4.9 · Y = 4.9 бета
robot-kr16 перекладка A→B motion 40 × 30 × 10 стола нет не пишется — R&D
kuka-welder прямой шов 300 мм motion 40 × 30 × 10 стола нет не пишется — R&D
kuka-welder-positioner кольцевой шов: стол крутит, горелка стоит motion — стола нет не пишется — R&D
robot-hexapod обход с наклоном платформы motion 40 × 30 × 10 стола нет не пишется X = 0 · Y = 0 · Z = 450 R&D
robot-linear-delta контур дельтой cut 40 × 30 × 10 T9 12000 X = 2 · Y = 2 · Z = 5 R&D
robot-tripod наклоны головки motion 40 × 30 × 10 стола нет не пишется Z = -10 R&D
wire-edm контур проволокой cut 40 × 30 × 10 стола нет не пишется X = 4.855 · Y = 4.855 · Z = 5 R&D
kuka-welder-ring Кольцевой шов на стыке труб (KUKA): максимальная дуга motion 40 × 30 × 10 стола нет не пишется — —
robot-kr16-transfer перекладка A→B глаголом transfer motion 40 × 30 × 10 стола нет не пишется — —
robot-kr16-flip переворот детали на месте (рецепт flip) motion 40 × 30 × 10 стола нет не пишется — —
mill-xyz+gripper перекладка тиски → паллета motion 40 × 30 × 10 стола нет не пишется — —
trivkins-twin кольцевой шов на позиционере motion 40 × 30 × 10 стола нет не пишется A = 360 —
mill-xyz+dispenser валик герметика по контуру motion 100 × 60 × 20 стола нет не пишется — —
mill-5axis-head+welder шов с наклоном головы 150 мм motion 40 × 30 × 10 стола нет не пишется B = 0 · C = 0 —
kuka-welder-positioner-seam продольный шов: деталь повёрнута столом motion — стола нет не пишется — —

«Стола нет» — у головы без стола инструментов (проволока, луч, схват) смены быть не должно; «не пишется» — порода не печатает слово S, и требовать его значило бы врать про станок. Конечная поза — где обязан оказаться инструмент по окончании программы: так проверяется доезд замысла до железа у пород без шпинделя.

R&D — кинематика работает на виртуальных осях, на живом железе не проверена. Матрица пород — треугольник, а не квадрат: станок с большими возможностями обязан исполнять примеры менее требовательных.

mill-xyz · серийный

Фрезер XYZ (3 оси): торцовка

stock(40, 30, 10);
face({ depth: 0.4, tool: T9 });
drill({ points: [[10, 10], [30, 20]], depth: 3, tool: T4 });
шагоперациядвижокслот · Øпараметры
1 Торцовка 0.8 мм python_face T9 · Ø6 depth_mm · path_tolerance_mm · rect · rpm · step_down · step_over · tool_diameter
2 Сверловка Ø6.8 python_drill T4 · Ø6.8 depth_mm · path_tolerance_mm · peck_mm · points · rpm
mill-5axis-trunnion · бета

Mill 5-axis trunnion (XYZBC, EtherCAT): три грани за один установ

stock(40, 30, 10);
face({ depth: 0.4, tool: T9 }); // в нуле ориентации: верх детали
index({ b: 90 });              // боковая грань — под инструмент
drill({ points: [[10, 5]], depth: 3, tool: T4 });   // боковая грань
index({ b: 90, c: 90 });       // та же поза, повёрнута вокруг Z
drill({ points: [[8, 5]], depth: 3, tool: T4 });    // соседняя грань

Паспорт экземпляра при создании станка: {"z_travel_mm":200,"trunnion_rot_point_z_mm":-218}.

шагоперациядвижокслот · Øпараметры
1 Торцовка верха python_face T9 · Ø6 depth_mm · path_tolerance_mm · rect · rpm · step_down · step_over · tool_diameter · work_orientation
2 Отверстие в боковой грани python_drill T4 · Ø6.8 depth_mm · path_tolerance_mm · peck_mm · points · rpm · work_orientation
3 Отверстие в соседней грани python_drill T4 · Ø6.8 depth_mm · path_tolerance_mm · peck_mm · points · rpm · work_orientation
mill-5axis-head · бета

Mill 5-axis head-head (XYZBC, EtherCAT): плита: косые отверстия по кругу и скос кромок

stock(100, 80, 30);
face({ depth: 0.4, tool: T9 });   // верх детали, голова прямо (B0)
// Косые отверстия Ø6.8 по окружности R25: голова наклонена на 20°, поворот C — по кругу.
// Точки — в кадре грани index(B, C); глубина = воздух до наклонной
// поверхности входа + ход в металле по оси сверла.
index({ b: 20, c: 0 }); drill({ points: [[33.753, 40]], depth: 16.551, tool: T4 });  // вход (25, 40) детали, 8.551 мм воздуха + 8 по оси
index({ b: 20, c: 90 }); drill({ points: [[24.356, 50]], depth: 13.13, tool: T4 });  // вход (50, 65) детали, 5.13 мм воздуха + 8 по оси
index({ b: 20, c: 180 }); drill({ points: [[33.753, 40]], depth: 16.551, tool: T4 });  // вход (75, 40) детали, 8.551 мм воздуха + 8 по оси
index({ b: 20, c: 270 }); drill({ points: [[24.356, 50]], depth: 13.13, tool: T4 });  // вход (50, 15) детали, 5.13 мм воздуха + 8 по оси
// Скос 20° верхней кромки по РЕАЛЬНЫМ рёбрам болванки — те же четыре позы, фреза Ø6.
index({ b: 20, c: 0 }); chamfer({ polygon: [[12.049, -3.0], [12.049, 83.0], [-20.0, 83.0], [-20.0, -3.0]], size: 1.5, tool: T9 });  // ребро (0,0)→(0,80) детали
index({ b: 20, c: 90 }); chamfer({ polygon: [[12.049, -3.0], [12.049, 103.0], [-20.0, 103.0], [-20.0, -3.0]], size: 1.5, tool: T9 });  // ребро (0,80)→(100,80) детали
index({ b: 20, c: 180 }); chamfer({ polygon: [[12.049, -3.0], [12.049, 83.0], [-20.0, 83.0], [-20.0, -3.0]], size: 1.5, tool: T9 });  // ребро (100,80)→(100,0) детали
index({ b: 20, c: 270 }); chamfer({ polygon: [[12.049, -3.0], [12.049, 103.0], [-20.0, 103.0], [-20.0, -3.0]], size: 1.5, tool: T9 });  // ребро (100,0)→(0,0) детали
шагоперациядвижокслот · Øпараметры
1 Торцовка верха python_face T9 · Ø6 depth_mm · path_tolerance_mm · rect · rpm · step_down · step_over · tool_diameter · work_orientation
2 Косое отверстие Ø6.8 (B20 C0) python_drill T4 · Ø6.8 depth_mm · path_tolerance_mm · peck_mm · points · rpm · work_orientation
3 Косое отверстие Ø6.8 (B20 C90) python_drill T4 · Ø6.8 depth_mm · path_tolerance_mm · peck_mm · points · rpm · work_orientation
4 Косое отверстие Ø6.8 (B20 C180) python_drill T4 · Ø6.8 depth_mm · path_tolerance_mm · peck_mm · points · rpm · work_orientation
5 Косое отверстие Ø6.8 (B20 C270) python_drill T4 · Ø6.8 depth_mm · path_tolerance_mm · peck_mm · points · rpm · work_orientation
6 Скос кромки 20° (B20 C0) python_chamfer T9 · Ø6 depth_mm · edges · path_tolerance_mm · polygon · rpm · tool_diameter · vbit_angle · work_orientation
7 Скос кромки 20° (B20 C90) python_chamfer T9 · Ø6 depth_mm · edges · path_tolerance_mm · polygon · rpm · tool_diameter · vbit_angle · work_orientation
8 Скос кромки 20° (B20 C180) python_chamfer T9 · Ø6 depth_mm · edges · path_tolerance_mm · polygon · rpm · tool_diameter · vbit_angle · work_orientation
9 Скос кромки 20° (B20 C270) python_chamfer T9 · Ø6 depth_mm · edges · path_tolerance_mm · polygon · rpm · tool_diameter · vbit_angle · work_orientation
lathe-2axis · бета

Lathe 2-axis (X cross + Z carriage, step/dir): вал из прутка

bar({ diameter: 20, length: 40 });
turn({ stages: [{ length: 12, diameter: 16 }, { length: 8, diameter: 10 }], tool: T1 });
groove({ z: 4, width: 2, diameter: 12, tool: T2 });
partOff({ z: 20, tool: T3 });
шагоперациядвижокслот · Øпараметры
1 Обточка профиля python_turn_profile T1 · Ø0 doc_mm · face · feed · finish_mm · path_tolerance_mm · rpm · stages · stock_diameter_mm
2 Канавка Ø12 python_groove T2 · Ø0 diameter_mm · doc_mm · feed · path_tolerance_mm · rpm · stock_diameter_mm · tool_width_mm · width_mm · z_mm
3 Отрезка на Z20 python_part_off T3 · Ø0 bore_diameter_mm · doc_mm · feed · path_tolerance_mm · rpm · stock_diameter_mm · tool_width_mm · z_mm
laser-plotter · бета

Laser plotter / cutter (XY gantry + PWM laser): раскрой лучом

stock(40, 30, 10);
contour({ polygon: [[5,5],[35,5],[35,25],[5,25]], offset: 'outside', depth: 2 });
шагоперациядвижокслот · Øпараметры
1 Раскрой контура python_contour — · Ø0.2 depth_mm · feed · laser_power · offset · path_tolerance_mm · polygon · rpm · step_down · tool_diameter
robot-kr16 · R&D

6-axis articulated robot (KUKA KR16, genserkins): перекладка A→B

// ПЕРЕНОС БЕЗ ПЕРЕВОРОТА: взять деталь в точке A и положить в B.
// Ни болванки, ни фрезы: у рода `motion` автор называет ПУТЬ.
const a = [900, -300, 300];   // координаты ЯЧЕЙКИ, не детали (= место mill-1.vise)
const b = [900, 300, 300];    // = место pallet-out
const h = 150;                // высота переноса над захватом, мм

orient([180, 0, 0]);          // инструмент вниз
phase('подход');
moveTo([a[0], a[1], a[2] + h]);
jaws('open', { onTheMove: true });   // разводим НА ХОДУ
phase('захват');
moveTo(a, { feed: 1500 });
jaws('close', { span: 60 });  // пролёт детали — один литерал с ops
dwell(0.3);                   // дать зажиму сработать до подъёма
phase('перенос');
moveTo([a[0], a[1], a[2] + h], { feed: 1500 });
moveTo([b[0], b[1], b[2] + h]);
phase('укладка');
moveTo(b, { feed: 1500 });
jaws('open');                 // отпустить
moveTo([b[0], b[1], b[2] + h], { feed: 1500 });
шагоперациядвижокслот · Øпараметры
1 Перекладка A→B python_motion_path — · Ø0 grasp_from · gripper_port · home_abc · home_xyz · path_json
kuka-welder · R&D

KUKA KR16 welder (6R arm + MIG/MAG torch): прямой шов 300 мм

// ПРЯМОЙ ШОВ: подвести горелку к началу стыка, наклонить ОТ НОРМАЛИ
// детали, зажечь дугу, пройти шов рабочим ходом, погасить, отойти.
// Дуга — такое же действие в точке, как смыкание губок; сварка —
// не род. Буквы осей носителя (кисть/голова/люлька) печатает движок.
const v = param('подача шва', 480);   // 8 мм/с профиля горелки
const a = [900, -150, 300];   // начало стыка, координаты ДЕТАЛИ (угол болванки)
const b = [900, 150, 300];   // конец стыка
const h = 30;                  // подвод/отход над деталью, мм

orient({ tilt: 0, turn: 0 });      // по нормали детали
phase('подход');
moveTo([a[0], a[1], a[2] + h]);
orient({ tilt: 30, turn: 45 });    // наклон от нормали и азимут
moveTo(a, { feed: v });
phase('шов');
weld({ to: b, feed: v });   // зажечь → пройти → погасить; выход дуги — из двойника
phase('отход');
moveTo([b[0], b[1], b[2] + h], { feed: v });
шагоперациядвижокслот · Øпараметры
1 прямой шов 300 мм python_motion_path — · Ø0 arc_port · feed_mm_min · grasp_from · home_abc · home_xyz · orientation_model · path_json
kuka-welder-positioner · R&D

KUKA KR16 welder + 2-axis positioner (genserkins U/V): кольцевой шов: стол крутит, горелка стоит

// КОЛЬЦЕВОЙ ШОВ НА ПОЗИЦИОНЕРЕ: горелка стоит, деталь крутит стол.
// Шов назван на ДЕТАЛИ (кромка трубы у планшайбы), ячейку считает платформа.
const v = param('подача шва', 480);   // 8 мм/с профиля горелки
const r = 50;                          // радиус шва на детали, мм
const k = 30 / Math.SQRT2;            // отход 30 мм по оси горелки
const home = [700, 0, 800];   // парковка (место home)

part({ label: 'труба', shape: 'cylinder', size: [100, 100, 100], at: [0, 0, 0], on: 'U' });   // деталь ячейки — та же, что cell_parts
orient({ tilt: 0, turn: 0 });
phase('подход');
table({ turn: 0, tilt: 45 });   // наклон к руке
orient({ part: 'труба', bisect: [[0, 0, 1], 'rim'] });   // биссектриса: лицо планшайбы, стенка трубы
moveTo({ rim: r + k, z: k }, { part: 'труба' });
moveTo({ rim: r, z: 0 }, { part: 'труба', feed: v });   // верх кромки при этой позе стола
phase('шов');
weld({ table: { turn: 360 }, radius: r, feed: v });   // зажечь -> оборот детали -> погасить
phase('отход');
moveTo({ rim: r + k, z: k }, { part: 'труба', feed: v });
moveTo(home);                          // стол выравнивается из парковки
table({ tilt: 0 });
шагоперациядвижокслот · Øпараметры
1 Кольцевой шов на позиционере python_motion_path — · Ø0 arc_port · cell_parts · feed_mm_min · grasp_from · home_abc · home_xyz · orientation_model · path_json
robot-hexapod · R&D

Hexapod (Gough-Stewart 6-strut, genhexkins): обход с наклоном платформы

// ШЕСТЬ СТЕПЕНЕЙ СВОБОДЫ ОДНИМ ПУТЁМ: платформа идёт по квадрату и
// на каждой стороне держит СВОЙ наклон, а в конце разворачивается
// вокруг своей оси. Положение и ориентацию гексапод задаёт вместе —
// это и есть то, чего декартов стол не умеет.
const r = param('полуразмер квадрата', 60);   // зона ±120 мм
const z = param('высота обхода', 400);        // зона 300…500 мм
const t = param('наклон', 10);                // предел ±20°

orient([0, 0, 0]);            // платформа горизонтально
phase('выход на высоту обхода');
moveTo([r, 0, z]);
phase('сторона 1');
orient([0, t, 0]);
moveTo([0, r, z], { feed: 1500 });
phase('сторона 2');
orient([t, 0, 0]);
moveTo([-r, 0, z], { feed: 1500 });
phase('сторона 3');
orient([0, -t, 0]);
moveTo([0, -r, z], { feed: 1500 });
phase('сторона 4');
orient([-t, 0, 0]);
moveTo([r, 0, z], { feed: 1500 });
phase('разворот платформы');
orient([0, 0, 15]);
moveTo([0, 0, z], { feed: 1500 });

Паспорт экземпляра при создании станка: {"spindle_max_rpm":24000}.

шагоперациядвижокслот · Øпараметры
1 Обход с наклоном платформы python_motion_path — · Ø0 grasp_from · home_abc · home_xyz · path_json
robot-linear-delta · R&D

Linear delta (3-tower, lineardeltakins): контур дельтой

stock(40, 30, 10);
contour({ polygon: [[5,5],[35,5],[35,25],[5,25]], offset: 'outside', depth: 2, tool: T9 });

Паспорт экземпляра при создании станка: {"spindle_max_rpm":24000}.

шагоперациядвижокслот · Øпараметры
1 Контур Ø6 python_contour T9 · Ø6 depth_mm · offset · path_tolerance_mm · polygon · rpm · step_down · tool_diameter
robot-tripod · R&D

Tripod head (3-PRS tilting, ptripodkins): наклоны головки

// ПОДАЧА И ДВА НАКЛОНА. У трипода мировые оси Z A B: он подаёт
// головку вперёд (Z) и наклоняет её (A, B). Осей X и Y у него нет
// вовсе, поэтому программа их и не называет.
const t = param('наклон', 15);   // предел породы ±25°

orient([0, 0, 0]);            // головка прямо
phase('подача');
moveTo([0, 0, -20]);
phase('наклон A');
orient([t, 0, 0]);
moveTo([0, 0, -40], { feed: 1500 });
phase('наклон B');
orient([0, t, 0]);
moveTo([0, 0, -40], { feed: 1500 });
phase('выравнивание');
orient([0, 0, 0]);
moveTo([0, 0, -20], { feed: 1500 });
шагоперациядвижокслот · Øпараметры
1 Наклоны головки python_motion_path — · Ø0 grasp_from · home_abc · home_xyz · path_json
wire-edm · R&D

Wire EDM (проволочная электроэрозия): контур проволокой

// КОНТУР ПРОВОЛОКОЙ: заправить → три прохода убывающим зазором → стоп.
// Проволока режет насквозь за один обход: прохода по Z нет.
stock(40, 30, 10);
thread();                 // заправка проволоки — процедура головы
const c = [[5,5],[35,5],[35,25],[5,25]];
cut('rough', { polygon: c });    // черновой: максимальный съём
cut('finish1', { polygon: c });  // чистовой 1: offset меньше
cut('finish2', { polygon: c });  // чистовой 2: offset ещё меньше
cutWire();                // проволока стоп
шагоперациядвижокслот · Øпараметры
1 Заправка проволоки · процедура головы python_effector_procedure — procedure_id
2 Контур электродом · режим реза rough python_contour — · Ø0.25 cut_mode · cut_mode_port · feed · offset · path_tolerance_mm · polygon · process · wire_diameter_mm · wire_on_port
3 Контур электродом · режим реза finish1 python_contour — · Ø0.25 cut_mode · cut_mode_port · feed · offset · path_tolerance_mm · polygon · process · wire_diameter_mm · wire_on_port
4 Контур электродом · режим реза finish2 python_contour — · Ø0.25 cut_mode · cut_mode_port · feed · offset · path_tolerance_mm · polygon · process · wire_diameter_mm · wire_on_port
5 Проволока стоп · глагол головы python_effector_procedure — verbs
kuka-welder-ring · —

kuka-welder-ring: Кольцевой шов на стыке труб (KUKA): максимальная дуга

// выгрузка витрины лабы «weld-ring-pipe-joint»: weldRing(...)
weldRing({
  at: [place('weld-bench')[0], place('weld-bench')[1], place('weld-bench')[2] + 60],
  axis: 'z',
  dia: 60,
  standoff: 10,
  feed: 300,
  lead: 0,
  work: 45,
});
шагоперациядвижокслот · Øпараметры
1 Кольцевой шов на стыке труб (KUKA): максимальная дуга python_motion_path — · Ø0 arc_port · feed_mm_min · grasp_from · home_abc · home_xyz · orientation_model · path_json
robot-kr16-transfer · —

robot-kr16-transfer: перекладка A→B глаголом transfer

// ПЕРЕКЛАДКА МАКРО-ГЛАГОЛОМ: путь выводит платформа (рецепт примитивов).
transfer({ from: [900, -300, 300], to: [900, 300, 300], approach: 150, dwell: 0.3 });
шагоперациядвижокслот · Øпараметры
1 Перекладка A→B (transfer) python_transfer — · Ø0 approach_mm · grasp_from · gripper_port · home_abc · home_xyz · orientation_abc · pick_xyz · pickup_dwell_s · place_xyz
robot-kr16-flip · —

robot-kr16-flip: переворот детали на месте (рецепт flip)

// ПЕРЕВОРОТ: сменить опорную грань, путь — рецепт примитивов.
part({ size: [40, 30, 10], at: [900, -300, 300], grip: 'side' });
flip({ feed: 1500, dwell: 0.3 });
шагоперациядвижокслот · Øпараметры
1 Переворот на месте (flip) python_transfer — · Ø0 approach_mm · grasp_from · gripper_port · home_abc · home_xyz · jaw_span_mm · orientation_abc · pick_xyz · pickup_dwell_s · place_abc · place_xyz
mill-xyz+gripper · —

mill-xyz+gripper: перекладка тиски → паллета

// ЯЧЕЙКА ФРЕЗЕРА: снять деталь с тисков (A) и положить на паллету (B).
// Схват на шпиндельной бабке; поворотных осей нет — губки смотрят вниз.
const a = [200, 300, -150];   // тиски
const b = [600, 300, -150];   // паллета выхода
const h = 100;                // подъём переноса, мм

phase('подход');
moveTo([a[0], a[1], a[2] + h]);
jaws('open', { onTheMove: true });
phase('захват');
moveTo(a, { feed: 1500 });
jaws('close', { span: 40 });   // пролёт = ширина детали
dwell(0.3);
phase('перенос');
moveTo([a[0], a[1], a[2] + h], { feed: 1500 });
moveTo([b[0], b[1], b[2] + h]);
phase('укладка');
moveTo(b, { feed: 1500 });
jaws('open');
moveTo([b[0], b[1], b[2] + h], { feed: 1500 });
шагоперациядвижокслот · Øпараметры
1 Перекладка тиски → паллета python_motion_path — · Ø0 grasp_from · gripper_port · home_xyz · path_json
trivkins-twin · —

trivkins-twin: кольцевой шов на позиционере

// КОЛЬЦЕВОЙ ШОВ: горелка стоит на стойке, деталь крутит позиционер.
// Линейных осей нет — путь только по A; дуга в точке, как губки.
const f = param('подача шва, °/мин', 720);
const a0 = param('начало шва, °', 0);

phase('подвод');
orient([a0, 0, 0]);  moveTo([0, 0, 0]);          // планшайба к началу шва
phase('шов');
// дуга вкл → ОДИН ПОЛНЫЙ ОБОРОТ рабочим ходом → дуга выкл (буква стола
// печатается как названа — RIG-wrap-table-2, table_axes у as_named)
orient([a0 + 360, 0, 0]);  moveTo([0, 0, 0], { feed: f });
шагоперациядвижокслот · Øпараметры
1 Кольцевой шов на позиционере python_motion_path — · Ø0 arc_port · feed_mm_min · grasp_from · orientation_model · path_json
mill-xyz+dispenser · —

mill-xyz+dispenser: валик герметика по контуру

// ЯЧЕЙКА ФРЕЗЕРА: сопло дозатора ведёт валик по контуру верхней
// грани болванки — отступ от кромки, углы срезаны фаской.
const pts = [[215.0, 310.0, -148.0], [285.0, 310.0, -148.0], [290.0, 315.0, -148.0], [290.0, 345.0, -148.0], [285.0, 350.0, -148.0], [215.0, 350.0, -148.0], [210.0, 345.0, -148.0], [210.0, 315.0, -148.0], [215.0, 310.0, -148.0]];
const up = [pts[0][0], pts[0][1], -70];

phase('подход');
moveTo(up);
moveTo(pts[0], { feed: 1500 });
phase('валик');
dispense('on');
for (const p of pts.slice(1)) moveTo(p, { feed: 1500 });
dispense('off');
phase('отвод');
moveTo([pts[pts.length - 1][0], pts[pts.length - 1][1], up[2]], { feed: 1500 });
шагоперациядвижокслот · Øпараметры
1 Валик герметика по контуру python_motion_path — · Ø0 dispense_port · grasp_from · home_xyz · path_json
mill-5axis-head+welder · —

mill-5axis-head+welder: шов с наклоном головы 150 мм

// ПРЯМОЙ ШОВ: подвести горелку к началу стыка, наклонить ОТ НОРМАЛИ
// детали, зажечь дугу, пройти шов рабочим ходом, погасить, отойти.
// Дуга — такое же действие в точке, как смыкание губок; сварка —
// не род. Буквы осей носителя (кисть/голова/люлька) печатает движок.
const v = param('подача шва', 480);   // 8 мм/с профиля горелки
const a = [50, 100, -50];   // начало стыка, координаты ДЕТАЛИ (угол болванки)
const b = [200, 100, -50];   // конец стыка
const h = 30;                  // подвод/отход над деталью, мм

orient({ tilt: 0, turn: 0 });      // по нормали детали
phase('подход');
moveTo([a[0], a[1], a[2] + h]);
orient({ tilt: 30, turn: 45 });    // наклон от нормали и азимут
moveTo(a, { feed: v });
phase('шов');
weld({ to: b, feed: v });   // зажечь → пройти → погасить; выход дуги — из двойника
phase('отход');
moveTo([b[0], b[1], b[2] + h], { feed: v });

Паспорт экземпляра при создании станка: {"z_travel_mm":300}.

шагоперациядвижокслот · Øпараметры
1 шов с наклоном головы 150 мм python_motion_path — · Ø0 arc_port · feed_mm_min · grasp_from · home_abc · home_xyz · path_json
kuka-welder-positioner-seam · —

kuka-welder-positioner-seam: продольный шов: деталь повёрнута столом

// ПРОДОЛЬНЫЙ ШОВ ТРУБЫ НА ПОЗИЦИОНЕРЕ: стол ставит шов наверх, горелка идёт по детали.
// Точки шва — в кадре ДЕТАЛИ (труба на планшайбе), ячейку считает платформа.
const v = param('подача шва', 480);
const r = 50, h = 30;
const home = [700, 0, 800];
part({ label: 'труба', shape: 'cylinder', size: [100, 100, 100], at: [0, 0, 0], on: 'U' });   // деталь ячейки — та же, что cell_parts
orient({ tilt: 0, turn: 0 });
phase('подход');
table({ turn: 90, tilt: -60 });   // шов наверх
orient({ part: 'труба', bisect: [[-1, 0, 0], [-0.866025, 0.0, 0.5]] });   // по нормали стенки, 15° от планшайбы
moveTo([-r - h, 0, 30], { part: 'труба' });
moveTo([-r, 0, 30], { part: 'труба', feed: v });
phase('шов');
weld({ to: [-r, 0, 70], part: 'труба', feed: v });
phase('отход');
moveTo([-r - h, 0, 70], { part: 'труба', feed: v });
moveTo(home);
table({ turn: 0, tilt: 0 });
шагоперациядвижокслот · Øпараметры
1 Продольный шов на повёрнутой детали python_motion_path — · Ø0 arc_port · cell_parts · feed_mm_min · grasp_from · home_abc · home_xyz · orientation_model · path_json

Порождено из кода · снято 2026-09-24.