Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: равномерное движение и EMC2
Все о станках с ЧПУ > Станки с ЧПУ, Hobby CNC > Программное обеспечение > Linux CNC EMC2
Tehnoon
Всем привет.
Возникла проблемка, суть - станок управляется EMC2, G-код чистый(т.е. на кривых нет манипуляций со скоростью перемещения), но станок при прохождении кривой явно подтормаживает и ускоряется(алгоритм понять не смог). Примерно так - входим в скругление замедлились в самом начале кривой и постепенно ускоряемся.
Пример куска кода(прямоугольник с скругленными углами) -
Код
%
G90
G49
M3 S4000
N4 G0 X9.466 Y191.400 Z1.000
N5 G1   Z0.000 F100
N6 G3 X6.284 Y190.421 R5.849
N7 G3 X3.969 Y188.164 R8.741
N8 G3 X2.096 Y184.343 R13.452
N9 G3 X1.290 Y178.942 R17.961
N10 G1 X1.290 Y22.792  F1100
N11 G3 X2.277 Y16.853 R17.741
N12 G3 X4.266 Y13.178 R12.805
N13 G3 X6.655 Y11.089 R8.202
N14 G3 X9.466 Y10.334 R5.743
N15 G1 X140.034  
N16 G3 X143.217 Y11.313 R5.849
N17 G3 X145.532 Y13.570 R8.741
N18 G3 X147.404 Y17.391 R13.452
N19 G3 X148.211 Y22.792 R17.961
N20 G1  Y178.942  
N21 G3 X147.224 Y184.880 R17.741
N22 G3 X145.235 Y188.555 R12.805
N23 G3 X142.846 Y190.644 R8.202
N24 G3 X140.034 Y191.400 R5.743
N25 G1 X9.466  
N26 G1   Z1.000 F100

Вимдимо самой EMC2, можно обьяснить что шпиндель нужно перемещать равномерно, но как?

З.С. станочек шьет, если плывет скорость - плывет размер стежка. unsure.gif
MaxiCNC
Видимо никак. Это в самой программе зашито, в смысле логика разгонов-торможений. Нормальный контроллер ЧПУ нужен...
AlexSpb
Цитата
Видимо никак. Это в самой программе зашито, в смысле логика разгонов-торможений. Нормальный контроллер ЧПУ нужен...

Да???
Посоветуйте, с каким работаете?

G-64
Tehnoon
Цитата(AlexSpb @ 12.9.2009, 16:58) *
G-64

Спасибо AlexSpb. Попробовать смогу только через недельку - обязательно отпишусь о результатах.
max77ekb
Цитата(Tehnoon @ 14.9.2009, 13:39) *
Спасибо AlexSpb. Попробовать смогу только через недельку - обязательно отпишусь о результатах.

А макс. ускорение какое выставлено ?
Есть подозрение, что он тормозит перед окончанием кадра прямой, потом начинает плавно разгоняться на дуге, потом опять тормозит перед окончанием дуги, разгоняется на прямой итд...
Если там указаны значения EMC2 по умолчанию (30 mm/s^2), да еще и в сочетании с высокой скоростью, то картина очень тоскливая :) Поиграйтесь с параметрами...

Да, а почему первый угол проходится с подачей в 100, а остальные в 1100 ???
Tehnoon
Цитата(max77ekb @ 8.10.2009, 12:46) *
А макс. ускорение какое выставлено ?
Есть подозрение, что он тормозит перед окончанием кадра прямой, потом начинает плавно разгоняться на дуге, потом опять тормозит перед окончанием дуги, разгоняется на прямой итд...
Если там указаны значения EMC2 по умолчанию (30 mm/s^2), да еще и в сочетании с высокой скоростью, то картина очень тоскливая :) Поиграйтесь с параметрами...

Да, а почему первый угол проходится с подачей в 100, а остальные в 1100 ???


Я все еще не добрался до станка. На днях закончу одну платку - поиграюсь с G64.
Файл настроек покажу.
По поводу скоростей - это я так боролся с искажениями траэктории(общую скорость задрал, плавные дуги станок нормально отрабатывал, а на резких скруглениях - срезал маршрут.) smile.gif. Вот скоростями на скруглениях и пытался поправить ситуацию. Пришел к выводу что банально контроллер сервопривода не может справится с задачей( а поднимаю силовое, грется начинает не по детски.) - по оси У, привод таскает раму с осью Х и одеялом(общий вес ~ 150-200кг ) Пришлось крейсерскую скорость снижать, до нормальной отработки траэктории. ac.gif
AlexSpb
в генерал конфиге есть величина угла,при котором сохранять скорость.
И в вашем случае плазма моде включить.
de-nos
Цитата(AlexSpb @ 9.10.2009, 13:49) *
в генерал конфиге есть величина угла,при котором сохранять скорость.
И в вашем случае плазма моде включить.

А где этот генерал конфиг находится?
AlexSpb
Цитата
А где этот генерал конфиг находится?

это не в EMC2,на тему не посмотрел. ac.gif
в EMC2
попробуйте в начале программы прописать G-64.
valorsp
в EMC есть смешаный режим оптимизации и точного позиционирования.... вольный перевод термина из документации ... выглядит в программе как G64 p 0.05 к примеру, p0.05 - параметр оптимизации- допустимое отклонение от заданой точки, используем этот параматр на больших порталах для обработке дерева, скорость и плавность обработки увеличивается визуально процентов на 30, если поиграться с параметром P можно получить и больший результат.
de-nos
Работает! Строка "G64 P 0.005" вылечила сбавление скорости на скруглениях. Теперь скорость меняется не более, чем на 2% (было до 40%).
AlexSpb, valorsp благодарствую.
de-nos
Раньше строка "G64 P0.05" избавляла от притормаживаний, а вот сейчас нет. Пробовал разные величины параметра P, но либо точность не устраивает, либо притормаживания (почти на прямых участках). Как можно это решить?
Ссылка на программу, в которой не выходит избавиться от притормаживаний.
starik99
Цитата(de-nos @ 11.12.2010, 18:06) *
Раньше строка "G64 P0.05" избавляла от притормаживаний, а вот сейчас нет. Пробовал разные величины параметра P, но либо точность не устраивает, либо притормаживания (почти на прямых участках). Как можно это решить?
Ссылка на программу, в которой не выходит избавиться от притормаживаний.

вы ставите g64 до g21, т.е. вы не знаете в каких единицах у вас P0.05...
de-nos
Цитата(starik99 @ 12.12.2010, 0:45) *
вы ставите g64 до g21, т.е. вы не знаете в каких единицах у вас P0.05...

Поставил после. Визуально ничего не поменялось (пробовал с разными значениями P).
starik99
Цитата(de-nos @ 12.12.2010, 7:36) *
Поставил после. Визуально ничего не поменялось (пробовал с разными значениями P).

Для ускорения обработки используйте код G64, он задет допуски сглаживания углов для поддержания максимальной скорости обработки. Для G64 есть два параметра:

* "P"- задает максимальное расстояние на которое EMC2 может отойти от заданной траектории для поддержания скорости.
* "Q" - задет максимальное расстояние на которое EMC2 можеот отклониться от заданной траектории для ее упрощения. (Несколько прямолинейных сегментов заменяются одним.)

Может вам еще Q задать?
de-nos
Цитата(starik99 @ 12.12.2010, 17:06) *
Для ускорения обработки используйте код G64, он задет допуски сглаживания углов для поддержания максимальной скорости обработки. Для G64 есть два параметра:

* "P"- задает максимальное расстояние на которое EMC2 может отойти от заданной траектории для поддержания скорости.
* "Q" - задет максимальное расстояние на которое EMC2 можеот отклониться от заданной траектории для ее упрощения. (Несколько прямолинейных сегментов заменяются одним.)

Может вам еще Q задать?


Та же песня. Ну, или почти та же. Либо точность, либо скорость. Можно и середину найти, конечно.
Не могу понять почему почти на прямых (менее 5 град.) участках нужно притормаживать (процентов на 40).
igor-div
я тоже столкнулся с такой проблемой, g64 конечно помогает но с динамикой в маче emc не сравнится...да стабильней, но при обработке 3d резьбы время увеличивается в разы, а это часы...и на хрена мне такая стабильность
буду очень благодарен если кто-то меня разубедит и ткнёт носом в настройки или где там ковырнуть...
starik99
Цитата(de-nos @ 13.12.2010, 6:33) *
Та же песня. Ну, или почти та же. Либо точность, либо скорость. Можно и середину найти, конечно.
Не могу понять почему почти на прямых (менее 5 град.) участках нужно притормаживать (процентов на 40).

А вы можете параметры скорости и ускорения сказать?
igor-div
люди, а кто знает как удалить ubuntu? а то 2 штуки на компе...
de-nos
Цитата(starik99 @ 18.12.2010, 1:25) *
А вы можете параметры скорости и ускорения сказать?

Каких параметров скорости и ускорения?
Если речь о максимальных значениях станка, то скорость 11.6 мм/с (700 мм/мин), а ускорение 40 мм/с.
starik99
Цитата(de-nos @ 26.12.2010, 17:29) *
Каких параметров скорости и ускорения?
Если речь о максимальных значениях станка, то скорость 11.6 мм/с (700 мм/мин), а ускорение 40 мм/с.

ускорение должно меряться в мм/(с*c), как бы скорость изменения скорости :)
40 -- вроде очень маленькое значение, у меня 500кг грав-фрезеры с 900 мм/с*с сконфигурены, правда и скорость 2.5м/мин... Ваша макс скорость с нуля наберется за 11/40 с = .25с, или за а*t*t /2 ~ 11.6/8 = 1.5mm.
По моему вам стоит попробовать увеличить макс ускорения. Проверка, что станок его может сделать -- несколько пробегов на G0 (макс скорость) в одну сторону и возврат на G1 F100 обратно. Когда станок перестает возвращаться в исходную точку (пропустил шаги) -- это его предел. В програмных пределах обычно ставят половину или две трети от полученного значения, чтоб учесть силы резания и т.д. Если вы все это проделали раньше и 40мм/с*с реальный предел станка, то вам следует задуматься над заменой приводов ac.gif

de-nos
Цитата(starik99 @ 26.12.2010, 20:15) *
ускорение должно меряться в мм/(с*c), как бы скорость изменения скорости :)
40 -- вроде очень маленькое значение, у меня 500кг грав-фрезеры с 900 мм/с*с сконфигурены, правда и скорость 2.5м/мин... Ваша макс скорость с нуля наберется за 11/40 с = .25с, или за а*t*t /2 ~ 11.6/8 = 1.5mm.
По моему вам стоит попробовать увеличить макс ускорения. Проверка, что станок его может сделать -- несколько пробегов на G0 (макс скорость) в одну сторону и возврат на G1 F100 обратно. Когда станок перестает возвращаться в исходную точку (пропустил шаги) -- это его предел. В програмных пределах обычно ставят половину или две трети от полученного значения, чтоб учесть силы резания и т.д. Если вы все это проделали раньше и 40мм/с*с реальный предел станка, то вам следует задуматься над заменой приводов ac.gif

Увеличил ускорение в 10 раз. Притормаживания на почти ровных участках исчезли (что и следовало ожидать). Станок шаги не пропускает, но работает теперь немного шумнее.
И вылезла какая-то непонятность: при ручном управлении перемещение после одной секунды явно неправильное (скачит скорость от максимальной до половинной). Т.е. нажимаю кнопку "влево", шпиндель мгновенно набирает максимальную скорость, а примерно через секунду начинаются подёргивания (параметр "velocity" прыгает от 300 до 700).
starik99
Цитата(de-nos @ 28.12.2010, 20:01) *
Увеличил ускорение в 10 раз. Притормаживания на почти ровных участках исчезли (что и следовало ожидать). Станок шаги не пропускает, но работает теперь немного шумнее.
И вылезла какая-то непонятность: при ручном управлении перемещение после одной секунды явно неправильное (скачит скорость от максимальной до половинной). Т.е. нажимаю кнопку "влево", шпиндель мгновенно набирает максимальную скорость, а примерно через секунду начинаются подёргивания (параметр "velocity" прыгает от 300 до 700).

Обработка клавиатуры в ЕМС -- это не реал-тайм, поэтому на медленном железе может не хватать времени на опрос клавиш. latency-test вы надеюсь пускали? Что за компутер у Вас?
de-nos
Цитата(starik99 @ 28.12.2010, 23:23) *
Обработка клавиатуры в ЕМС -- это не реал-тайм, поэтому на медленном железе может не хватать времени на опрос клавиш. latency-test вы надеюсь пускали? Что за компутер у Вас?

Тест запускал (base thread max jitter был около 7000 нс). Железо: AMD Athlon 64 X2 Dual Core, RAM 3 Gb.
При ускорении 40 мм/с^2 таких дёрганий не наблюдалось.
psha
Цитата(de-nos @ 29.12.2010, 8:37) *
Тест запускал (base thread max jitter был около 7000 нс). Железо: AMD Athlon 64 X2 Dual Core, RAM 3 Gb.
При ускорении 40 мм/с^2 таких дёрганий не наблюдалось.

Проблема тут не совсем в Axis.
При долгом нажатии кнопки где-то через секунду X-сервер начинает посылать события "кнопка отпущена-кнопка нажата".
Нужно это, например, чтоб в текстовых редакторах можно было нажать на стрелку вниз и оно передвинулось бы больше чем на одну строчку :)
Соответственно, Axis получает событие "кнопка отпущена" и отменяет движение, станок начинает тормозиться.

При этом никто не запрещает отключить данное поведение для отдельных кнопок.
Делается это командой "xset -r 111" для кнопки вверх, остальные коды - 113, 114 для влево и вправо и 116 для кнопки вниз.
Можно не отключать, а просто увеличить начальный интервал и уменьшить частоту автоповтора. Если что, всё в мане к xset(1) описано.

Кстати, добавлена в параметры ядра isolcpus=1? Обычно это очень облегчает жизнь.

В принципе, это конечно может обрабатываться и в Axis, то есть игнорировать событие "отпущено" если следующее - "нажата" с теми же кодами,
но уж очень геморойно :)
de-nos
2psha
Действительно, именно так всё и есть. xset исправляет ситуацию. Но появляются неудобства с тем, что курсор не работает как пологается в других программах.
starik99
Цитата(de-nos @ 1.1.2011, 10:25) *
2psha
Действительно, именно так всё и есть. xset исправляет ситуацию. Но появляются неудобства с тем, что курсор не работает как пологается в других программах.

А может вам джойстик подключить (типа геймпада ?) У него проблем с автоповтором нет, да и таскать его вокруг станка удобнее :)
de-nos
Цитата(starik99 @ 2.1.2011, 14:46) *
А может вам джойстик подключить (типа геймпада ?) У него проблем с автоповтором нет, да и таскать его вокруг станка удобнее :)


Мне и с клавы неплохо управлять, она беспроводная. Вот только найти решение с повторами. А может имеет смысл отписать проблему разработчикам EMC2?
psha
Цитата(de-nos @ 2.1.2011, 15:08) *
Мне и с клавы неплохо управлять, она беспроводная. Вот только найти решение с повторами. А может имеет смысл отписать проблему разработчикам EMC2?

Так всё же, isolcpus при загрузке стоит? Если не стоит - сначала попробовать бы его...
Если что, автоповтор можно отключать не полностью, а менять задаржку перед началом и частоту посылаемых нажатий.
Написать разработчикам - можно попробовать :) Вот только я за полчаса так и не нашел, можно ли в Tkinter посмотреть следующее событие...
de-nos
Цитата(psha @ 2.1.2011, 17:14) *
Так всё же, isolcpus при загрузке стоит? Если не стоит - сначала попробовать бы его...
Если что, автоповтор можно отключать не полностью, а менять задаржку перед началом и частоту посылаемых нажатий.
Написать разработчикам - можно попробовать :) Вот только я за полчаса так и не нашел, можно ли в Tkinter посмотреть следующее событие...

Ни разу не работал с параметрами ядра. Не подскажешь, что нужно сделать, чтобы узнать включен ли isolcpus? Ссылочке на разъяснения тоже буду рад.
Насчёт задержки и частоты повторений, то не хотелось бы менять, меня эти параметры полностью удовлетворяют.
psha
cat /proc/cmdline
Показывает текущие параметры
Параметры загрузки можно поменять в грубе (загрузчик) - при загрузке надо выбрать нужную запись и ткнуть вроде 'e'.
Подробнее у него внизу экрана написано. Дальше в нужную запись, та что на linux начинается, добавить в конец isolcpus=1
Если будет хорошо - можно добавить "навсегда", прописав либо в /etc/defaults/grub, либо в /boot/grub/grub.cfg.

upd
Вот пример использования isocpus
http://www.anderswallin.net/2010/11/emc2-upgrade/
de-nos
Цитата(psha @ 14.1.2011, 19:04) *
cat /proc/cmdline
Показывает текущие параметры
Параметры загрузки можно поменять в грубе (загрузчик) - при загрузке надо выбрать нужную запись и ткнуть вроде 'e'.
Подробнее у него внизу экрана написано. Дальше в нужную запись, та что на linux начинается, добавить в конец isolcpus=1
Если будет хорошо - можно добавить "навсегда", прописав либо в /etc/defaults/grub, либо в /boot/grub/grub.cfg.

upd
Вот пример использования isocpus
http://www.anderswallin.net/2010/11/emc2-upgrade/

Загрузился с параметром "isolcpus=1" и заработало, как надо. psha благодарность.
Как я понял, этот параметр устанавливает одно ядро под realtime-процессы, и второе под остальные процессы. Но почему это помогло?
psha
Всё очень просто.
Если и realtime и обычные процессы сидят на общем процессоре они делят его время. Причем RT части оно достается гарантировано и весьма часто.
Дальше, X-сервер генерирует пару событий KeyUp/KeyDown. Axis их получает и исполняет первую команду (останавливает движение). Между
этой и следующей командой (перезапуск движения) происходит отбирание контекста у него и реальная остановка двигателей. Поскольку ускорение
поставлено большое, он успевает затормозить их достаточно сильно, чтоб стало заметно.

Если же обычные и RT процессы не делят процессор, то между посылкой двух команд не происходит смены контектсов и прочих радостей, между
командой на торможение и перезапуском проходит слишком мало времени и это не заметно.
По крайней мере с моей точки зрения здесь виноваты смены контекстов.
dposm
Цитата(igor-div @ 17.12.2010, 22:33) *
я тоже столкнулся с такой проблемой, g64 конечно помогает но с динамикой в маче emc не сравнится...да стабильней, но при обработке 3d резьбы время увеличивается в разы, а это часы...и на хрена мне такая стабильность
буду очень благодарен если кто-то меня разубедит и ткнёт носом в настройки или где там ковырнуть...


Да EMC реально сосет по сравнения с мачем.
Сравнил не поленился, с одинаковыми параметрами разгона и скоростями перемещений, даже при использовани g64 - EMC работает в разы медленнее. Причем увеличение параметров G64 просто уродует рельеф. Поставил мач обратно.

Для тех кто занимается раскроем EMC пойдет, но для 3D, да еще и довольно большй площади фрезеровки - нет однозначно.
AlexSpb
у ЕМС параметры ускорения нужно гораздо больше ставить.
как они его считают хз.
как пример в маче -3500,а в емс -13000-одно и то же.
в среднем по скорости одинаково.
dposm
Цитата(AlexSpb @ 20.1.2012, 22:12) *
у ЕМС параметры ускорения нужно гораздо больше ставить.
как они его считают хз.
как пример в маче -3500,а в емс -13000-одно и то же.
в среднем по скорости одинаково.



Да в том то и дело, чтобы хотя бы догнать мач, пришлось такие аццкие ускорения поставить, что на слух их почти не слышно было. И видно что станок реально дергаться начал, балка тяжеленная, стремно как то с такими ускорениями работать.

Я одновременно один и тот же г-код на двух станках запускал, один с мачем - другой с емс, конструкция станков одинаковая.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.