Предложение по увеличению скорости работы LinuxCNC
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Предложение по увеличению скорости работы LinuxCNC
По результатам вот этого обсуждения
Начало https://www.linux.org.ru/news/opensourc ... d=15028307 и далее вниз по странице.
Вот у меня какая мысль, для того чтобы интерполировать кривую с некоторой заданной точностью её необходимо разбить не менее чем на m блоков.
Это значит что время прохождения кривой не может быть меньше чем m*servoperiod
И вот в ходе ругани с одним человеком на другом сайте я пришёл к следующей идее:
Контролировть не все блоки, а только каждый k блок, то есть каждый сервопериод посылать пакет координат(вершин) из k блоков, которые контролёр будет с периодом servoperiod/k сам себе задавать и по сервопериоду контролировать координаты только последнего блока.
Тогда время прохождения кривой уменьшится в k раз.
Ну понятно что k должен делить servoperiod на целое число без остатка, то есть делить servoperiod на равные промежутки времени через которые stepgen будет брать из блока новые координаты.
Понятно что число k координат в блоке должно быть настраиваемым и начинаться с 1 вершины что соответствует текущей работе LinuxCNC.
Пожалуй его стоит сделать переменным и указывать для каждого блока индивидуально, что сдедает прохождение траектории в целом более плавным.
Также надо будет сделать параметр который будет ограничивать максимальную длинну сегмента траектории который он может включать в один блок, если передал в блоке более чем одни координаты.
Возможно в блок стоит добавить скорость с которой по мнению рланировщика stepgen должен иметь в конце прохождения этого блока или тогда скорость для каждой координаты из блока.
Предложение тяжёлое, потому как потребует добавления в HAL передачи блоков, пусть и фиксированного размера.
Начало https://www.linux.org.ru/news/opensourc ... d=15028307 и далее вниз по странице.
Вот у меня какая мысль, для того чтобы интерполировать кривую с некоторой заданной точностью её необходимо разбить не менее чем на m блоков.
Это значит что время прохождения кривой не может быть меньше чем m*servoperiod
И вот в ходе ругани с одним человеком на другом сайте я пришёл к следующей идее:
Контролировть не все блоки, а только каждый k блок, то есть каждый сервопериод посылать пакет координат(вершин) из k блоков, которые контролёр будет с периодом servoperiod/k сам себе задавать и по сервопериоду контролировать координаты только последнего блока.
Тогда время прохождения кривой уменьшится в k раз.
Ну понятно что k должен делить servoperiod на целое число без остатка, то есть делить servoperiod на равные промежутки времени через которые stepgen будет брать из блока новые координаты.
Понятно что число k координат в блоке должно быть настраиваемым и начинаться с 1 вершины что соответствует текущей работе LinuxCNC.
Пожалуй его стоит сделать переменным и указывать для каждого блока индивидуально, что сдедает прохождение траектории в целом более плавным.
Также надо будет сделать параметр который будет ограничивать максимальную длинну сегмента траектории который он может включать в один блок, если передал в блоке более чем одни координаты.
Возможно в блок стоит добавить скорость с которой по мнению рланировщика stepgen должен иметь в конце прохождения этого блока или тогда скорость для каждой координаты из блока.
Предложение тяжёлое, потому как потребует добавления в HAL передачи блоков, пусть и фиксированного размера.
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Вроде как основные идеи написал, можно начинать обсуждение
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
В моем контроллере на STM32 (для LinuxCNC) сервопериод = 50 мкс, в то время как сервопериод в самой LinuxCNC обычно = 1000 мкс. Это позволяет сделать вывод шагов плавнее в 20 раз, без каких-либо изменений в LinuxCNC (:
Также у меня есть проект с шаговыми драйверами powerSTEP01, которые отвечают за плавный набор скорости сами, получая задание от LinuxCNC каждый сервопериод.
Вощем, аппаратные внешние контроллеры решают этот вопрос всегда быстрее и лучше.
Также у меня есть проект с шаговыми драйверами powerSTEP01, которые отвечают за плавный набор скорости сами, получая задание от LinuxCNC каждый сервопериод.
Вощем, аппаратные внешние контроллеры решают этот вопрос всегда быстрее и лучше.
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
А нельзя не делить на сервопериоды ,а сделать как в GRBL и передавать прямо команды(ну или конечную точку) и добавить только значение скорости в каждой команде.При этом решается вопрос с короткими командами ,когда контроллер просто не успевает разогнаться до конечной g1 или G0 так как скорость в каждой команде рассчитывает пк.Единственная проблема здесь синхронизация времени между передачами команды компьютером и выполнением команды контроллером но при достаточном буфере внутри контроллера это не проблема даже для операционной системы не реального времени(типа WINDOWS).Просто выдавать сигнал неготовности при определенной степени заполнения буфера.Т е источником синхронизации будет не компьютер ,а микроконтроллер.Тогда протокол передачи команд контроллеру станет более простым и понятным,что позволит его использовать с различными программами на ПК.Кстати при этом пожно будет использовать более медленные интерфейсы (COM или 485)MX_Master писал(а):которые отвечают за плавный набор скорости сами, получая задание от LinuxCNC каждый сервопериод
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Это как?MX_Master писал(а):Это позволяет сделать вывод шагов плавнее в 20 раз, без каких-либо изменений в LinuxCNC (:
например LinuxCNC передаёт контроллеру, что в след. сервоцикле надо генерить шаги со скоростью N, а контроллер что будет делать?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Тут скорее всего имеется ввиду то,что при длинных сервоциклах приходится более резко менять скорость выдачи шагов для корректировки средней скорости за полное время движения,чем при коротких.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Драйвер ничего сам не считает, он просто передаёт новые значения пинов/параметров в/из STM32. А внутри у STM32 свой сервоцикл (я выбрал 50мкс), который не зависит от сервоцикла LinuxCNC. Скорость рассчитывает сам контроллер, в своём сервоцикле.UAVpilot писал(а):Это как?MX_Master писал(а):Это позволяет сделать вывод шагов плавнее в 20 раз, без каких-либо изменений в LinuxCNC (:
например LinuxCNC передаёт контроллеру, что в след. сервоцикле надо генерить шаги со скоростью N, а контроллер что будет делать?..
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
А как происходит синхронизация с LinuxCnc ?Ведь время в контроллере и расчетное в LinuxCnc могут не совпадать.Как избежать накапливание ошибки по времени ну и соответственно отставания или опережения по положению?Я так понимаю,что основное преимущество перед GRBL ?это то ,что основную кривую разгона строит ПК с частотой 1 мс ,а микроконтроллер только делает линейный разгон между соседними точками в 1мс с частотой 50мкс т.е вместо ступенек получается ломаная
Последний раз редактировалось sidor094 02 июн 2019, 13:59, всего редактировалось 1 раз.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Да это тот же stepgen, только внутри STM32 (: Ничего там хитрого нет. LinuxCNC по большому счёту требует только текущую позицию, перед началом новых вычислений планировщика. А вот каким способом и как плавно stepgen делает вывод шагов для LinuxCNC неважно. Успеваешь попадать в нужную позицию или скорость - молодец, претензий нетsidor094 писал(а):А как происходит синхронизация с LinuxCnc ?Ведь время в контроллере и расчетное в LinuxCnc могут не совпадать.Как избежать накапливание ошибки по времени?
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
А откуда он её берёт? Если по какому -нибудь последовательному интерфейсу,то задержка по получению информации о достижении позиции из контроллера может быть довольно большой .Более того,контроллер однозначно отстает от LinuxCNC,соответственно ожидание получения информации по позиции от контроллера тем более не допустимо.MX_Master писал(а):LinuxCNC по большому счёту требует только текущую позицию, перед началом новых вычислений планировщика
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Какую вообще информацию передает LinuxCNC контроллеру каждый сервоцикл 1000 мкс?
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Ethernet, SPI. Передаёт в STM32 новые значения входных пинов и параметров компонента. Получает состояние выходных пинов компонента.
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Это влияет в первую очередь не на плавность прохождения траектории, а на скорость прохождения УП в кадрах.MX_Master писал(а):В моем контроллере на STM32 (для LinuxCNC) сервопериод = 50 мкс, в то время как сервопериод в самой LinuxCNC обычно = 1000 мкс. Это позволяет сделать вывод шагов плавнее в 20 раз, без каких-либо изменений в LinuxCNC (:
Плавность движения это косвенный эффект, которого в зависимости от настроек ускорений одной или нескольких осей может и не быть.
Повышение скорости прохождения УП в кадрах целевой эффект и прямое следствие сделанного мной предложения.
Но впечатление что я один в треде понимаю как и почему сервоцикл и ferror влияют на скорость прохождения УП в кадрах(и почему в кадрах) и сам смысл сделанного мной предложения.
(Я тоже виноват так как плохо объяснил, какой ОП, такое и обсуждение)
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Ну почему же, Сергей (UAVpilot) тоже понимает (:torvn77 писал(а):Но впечатление что я один в треде понимаю как и почему сервоцикл и ferror влияют на скорость прохождения УП в кадрах
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Извините за ,может быть глупые вопросы,просто я плохо знаком с LinuxCNC.И не знаю принципов её внутренней работы.MX_Master писал(а):Ethernet, SPI. Передаёт в STM32 новые значения входных пинов и параметров компонента. Получает состояние выходных пинов компонента.
Разве SPI есть в ПК?Что касается Ethernet,то на мой взгляд протокол обмена сжирает кучу времени и поэтому он выгоден только при обмене большим объемом данных.Кроме того,я не знаю как в LINUX ,а в WINDOWS между командой передать байт и непосредственной передачей может пройти различное(довольно большое время).Команда передачи только сует данное в буфер,а когда WINDOWS соизволит передать байт зависит от того когда освободится процесс и дойдет очередь до этого байта. Что такое пин?В моем понимании это просто нога(вход или выход).И если так ,то как может состояние выходных пинов что-нибудь сообщать о параметрах скорости , положения и состояния контроллера.
Разве скорость прохождения не задает LinuxCNC?Если кадр пройдет быстрее чем задано это не вызовет паузу ,которая в свою очередь вызовет неравномерность шагов?torvn77 писал(а):Это влияет в первую очередь не на плавность прохождения траектории, а на скорость прохождения УП в кадрах.
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Максимальная подача тоже влияет, но речь не о ней.sidor094 писал(а):Разве скорость прохождения не задает LinuxCNC?Если кадр пройдет быстрее чем задано это не вызовет паузу ,которая в свою очередь вызовет неравномерность шагов?
Смотри, станку дали команду идти по кривой.
Но на самом деле станок будет двигаться не по кривой, эта кривая будет разбита на прямые отрезки длинна которых подбираться так, чтобы не выходить за пределы заданного допуска И чтобы каждый отрезок проходился за равное время.
Так как отрезки должны проходится за равное время, то если отрезок из-за ограничений допуска оказыаается слишком коротким то ЧПУ приходится снижать скорость его прохождения(подачу).
Это означает то, что кривая состаящая из таких недостаточно длинных отрезков будет проходиться медленнее, чем прямая той же длинны, так как прямая будет составлена из отрезков полной, оптимальной длинны или вообще состоять из одного отрезка(то есть проходится за один сервопериод)
С другой стороны у ЧПУ с меньшим временем прохождения отрезка число таких неоптимальных укороченных отрезков будет мнньше, так как спм оптимальный отрезок будет иметь мнньшие размеры, и ввиду этого снижение скорости необходимое для прохождения отрезков за равное время так же будет меньшим.
В совокупности это даст меньшее время прохождения УП
-
- Мастер
- Сообщения: 826
- Зарегистрирован: 20 фев 2014, 09:13
- Репутация: 81
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Тут не понятно.Противоречит предидущему предложению.torvn77 писал(а):Так как отрезки должны проходится за равное время, то если отрезок из-за ограничений допуска оказыаается слишком коротким то ЧПУ приходится снижать скорость его прохождения(подачу)
Раз делится на отрезки проходимые за равное время,то как он может оказаться слишком коротким из-за ограничения допуска.Разве эти допуска не учитываются планировщиком на ПК,и что за допуска?И потом если мы бьем один прямой отрезок на ломаную,то это потребует дополнительных разгонов при изменении направленияюда исуммарная длина ломаной всегда больше прямой,что в итоге увеличит время прохождения полного куска.torvn77 писал(а):Но на самом деле станок будет двигаться не по кривой, эта кривая будет разбита на прямые отрезки длинна которых подбираться так, чтобы не выходить за пределы заданного допуска И чтобы каждый отрезок проходился за равное время.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
sidor094 писал(а):я плохо знаком с LinuxCNC
sidor094 писал(а):И не знаю принципов её внутренней работы.
sidor094 писал(а):Кроме того,я не знаю как в LINUX
Чтобы обсуждать предмет, надо в нём разбираться. Предлагаю вам, sidor094, пройти в раздел документации и изучить вопрос. Ну а потом уже обсудим (:sidor094 писал(а):Что такое пин?
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
Требование выдерживать допуск или говоря иначе точность обработки может приводить к разбиванию кривой на очень мелкие отрезки которые будут намного меньше оптимальных.sidor094 писал(а):Раз делится на отрезки проходимые за равное время,то как он может оказаться слишком коротким из-за ограничения допуска.
Требование прохождения отрезков за равное время проявляется в редких случаях на длинных прямых участках длинной большей чем может пройти станок за время прохождения отрезка двигаясь с заданной скоростью.
В этом случае прямой участок разбивается не на один, а на несколько отрезков.
П.С. MX_Master прав, вам надо изучить вопрос, потому что не зная его, вы не понимаете и повод для обсуждения этой темы.
- MX_Master
- Мастер
- Сообщения: 7480
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: Предложение по увеличению скорости работы LinuxCNC
torvn77, а ты давай по новой, в двух словах, объясни, что ты конкретно предлагаешь (: