Страница 5 из 9

LinuxCNC - Альтернативная кинематика.

Добавлено: 10 май 2012, 13:54
Serg
Эта тема предлагается для обсуждения моих решений некоторых вопросов кинематики в LinuxCNC и других, связанных с ними.

На сегодня стоит задача получить рабочее решение для вот этого монстрика: Многосевой станок лазерной резки листа и профиля #1 - нужно управлять количеством моторов (joints), которое пока не под силу штатным средствам LinuxCNC. Ну и скорее всего и для других проектов, которым окажутся тесными возможности штатной кинематики LinuxCNC.

Если появятся желающие присоединиться к работам по этой тематике, то добро пожаловать в тему.
Оставляю за собой узурпаторское право "отселять" обсуждения, выходящие за рамки этой темы. :tongue:

ВНИМАНИЕ!
Все опубликованные ниже разработки предлагаются "AS IS" (как есть), без каких-либо гарантий, в том числе и по сопровождению
Имеющиеся описания ориентированы на тех, кто более-менее разбирается в LinuxCNC и в его HAL в частности, или хотя-бы прочитал и понял документацию.
Считайте это своеобразным порогом вхождения. Если сделать подробное описание "для чайников", то оные не преминут этим воспользоваться и в случае любых непоняток будут задавать вопросы, которые как правило так или иначе освещены в документации. Отвечать на них я не желаю, не из вредности, а из-за отсутствия у меня на это времени....

Extended Gantry Axis Component for LinuxCNC HAL (egantry)

Описание: https://cncdevice.com/devel/eaxis/egantry.txt
Архив: https://cncdevice.com/devel/eaxis/egant ... re3.tar.gz предыдущая версия: https://cncdevice.com/devel/eaxis/egant ... re2.tar.gz
Устанавливается командой

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

sudo halcompile --install egantry.c
Совместим с LinuxCNC версий 2.6.x и выше. Для уточнения проверяйте у компонента axis.N наличие пинов home-state и homed.

BlackBox userspace component for LinuxCNC HAL

Описание: Re: LinuxCNC - Альтернативная кинематика. #76
Компонент: https://cncdevice.com/devel/misc/BlackBox.py

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Начало темы было такое: :)
PKM писал(а):А что за кинематика? Для твоего мега-станка?
gantry кинематика, которая которая использует только одну axis.N для любого количества приводов оси, ну и решает можество других проблем, сопутствующих штатной gantrykins.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 11 мар 2016, 01:00
Serg
VitalikD писал(а):Такое сложно добавить, если понадобится?
Такого не будет. Этот компонент только для объединения нескольких приводов в одну ось. Шаговики, энкодеры, сервы - всё это за пределами его компетенции.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 09 ноя 2016, 14:59
MGG
Подскажите, есть 2 сервы по Х, только с одной стороны есть датчик HOME, реально ли реализовать, чтоб оба мотора ехали пока первый не наскочит на датчик, после этого оба выставляются по Z индексу, далее один двигатель съезжает на определенный оборот, чтобы они между собой выравнились?

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 09 ноя 2016, 17:06
Serg
Теоретически именно так и будет работать, если датчик HOME подключить к обоим joint.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 14 янв 2017, 00:26
Nikomas
MGG писал(а):Подскажите, есть 2 сервы по Х, только с одной стороны есть датчик HOME, реально ли реализовать, чтоб оба мотора ехали пока первый не наскочит на датчик, после этого оба выставляются по Z индексу, далее один двигатель съезжает на определенный оборот, чтобы они между собой выравнились?
Подскажите как вы реализовали свою задумку. Получилось?

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 21 янв 2017, 18:43
MGG
Nikomas писал(а):Подскажите как вы реализовали свою задумку. Получилось?
Пока нет, валюсь с джоин еррор, стараюсь :)

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 24 июл 2017, 00:15
a321
А можно попросить топикстартера в первом сообщении дать более развернутое описание темы, а также инструкцию по установке, реализации, активации? Например лишь среди прочего между строк читается, я могу ошибаться, что в реализации выравниавания портала вторым двигателем нужен второй драйвер двигателя и нужно задействовать на контроллере еще одну "ось"? Хорошей новостью читается, что датчик (условно) Хоме второй половины портала может быть (условно) где угодно, поскольку его положение явно прописывается в настройках против http://www.cnc-club.ru/forum/viewtopic. ... 7&start=80, требующего одинакового положения датчиков.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 24 июл 2017, 01:51
Serg
Попросить можно, но он, увы, откажет.
Имеющееся описание ориентировано на тех, кто более-менее разбирается в LinuxCNC и в его HAL в частности, или хотя-бы прочитал и понял документацию.
Считайте это своеобразным порогом вхождения. Если сделать подробное описание "для чайников", то оные не преминут этим воспользоваться и в случае любых непоняток будут задавать вопросы, которые как правило так или иначе освещены в документации. Отвечать на них я не желаю, не из вредности, а из-за отсутствия у меня на это времени...

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 02 ноя 2017, 19:48
MGG
Вопрос такой:
Ситуация отхумился, корректировка отработала, далее если я выключаю енейбл на сервах и снова включаю, то оси встают на место с максимальной скоростью, и надо или прехомячиваться, а по большому счету, чтобы лишней нагрузки на портал не было, перегружать линуху. Это фича, баг, или косяк в моем конфиге?
All_hys, acc и все что с этим связано со значением 10

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 03 ноя 2017, 00:35
Serg
Скорее всего не все пины компонента подключены.

Re: spindle-index-enable ?

Добавлено: 16 янв 2018, 15:55
nkp
UAVpilot,
вот такое заметил в твоей теме:
Все опубликованные ниже разработки предлагаются "AS IS" (как есть), без каких-либо гарантий, в том числе и по сопровождению.

а разве с форумного решения может быть какой то спрос?))
или были прецеденты? :)

Re: spindle-index-enable ?

Добавлено: 16 янв 2018, 16:00
Serg
nkp писал(а):а разве с форумного решения может быть какой то спрос?))
или были прецеденты? :)
Ну люди разные попадаются... Несколько раз пользователи моих бесплатных "продуктов" пытались потребовать реальную компенсацию за реальные и мнимые глюки... :)
А по сопровождению - не факт, что какой-то конкретный момент времени у меня будет возможность оказывать помощь.
Я по основной работе уже давно заметил, что обычно чем меньше клиент платит за услуги, тем большего внимания и ништяков он требует... :)

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 16 янв 2018, 17:29
aftaev
UAVpilot писал(а):Несколько раз пользователи моих бесплатных "продуктов" пытались потребовать реальную компенсацию за реальные и мнимые глюки...
Да бывают странные :) Некоторым бесплатно советы даешь где, что купить, они потом на тебя еще бочку катят что не то посоветовал, а нужно было за них все расчеты сделать и посоветовать :idiot:
UAVpilot писал(а):Я по основной работе уже давно заметил, что обычно чем меньше клиент платит за услуги, тем большего внимания и ништяков он требует...
У нас так же.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 21 май 2018, 14:16
Nikomas
UAVpilot, по такому алгоритму egantry сможет отхоумиться?
2018-05-21_142323.jpg (4567 просмотров) <a class='original' href='./download/file.php?id=139460&sid=2850b069b878b7be014b32f4fa11ff72&mode=view' target=_blank>Загрузить оригинал (27.19 КБ)</a>

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

	loadrt egantry count=1 personality=2
	addf  egantry.0                         servo-thread

	setp egantry.0.align-vel 0.5
	setp egantry.0.align-acc 1
	setp egantry.0.align-hyst 0.01
	setp egantry.0.joint.00.correct 2,35
	setp egantry.0.joint.01.correct 1,16


	setp egantry.0.joint.00.max_acceleration   [AXIS_0]MAX_ACCELERATION
	setp egantry.0.joint.00.max_velocity       [AXIS_0]MAX_VELOCITY
	setp egantry.0.joint.01.max_acceleration   [AXIS_0]MAX_ACCELERATION
	setp egantry.0.joint.01.max_velocity       [AXIS_0]MAX_VELOCITY

	# position & feedback
	net x-pos-cmd   egantry.0.axis.motor-pos-cmd  => axis.0.motor-pos-cmd
	net x-pos-fb    egantry.0.axis.motor-pos-fb   => axis.0.motor-pos-fb
	net x1-pos-cmd  egantry.0.joint.00.pos-cmd    => pid.x.command
	net x1-pos-fb   egantry.0.joint.00.pos-fb     <= pid.x.feedback
	net x2-pos-cmd  egantry.0.joint.01.pos-cmd    => pid.a.command
	net x2-pos-fb   egantry.0.joint.01.pos-fb     <= pid.a.feedback

	# enables 
	net x-enable   egantry.0.axis.amp-enable   <= axis.0.amp-enable-out 
	net x1-enable  egantry.0.joint.00.enable   => pid.x.enable
	net x2-enable  egantry.0.joint.01.enable   => pid.a.enable

	# index_ENCODER  
	net x-index-enable    egantry.0.axis.index-enable       <= axis.0.index-enable
	net x1-index-enable   egantry.0.joint.00.index-enable   => pid.x.index-enable
	net x2-index-enable   egantry.0.joint.01.index-enable   => pid.a.index-enable

	# home switches & others
	net x-home-sw          egantry.0.axis.home-sw      => axis.0.home-sw-in 
	net x-joint-home-sw    egantry.0.joint.00.home-sw     egantry.0.joint.01.home-sw <= to_pci.1.pins.pin-24-in
	
	net x-home-state     axis.0.home-state      => egantry.0.axis.home-state
	net x-homed          axis.0.homed           => egantry.0.axis.homed

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 21 май 2018, 16:50
Serg
Если я правильно понял картинку, то да. У MGG было аналогично сделано.

P.S. В *.correct на значения ругнётся. :)

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 21 май 2018, 16:53
Nikomas
UAVpilot писал(а): В *.correct на значения ругнётся.
Понял)))

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 22 май 2018, 13:47
Nikomas
UAVpilot писал(а):Если я правильно понял картинку, то да.
А чем хуже?

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

{AXIS=0}
HOME = 2.35 
HOME_OFFSET = 0.0
...
{AXIS=3}
HOME = 1.16 
HOME_OFFSET = x.x - величина смещения индексной метки относительно ведущей оси.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 22 май 2018, 14:24
Serg
попробуй - расскажешь... :)
Ещё можно вот тут почитать:
Re: Плазморез со смарт-вентиляцией #35
Re: Плазморез со смарт-вентиляцией #40

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 10 июн 2018, 20:22
Nikomas
Включаем станок:
1.png (4333 просмотра) <a class='original' href='./download/file.php?id=141025&sid=2850b069b878b7be014b32f4fa11ff72&mode=view' target=_blank>Загрузить оригинал (185.39 КБ)</a>
Выключаем ENABLE станка в программе (но усилки работают и честно читают энкодеры) и видим как напряжения в портале тянут одну сторону:
2.png (4333 просмотра) <a class='original' href='./download/file.php?id=141026&sid=2850b069b878b7be014b32f4fa11ff72&mode=view' target=_blank>Загрузить оригинал (184.67 КБ)</a>
Теперь оператор, проходя мимо, случайно задел одну из сторон портала и сместил на 1мм:
3.png (4333 просмотра) <a class='original' href='./download/file.php?id=141027&sid=2850b069b878b7be014b32f4fa11ff72&mode=view' target=_blank>Загрузить оригинал (185.03 КБ)</a>
И при следующем включении получаем
В результате получим резкий скачёк половины портала с феерическим грохотом и прочими спецэффектами.
Как этого избежать?

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 11 июн 2018, 00:10
Serg
Мало информации.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 04 июл 2018, 18:29
Nikomas
UAVpilot писал(а):Мало информации.
Еще раз понаблюдал за работой. Вывод: надо как-то подключать offset.

- Включаю станок.
- Энкодеры по нулям.

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

egantry.0.joint.00.pos-fb 0.000
egantry.0.joint.01.pos-fb 0.000
- Ищу начала оси по индексным меткам и одному датчику.
- После поиска начальных точек опытным путем пришел к тому, что ось joint.01 надо "вернуть" на 4мм. Соотв. ввожу egantry.0.joint.01.correct -4 и ось становится там, где мне и необходимо.

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

egantry.0.joint.00.pos-fb 0.000
egantry.0.joint.01.pos-fb -4.000
- Перезапускаю программу.
- egantry видит что показания энкодера расходятся на 4мм рвет joint.01 со всех сил в позицию 0. Грохот стоит тот еще.

Что-то не подключено?
(для просмотра содержимого нажмите на ссылку)

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

    14  float IN            300  egantry.0.align-acc
    14  float IN           0.01  egantry.0.align-hyst
    14  float IN            200  egantry.0.align-vel
    14  bit   IN          FALSE  egantry.0.axis.amp-enable <== x-enable
    14  bit   OUT         FALSE  egantry.0.axis.amp-fault-out
    14  s32   OUT             0  egantry.0.axis.fb-joint
    14  s32   IN              0  egantry.0.axis.home-state <== x-home-state
    14  bit   OUT         FALSE  egantry.0.axis.home-sw ==> x-home-sw
    14  bit   IN          FALSE  egantry.0.axis.homed <== x-homed
    14  bit   I/O         FALSE  egantry.0.axis.index-enable <=> x-index-enable
    14  float IN              0  egantry.0.axis.motor-pos-cmd <== x-pos-cmd
    14  float OUT             0  egantry.0.axis.motor-pos-fb ==> x-pos-fb
    14  bit   OUT         FALSE  egantry.0.axis.neg-lim-sw
    14  bit   OUT         FALSE  egantry.0.axis.pos-lim-sw
    14  bit   IN          FALSE  egantry.0.joint.00.amp-fault-in
    14  float IN              0  egantry.0.joint.00.correct
    14  bit   OUT         FALSE  egantry.0.joint.00.enable ==> x1-enable
    14  float OUT             0  egantry.0.joint.00.f-error
    14  bit   IN          FALSE  egantry.0.joint.00.home-sw <== x-joint-home-sw
    14  bit   I/O         FALSE  egantry.0.joint.00.index-enable <=> x1-index-enable
    14  float IN            300  egantry.0.joint.00.max_acceleration
    14  float IN            200  egantry.0.joint.00.max_velocity
    14  bit   IN          FALSE  egantry.0.joint.00.neg-lim-sw
    14  float OUT             0  egantry.0.joint.00.offset
    14  float OUT             0  egantry.0.joint.00.pos-cmd ==> x1-pos-cmd
    14  float IN             -0  egantry.0.joint.00.pos-fb <== x1-pos-fb
    14  bit   IN          FALSE  egantry.0.joint.00.pos-lim-sw
    14  bit   IN          FALSE  egantry.0.joint.01.amp-fault-in
    14  float IN              0  egantry.0.joint.01.correct
    14  bit   OUT         FALSE  egantry.0.joint.01.enable ==> x2-enable
    14  float OUT             0  egantry.0.joint.01.f-error
    14  bit   IN          FALSE  egantry.0.joint.01.home-sw <== x-joint-home-sw
    14  bit   I/O         FALSE  egantry.0.joint.01.index-enable <=> x2-index-enable
    14  float IN            300  egantry.0.joint.01.max_acceleration
    14  float IN            200  egantry.0.joint.01.max_velocity
    14  bit   IN          FALSE  egantry.0.joint.01.neg-lim-sw
    14  float OUT             0  egantry.0.joint.01.offset
    14  float OUT             0  egantry.0.joint.01.pos-cmd ==> x2-pos-cmd
    14  float IN         0.0004  egantry.0.joint.01.pos-fb <== x2-pos-fb
    14  bit   IN          FALSE  egantry.0.joint.01.pos-lim-sw
    14  s32   OUT          1170  egantry.0.time