4-я ось: настройка поворотной оси (мини FAQ)

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

4-я ось: настройка поворотной оси (мини FAQ)

Сообщение verser »

Проблема #1: переход через 360°
Добавил в свой станок 4-ю поворотную ось, делаю фрезерную операцию, ось накручивает обороты, при появлении команды G0 B0 linuxcnc начинает все эти обороты отматывать обратно. Симулятор g-code Cimco Edit имеет "галочку" Use shortest angle moves - она убирает эту отмотку. А есть ли в linuxcnc возможность задавать для поворотных осей переходы по кратчайшему угловому расстоянию?
Решение (для просмотра содержимого нажмите на ссылку)
Благодаря подсказке Nicka про параметр wrapped_rotary (post #33) решение такое:
1. В мой-станок.ini в секции [AXIS_4] добавляем строчку
WRAPPED_ROTARY = 1
2. В CAM программе делаем настройку для оси вращения 0-359.999.
Вот SolidCAM настройки на примере операции торцевания детали согласно шаблона:
cut4axis.rar
(4.06 КБ) 888 скачиваний
(я адаптировал под linuxcnc один из стандартных постпроцессоров SolidCAM, ссылка ниже)
При выполнении фрезеровки получается что в g-code позиция оси B идет между 0-359.999 а на экране linuxcnc позиция оси B нарастает до +99999, и никакой обратной отмотки :good:
Так выглядит в InventorCAM :
Снимок.PNG (23132 просмотра) <a class='original' href='./download/file.php?id=28014&sid=3c63ab59778cae68ba169f5765243738&mode=view' target=_blank>Загрузить оригинал (126.68 КБ)</a>
Проблема #2: согласование угловых и линейных скоростей
В LinuxCNC при наличии поворотной оси существует проблема согласования линейных и угловых скоростей.
G1 X10 F600 - перемещает со скоростью 600мм/мин
G1 B10 F600 - перемещает со скоростью 600градусов/мин
G1 X10 B10 F600 - перемещает со скоростью 600мм/мин по линейным координатам, а по угловой - проворачивает с такой скоростью, чтобы стартовать и финишировать одновременно с линейными координатами.
В итоге при такой команде:
G1 X1 B360 F200 - считайте фреза сломана, т.к. расстояние 1мм по X на скорости F200 проходится быстро, а ось B, пытаясь догнать, прокручивается на максимально возможной скорости, и чик...
Решение (для просмотра содержимого нажмите на ссылку)
Получилось решить эту проблему с помощью постпроцессора, установив режим скоростей на Inverse Time FeedRate:

Код: Выделить всё

...
i4xFeedMode           = 1         ;4x-Simultanious control (0=Programed feedRate, 1=Inverse Time FeedRate, 2=Deg. per Minute)
...
В результате формируется такой G-code для той картинки, что в первой проблеме:

Код: Выделить всё

G00 G90 X0.02 Y-13.59 A0. B359.07 S18000 M03 Z6 
G01 X0 Y-13.59 Z5.2 F1080 
G93 B90.38 F145 
B180.93 F146 
B269.62 F149 
B359.07 F148 
G94 Z4.2 F1080 
G93 B90.38 F180 
B180.93 F181 
B269.62 F184 
B359.07 F183 
G94 Z3.2 F1080 
G93 Z3.2 B90.38 F236 
Z3.2 B180.93 F237 
Z3.2 B269.62 F241 
Z3.2 B359.07 F240 
G94 Z2.2 F1080 
G93 Z2.2 B90.38 F343 
Z2.2 B180.93 F345 
Z2.2 B269.62 F351 
Z2.2 B359.07 F349 
G94 Z1.2 F1080 
G93 Z1.2 B90.38 F629 
Z1.2 B180.93 F633 
Z1.2 B269.62 F644 
Z1.2 B359.07 F639 
G94 Z0.2 F1080 
G93 Z0.2 B90.38 F3769 
Z0.2 B180.93 F3794 
Z0.2 B269.62 F3856 
Z0.2 B359.07 F3830 
G00 Z6 
M05 
M2 
%
Видим появление команд G93 и G94. Теперь со скоростями нет проблем, постпроцессор сам всё грамотно рассчитывает :)
Здесь постпроцессор для SolidCAM(адаптировал под linuxcnc один из стандартных):
gMill_Fadal_5x_eval.rar
(18.11 КБ) 919 скачиваний
Вот на симуляторе:
AngleSpeed.PNG (23037 просмотров) <a class='original' href='./download/file.php?id=30085&sid=3c63ab59778cae68ba169f5765243738&mode=view' target=_blank>Загрузить оригинал (143.99 КБ)</a>
Проблема #3: ориентация поворотной оси параллельно Y
Обычно в шаблонах конфигураций 4х-осных станков с одной осью вращения заложен набор осей AXYZ, при этом ось A описывается в .ini файле в разделе [AXIS_3]. Отображение траектории оси A в Gremline осуществляется вокруг оси X. А как изменить её ориентацию на вокруг Y ?
Решение (для просмотра содержимого нажмите на ссылку)
Для настройки отображения вращения поворотной оси вокруг оси Y настройки должны быть по аналогии со следующими:
Для .ini файла такие изменения:

Код: Выделить всё

...
[DISPLAY]
...
GEOMETRY = BXYZ
...
[TRAJ]
AXES = 5
COORDINATES = X Y Z B
...
# Third axis = Z
[AXIS_2]
TYPE =                          LINEAR
#HOME =                          0.0
MAX_VELOCITY =                  18
MAX_ACCELERATION = 180
STEPGEN_MAXACCEL = 200
BACKLASH = 0.000
INPUT_SCALE =                   1280
OUTPUT_SCALE = 1.000
MIN_LIMIT =                     0.0
MAX_LIMIT =                     62
FERROR = 0.050
MIN_FERROR = 0.010
HOME_OFFSET =                    1.0
HOME =                           30
HOME_SEARCH_VEL =                -10.0
HOME_LATCH_VEL =                 0.390625
HOME_USE_INDEX =                 NO
HOME_IGNORE_LIMITS =             YES
HOME_SEQUENCE = 0
HOME_IS_SHARED = 1

# Fourth axis = B
[AXIS_4]
TYPE =                          ANGULAR
WRAPPED_ROTARY = 1
HOME =                          0.0
MAX_VELOCITY = 356.25
MAX_ACCELERATION = 4800.0
STEPGEN_MAXACCEL = 6000.0
INPUT_SCALE = -26.6666666667
FERROR = 1
MIN_FERROR = .25
BACKLASH = 0.000
OUTPUT_SCALE = 1.000
HOME_OFFSET =                    0.0
HOME_SEARCH_VEL =                0.0
HOME_LATCH_VEL =                 0.0
HOME_USE_INDEX =                 NO
HOME_IGNORE_LIMITS =             YES
HOME_SEQUENCE = 0
...
обратите внимание что секция [AXIS_3] отсутствует, ось называется "B", AXES = 5.
Важно! Для отображения траектории поворотной оси на экране имеет значение очередность букв, букву поворотной оси лучше писать впереди остальных

Код: Выделить всё

[DISPLAY]
...
GEOMETRY = BXYZ
+для .hal файла такие изменения:

Код: Выделить всё

...
loadrt stepgen step_type=0,0,0,0,0
...
setp stepgen.2.position-scale [AXIS_2]INPUT_SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 1
setp stepgen.2.dirhold 18000
setp stepgen.2.dirsetup 18000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd
net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable axis.2.amp-enable-out => stepgen.2.enable
net both-home-z => axis.2.home-sw-in
net both-home-z => axis.2.neg-lim-sw-in
net both-home-z => axis.2.pos-lim-sw-in

setp stepgen.4.position-scale [AXIS_4]INPUT_SCALE
setp stepgen.4.steplen 1
setp stepgen.4.stepspace 1
setp stepgen.4.dirhold 18000
setp stepgen.4.dirsetup 18000
setp stepgen.4.maxaccel [AXIS_4]STEPGEN_MAXACCEL
net bpos-cmd axis.4.motor-pos-cmd => stepgen.4.position-cmd
net bpos-fb stepgen.4.position-fb => axis.4.motor-pos-fb
net bstep <= stepgen.4.step
net bdir <= stepgen.4.dir
net benable axis.4.amp-enable-out => stepgen.4.enable
... 
обратите внимание что секция [AXIS_3] также отсутствует.
Проблема #4: отступы по G92 (G54) для Z приводят к искажению отображения траектории поворотной оси
Отступы по оси X (для станков BXYZ) и по оси Y (для станков AXYZ) также приводят к искажению отображения траектории поворотной оси.
Как быть, если G92 (G54) использовалась для задания отступов при смене инструмента? или если требуется отступ для других целей?
Решение (для просмотра содержимого нажмите на ссылку)
Придется перейти на использование встроенной в linuxcnc таблицы инструментов, заполнить ее, и делать отступ путем пересохранения состояния текущего инструмента вот таким g-code :

Код: Выделить всё

G0 X20 Y20 Z20 (здесь перемещаемся в какую-либо точку, которую хотим сделать нулем)
G10 L10 P1 X0 Y0 Z0
G43 H1
Где G10 L10 - записывает в таблицу инструментов значение отступов для инструмента P1 (он же T1), при этом текущая координата переназначится (без переезда) на X0 Y0 Z0, а после выполнения G43 отразиться в Gremline скачком траектории.
G43 - применить записанное значение к текущему отступу.
В итоге получим и отступ, и Gremlin корректно отрисует траекторию поворотной оси.
Если действия, описанные выше, уже один раз выполнились для инструмента T1, то повторную их "активацию" можно делать

Код: Выделить всё

M61 Q1 
G43 H1
Проблема #5: Ненужные паузы в движении после каждого полного оборота
Параметр WRAPPED_ROTARY = 1 позволяет задавать максимальную угловую координату 359.9999°, но не 360°(на 360°linuxcnc выдает ошибку превышения абсолютной координаты для WRAPPED оси)
При выполнении финишной фрезеровки поверхности прутка(цилиндра), чтобы все правильно проворачивалось по спирали, приходится применять в цикле, например, такую пару команд

Код: Выделить всё

G1 Y#<new_y> B359.999 F#<calculated_feed>
G1 B0 (доворот до полного оборота)
При таком подходе после каждого полного оборота происходит ненужная пауза движения.
Решение (для просмотра содержимого нажмите на ссылку)
Решение подсказал Nick:

Код: Выделить всё

G1 Y[#<new_y>-#<half_step>] B180 F#<calculated_feed>
G1 Y#<new_y> B0 F<#calculated_feed>
нужно полный оборот оси B (или оси A) разбить на два одинаковых по 180°, тогда будет переход через ноль без приостановки
logo_micro_vers_dark.png
logo_micro_vers_dark.png (2.41 КБ) 17359 просмотров
logo_micro_v_dark.png
logo_micro_v_dark.png (2.67 КБ) 2180 просмотров
Последний раз редактировалось verser 14 мар 2023, 06:18, всего редактировалось 42 раза.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение aftaev »

verser писал(а): ось накручивает обороты, при появлении команды G0 B0 linuxcnc начинает все эти обороты отматывать обратно.
а на экране что ось перед этим показывает 23894 градусов?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

Совершенно верно.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение nkp »

пытался когда то дописать в кинематику для поворотного ножа - так и не закончил...
но там именно при работе необходимо было...
а здесь мне кажеться можно написать свой код (если нужен код),
или кнопку (если нужна кнопка)
вычиляем - сколько осталось до "ближайшего" нуля , и говорим емс - здесь теперь ноль...
или задача в чем то другом?
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

nkp писал(а): вычиляем - сколько осталось до "ближайшего" нуля , и говорим емс - здесь теперь ноль...
Типа того, только хотелось бы ничего не вычислять по возможности. Неужели в нашей суперсистеме linuxcnc нет "включалки" функции перехода с 359° на 1° через поворот на +2°, а не на -358° ?
Аватара пользователя
at90
Мастер
Сообщения: 659
Зарегистрирован: 08 окт 2011, 23:22
Репутация: 173
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение at90 »

если просто сбросить то поможет G92 A0
Фрезы для чпу www.carbidetools.ru
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение nkp »

verser писал(а):только хотелось бы ничего не вычислять по возможности.
может я не точно выразился - имелось в виду написать две строки выражения для вычисления...
то есть ,естественно - все будет происходить автоматом...
========
все же - как это должно выглядеть-работать:
кнопка в ручном режиме ?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение nkp »

at90 писал(а):если просто сбросить то поможет G92 A0
да - но сперва же необходимо "довернуть " ось...
если сразу G92 A0 - то где стоим - там теперь ноль
Аватара пользователя
at90
Мастер
Сообщения: 659
Зарегистрирован: 08 окт 2011, 23:22
Репутация: 173
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение at90 »

еще можно прилепить концевик и лепесток к патрону. И по концевику гнать в 0.
Фрезы для чпу www.carbidetools.ru
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

nkp писал(а):..имелось в виду написать две строки выражения для вычисления...
куда, в постпроцессор?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение nkp »

at90 писал(а):еще можно прилепить концевик и лепесток к патрону. И по концевику гнать в 0
да ,а как ось обнуляется(Home)?
в нашем случае это не подойдет??
verser писал(а):куда, в постпроцессор?
нет - я думал маленькую подпрограмку написать,кнопкой ее вызывать...
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

at90 писал(а):еще можно прилепить концевик и лепесток к патрону. И по концевику гнать в 0.
В постпроцессоре заложена такая возможность (концевик не нужен), вот пример перехода через 360°одного постпроцессора из SolidCAM:

Код: Выделить всё

...
A-1.398 
A359.114 
Z3.81 
A-357.013 
A-354.912 
...
Проблема в том, что linuxcnc мотает эти переходы "в лоб", как написано, а надо чтобы ... понятно короче.
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

nkp писал(а): нет - я думал маленькую подпрограмку написать,кнопкой ее вызывать...
Деталь может иметь десятки таких проблемных переходов. Кнопка отпадает.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение nkp »

verser писал(а):Деталь может иметь десятки таких проблемных переходов. Кнопка отпадает.
то есть нужен G-код ??
при вызове которого ось отматывает в ноль по кратчайшему?
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

Интересно, что и симулятор SolidCAM , и cимулятор Cimco Edit, с этой проблемой справляются "по-умолчанию" без проблем.. но я верю в СИЛУ linuxcnc !!! :bender:
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

nkp писал(а): то есть нужен G-код ??
при вызове которого ось отматывает в ноль по кратчайшему?
Нужно чтобы такой g-code

Код: Выделить всё

G0 A359
G0 A1
крутил ось на +2° а не на -358°
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение nkp »

можно такой код сохранить в файл deg.ngc

Код: Выделить всё

o<deg> sub
  o111 if [#5424 LT 360]
       G0 B[360 - #5424]
  o111 else
       G0 B[#5424 MOD 360]
  o111 endif  
o<deg> endsub
и доворачивать ось вызовом этого о-кода:

Код: Выделить всё

o<deg>call
то есть :

Код: Выделить всё

G0 B359
o<deg>call
ps
вначале в условиях ось была B
потом А
если А - то код:

Код: Выделить всё

o<deg> sub
  o111 if [#5423 LT 360]
       G0 A[360 - #5423]
  o111 else
       G0 A[#5423 MOD 360]
  o111 endif  
o<deg> endsub
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

Полезная процедурка :)
Но проблему перехода по кратчайшему углу не решает. :(
Последний раз редактировалось verser 05 май 2014, 21:40, всего редактировалось 2 раза.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение nkp »

так наверно с обнулением(если необходимо):

Код: Выделить всё

o<deg> sub
  o111 if [#5423 LT 360]
       G0 A[360 - #5424]
       G10 L20 P1 A0 
  o111 else
       G0 A[#5423 MOD 360]
       G10 L20 P1 A0 
  o111 endif  
o<deg> endsub
P1 для G54
verser писал(а):Но проблему перехода по кратчайшему углу не решает
почему???
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: 4-я ось: как сбросить намотанные обороты

Сообщение verser »

nkp писал(а):
verser писал(а):Но проблему перехода по кратчайшему углу не решает
почему???
verser писал(а): Нужно чтобы такой g-code

Код: Выделить всё

G0 A359
G0 A1
крутил ось на +2° а не на -358°
Ответить

Вернуться в «LinuxCNC»