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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение 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.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Краткое описание компонента egantry:
Формирует управляющие сигналы зависимыми приводами из сигналов axis.N. Компонент
включается между компонентом axis.N и такими компонентами как pid.N, stepgen.N.
Пины egantry.N.axis.* соединяются с аналогичными пинами компонента axis.N. Пины
egantry.N.joint.MM.* соединяются с аналогичными пинами таких компонентов как pid.N,
stepgen.N и реальными датчиками лимитов и т.п.
Параметр personality указывает количество приводов, которыми может управлять каждый
экземляр компонента, по умолчанию - 2. Допустимы значения от 1 до 100.
Компонент позволяет задавать коррецию реальных положений датчиков HOME/Index в виде
смещения относительно их положения одного из приводов (пин egantry.N.joint.MM.correct)
Если после найденых начал (homing) оси, если какой-либо из приводов будет сдвинут
внешним воздействием при выключенном станке на величину, превышающую значение
egantry.N.align-hyst, то при последующем включении компонент произведёт плавное
выравнивание положения приводов со скоростью и ускорением egantry.N.align-vel и
egantry.N.align-acc.
Для корректной работы компонента крайне желательно, чтобы настройки систем PID-привод,
подключаемых к одному компоненту egantry.N были одинаковыми или максимально близкими.
Ссылки на файлы в первом сообщении темы.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

у меня параметры egantry.0.align-vel и egantry.0.align-acc, почему то ни как не влият на работу двигателей, при рассогласовании - они двигаються с максимальным ускорением и скоростью.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

А какие значения стоят?
Попробуй поставить ускорение в половину от MAX_ACCELERATION оси, а скорость равную HOME_SEARCH_VEL.
Ну конфиги свои покажи... Или хотя-бы

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

$ halcmd show pin egantry.0
В качестве теста сам скачал по ссылке, установил, проверил - работает как и задумано...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

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

cnc@cnc:~$ halcmd show pin egantry.0
Component Pins:
Owner   Type  Dir         Value  Name
     9  float IN            750  egantry.0.align-acc
     9  float IN           0.01  egantry.0.align-hyst
     9  float IN             50  egantry.0.align-vel
     9  bit   IN          FALSE  egantry.0.axis.amp-enable
     9  s32   IN              0  egantry.0.axis.home-state <== y-home-start
     9  bit   OUT          TRUE  egantry.0.axis.home-sw ==> home-y
     9  bit   IN          FALSE  egantry.0.axis.homed
     9  bit   I/O         FALSE  egantry.0.axis.index-enable <=> y-index-enable
     9  float IN       250.0293  egantry.0.axis.motor-pos-cmd <== ypos-cmd
     9  float OUT      250.0283  egantry.0.axis.motor-pos-fb ==> ypos-fb
     9  bit   OUT         FALSE  egantry.0.axis.neg-lim-sw
     9  bit   OUT         FALSE  egantry.0.axis.pos-lim-sw
     9  float IN              0  egantry.0.joint.00.correct
     9  bit   OUT         FALSE  egantry.0.joint.00.enable
     9  bit   IN          FALSE  egantry.0.joint.00.home-sw <== switches-y1
     9  bit   I/O         FALSE  egantry.0.joint.00.index-enable <=> y1-index-enable
     9  bit   IN          FALSE  egantry.0.joint.00.neg-lim-sw
     9  float OUT      1.302308  egantry.0.joint.00.offset
     9  float OUT       248.727  egantry.0.joint.00.pos-cmd ==> y1pos-cmd
     9  float IN        248.727  egantry.0.joint.00.pos-fb <== y1pos-fb
     9  bit   IN          FALSE  egantry.0.joint.00.pos-lim-sw
     9  float IN              0  egantry.0.joint.01.correct
     9  bit   OUT         FALSE  egantry.0.joint.01.enable
     9  bit   IN          FALSE  egantry.0.joint.01.home-sw <== switches-y2
     9  bit   I/O         FALSE  egantry.0.joint.01.index-enable <=> y2-index-enable
     9  bit   IN          FALSE  egantry.0.joint.01.neg-lim-sw
     9  float OUT      87.85431  egantry.0.joint.01.offset
     9  float OUT       162.175  egantry.0.joint.01.pos-cmd ==> y2pos-cmd
     9  float IN        162.174  egantry.0.joint.01.pos-fb <== y2pos-fb
     9  bit   IN          FALSE  egantry.0.joint.01.pos-lim-sw

cnc@cnc:~$ 

изменение скорости и ускорения ни как не влияют.
Вложения
comp.ini
(4.15 КБ) 1176 скачиваний
comp.hal
(12.94 КБ) 1140 скачиваний
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Надо ВСЕ пины egantry.0.axis.* присоединить к axis.1
В частности выравнивание не работает из-за неприсоединённых egantry.0.axis.amp-enable, egantry.0.axis.homed, egantry.0.joint.00.enable и egantry.0.joint.01.enable.

Вот пример конфига с моего стенда:

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

loadrt egantry names=a0 personality=2
addf a0 servo-thread

setp a0.align-acc [AXIS_0]ALIGN_ACCELERATION
setp a0.align-vel [AXIS_0]ALIGN_VELOCITY
#setp a0.joint.01.correct 10

net x-pos-cmd  axis.0.motor-pos-cmd => a0.axis.motor-pos-cmd
net x-pos-fb   axis.0.motor-pos-fb => a0.axis.motor-pos-fb
net x1-pos-cmd a0.joint.00.pos-cmd
net x1-pos-fb  a0.joint.00.pos-fb
net x2-pos-cmd a0.joint.01.pos-cmd
net x2-pos-fb  a0.joint.01.pos-fb

net x-enable   axis.0.amp-enable-out => a0.axis.amp-enable
net x1-enable  <= a0.joint.00.enable
net x2-enable  <= a0.joint.01.enable

net x-index-enable axis.0.index-enable a0.axis.index-enable
net x1-index-enable => a0.joint.00.index-enable
net x2-index-enable => a0.joint.01.index-enable

net x-home-sw  a0.axis.home-sw  => axis.0.home-sw-in
net x-neg-limit-sw a0.axis.neg-lim-sw => axis.0.neg-lim-sw-in
net x-pos-limit-sw a0.axis.pos-lim-sw => axis.0.pos-lim-sw-in

net x1-home-limit => a0.joint.00.home-sw a0.joint.00.neg-lim-sw
net x2-home-limit => a0.joint.01.home-sw a0.joint.01.neg-lim-sw

net x-home-state axis.0.home-state => a0.axis.home-state
net x-homed axis.0.homed => a0.axis.homed

#*******************
#  AXIS X1
#*******************
net x1-index-enable  <=>  pid.x1.index-enable
net x1-enable       => pid.x1.enable
net x1-output       => pid.x1.output
net x1-pos-cmd     => pid.x1.command
net x1-vel-fb       => pid.x1.feedback-deriv
net x1-pos-fb       => pid.x1.feedback

#net x1-index-enable         =>  axis.0.index-enable

# ---setup home / limit switch signals---
#net x1-home-sw     =>  axis.0.home-sw-in
#net x1-neg-limit     =>  axis.0.neg-lim-sw-in axis.0.home-sw-in
#net x-pos-limit     =>  axis.0.pos-lim-sw-in

#*******************
#  AXIS X2
#*******************

net x2-index-enable  <=>  pid.x2.index-enable
net x2-enable       => pid.x2.enable
net x2-output       => pid.x2.output
net x2-pos-cmd     => pid.x2.command
net x2-vel-fb       => pid.x2.feedback-deriv
net x2-pos-fb       => pid.x2.feedback

#net x2-index-enable         =>  axis.3.index-enable

# ---setup home / limit switch signals---
#net x2-home-sw     =>  axis.3.home-sw-in
#net x2-neg-limit     =>  axis.3.neg-lim-sw-in axis.3.home-sw-in
#net x-pos-limit     =>  axis.3.pos-lim-sw-in

Поудалял всё, что не относится к делу.

А вот кино как оно работает:

http://youtu.be/pbocrKjlymo
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

переподключил все работает также (при рассогласовании и коррекции - двигатели крутяться с максимальным ускорением и скоростью)
Может из за того что у меня версия linuxCNC 2.6.5, там еще в .ini нет отдельных настроек для joint и axis

чать hal

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

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

setp  egantry.0.align-vel 50
setp  egantry.0.align-acc 100
setp  egantry.0.align-hyst 0.05
setp  egantry.0.align-hyst 0.05
setp  egantry.0.joint.01.correct 10

# position & feedback
net y-pos-cmd   egantry.0.axis.motor-pos-cmd  => axis.1.motor-pos-cmd
net y-pos-fb    egantry.0.axis.motor-pos-fb   => axis.1.motor-pos-fb
net y1-pos-cmd  egantry.0.joint.00.pos-cmd    => pid.y.command
net y1-pos-fb   egantry.0.joint.00.pos-fb     <= pid.y.feedback
net y2-pos-cmd  egantry.0.joint.01.pos-cmd    => pid.a.command
net y2-pos-fb   egantry.0.joint.01.pos-fb     <= pid.a.feedback

# enables 
net y-enable   egantry.0.axis.amp-enable   <= axis.1.amp-enable-out 
net y1-enable  egantry.0.joint.00.enable   => pid.y.enable
net y2-enable  egantry.0.joint.01.enable   => pid.a.enable

# index_ENC  
net y-index-enable    egantry.0.axis.index-enable       <= axis.1.index-enable
net y1-index-enable   egantry.0.joint.00.index-enable   => pid.y.index-enable
net y2-index-enable   egantry.0.joint.01.index-enable   => pid.a.index-enable

# home switches & othrs
net y-home-sw     egantry.0.axis.home-sw      => axis.1.home-sw-in
net y1-home-sw    egantry.0.joint.00.home-sw  <= hm2_5i20.0.gpio.024.in_not
net y2-home-sw    egantry.0.joint.01.home-sw  <= hm2_5i20.0.gpio.026.in_not

net y-home-state     axis.1.home-state      => egantry.0.axis.home-state
net y-homed          axis.1.homed           => egantry.0.axis.homed

########## egantry ###########################


#*******************
#  AXIS Y +Y1
#*******************

net y-output       => pid.y.output
net y-vel-fb        => pid.y.feedback-deriv

net y-output                             => hm2_5i20.0.pwmgen.01.value
net y-enable                             => hm2_5i20.0.pwmgen.01.enable

net y1-pos-fb              <=  hm2_5i20.0.encoder.01.position
net y-vel-fb               <=  hm2_5i20.0.encoder.01.velocity
net y-pos-rawcounts        <=  hm2_5i20.0.encoder.01.rawcounts

#*******************
#  AXIS Y2
#*******************

net a-output       => pid.a.output
net a-vel-fb       => pid.a.feedback-deriv

net a-output                             => hm2_5i20.0.pwmgen.03.value
net a-enable     axis.3.amp-enable-out   => hm2_5i20.0.pwmgen.03.enable


net y2-pos-fb              <=  hm2_5i20.0.encoder.03.position
net a-vel-fb               <=  hm2_5i20.0.encoder.03.velocity
net a-pos-rawcounts        <=  hm2_5i20.0.encoder.03.rawcounts



Вложения
comp.hal
(11.64 КБ) 1066 скачиваний
comp.ini
(4.15 КБ) 1129 скачиваний
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Вроде правильно подключено (есть огрехи, но они не влияют).
Покажи результат "halcmd show pin egantry.0" после хоминга, после выключения и сдвига одной оси, после включения и выравнивания.
Или лучше в халскопе (скриншот) процесса выравнивания, интересуют сигналы
egantry.0.axis.motor-pos-cmd
egantry.0.axis.motor-pos-fb
egantry.0.joint.00.pos-cmd
egantry.0.joint.00.pos-fb
egantry.0.joint.01.pos-cmd
egantry.0.joint.01.pos-fb
egantry.0.axis.amp-enable
egantry.0.axis.home-state
egantry.0.axis.homed
(парные "лучи" pos-cmd и pos-fb можно совместить, чтоб много места не занимали)
umerov писал(а):Может из за того что у меня версия linuxCNC 2.6.5, там еще в .ini нет отдельных настроек для joint и axis
Нет, это не важно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

HOME_SEARCH_VEL = -50
HOME_LATCH_VEL = 3
HOME_FINAL_VEL = 10
HOME_USE_INDEX = NO
HOME_SEQUENCE = 0
Screenshot-HAL Oscilloscope.png (4178 просмотров) <a class='original' href='./download/file.php?id=41176&sid=49c27ac92684403793c4dd6611417222&mode=view' target=_blank>Загрузить оригинал (86.43 КБ)</a>
во время хоминга

после момент корреции положения
Screenshot-HAL Oscilloscope-1.png (4178 просмотров) <a class='original' href='./download/file.php?id=41177&sid=49c27ac92684403793c4dd6611417222&mode=view' target=_blank>Загрузить оригинал (91.91 КБ)</a>
после хоминга

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

cnc@cnc:~$ halcmd show pin egantry.0
Component Pins:
Owner   Type  Dir         Value  Name
    14  float IN            100  egantry.0.align-acc
    14  float IN           0.05  egantry.0.align-hyst
    14  float IN             50  egantry.0.align-vel
    14  bit   IN           TRUE  egantry.0.axis.amp-enable <== y-enable
    14  s32   IN              0  egantry.0.axis.home-state <== y-home-state
    14  bit   OUT         FALSE  egantry.0.axis.home-sw ==> y-home-sw
    14  bit   IN           TRUE  egantry.0.axis.homed <== y-homed
    14  bit   I/O         FALSE  egantry.0.axis.index-enable <=> y-index-enable
    14  float IN      -114.4412  egantry.0.axis.motor-pos-cmd <== y-pos-cmd
    14  float OUT     -114.4432  egantry.0.axis.motor-pos-fb ==> y-pos-fb
    14  bit   OUT         FALSE  egantry.0.axis.neg-lim-sw
    14  bit   OUT         FALSE  egantry.0.axis.pos-lim-sw
    14  float IN              0  egantry.0.joint.00.correct
    14  bit   OUT          TRUE  egantry.0.joint.00.enable ==> y1-enable
    14  bit   IN          FALSE  egantry.0.joint.00.home-sw <== y1-home-sw
    14  bit   I/O         FALSE  egantry.0.joint.00.index-enable <=> y1-index-enable
    14  bit   IN          FALSE  egantry.0.joint.00.neg-lim-sw
    14  float OUT    0.09476744  egantry.0.joint.00.offset
    14  float OUT      -114.536  egantry.0.joint.00.pos-cmd ==> y1-pos-cmd
    14  float IN       -114.535  egantry.0.joint.00.pos-fb <== y1-pos-fb
    14  bit   IN          FALSE  egantry.0.joint.00.pos-lim-sw
    14  float IN              0  egantry.0.joint.01.correct
    14  bit   OUT          TRUE  egantry.0.joint.01.enable ==> y2-enable
    14  bit   IN          FALSE  egantry.0.joint.01.home-sw <== y2-home-sw
    14  bit   I/O         FALSE  egantry.0.joint.01.index-enable <=> y2-index-enable
    14  bit   IN          FALSE  egantry.0.joint.01.neg-lim-sw
    14  float OUT     -56.98623  egantry.0.joint.01.offset
    14  float OUT       -57.455  egantry.0.joint.01.pos-cmd ==> y2-pos-cmd
    14  float IN        -57.458  egantry.0.joint.01.pos-fb <== y2-pos-fb
    14  bit   IN          FALSE  egantry.0.joint.01.pos-lim-sw
после сдвига одной оси

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

cnc@cnc:~$ halcmd show pin egantry.0
Component Pins:
Owner   Type  Dir         Value  Name
    14  float IN            100  egantry.0.align-acc
    14  float IN           0.05  egantry.0.align-hyst
    14  float IN             50  egantry.0.align-vel
    14  bit   IN          FALSE  egantry.0.axis.amp-enable <== y-enable
    14  s32   IN              0  egantry.0.axis.home-state <== y-home-state
    14  bit   OUT         FALSE  egantry.0.axis.home-sw ==> y-home-sw
    14  bit   IN           TRUE  egantry.0.axis.homed <== y-homed
    14  bit   I/O         FALSE  egantry.0.axis.index-enable <=> y-index-enable
    14  float IN      -109.3402  egantry.0.axis.motor-pos-cmd <== y-pos-cmd
    14  float OUT     -109.3402  egantry.0.axis.motor-pos-fb ==> y-pos-fb
    14  bit   OUT         FALSE  egantry.0.axis.neg-lim-sw
    14  bit   OUT         FALSE  egantry.0.axis.pos-lim-sw
    14  float IN              0  egantry.0.joint.00.correct
    14  bit   OUT         FALSE  egantry.0.joint.00.enable ==> y1-enable
    14  bit   IN          FALSE  egantry.0.joint.00.home-sw <== y1-home-sw
    14  bit   I/O         FALSE  egantry.0.joint.00.index-enable <=> y1-index-enable
    14  bit   IN          FALSE  egantry.0.joint.00.neg-lim-sw
    14  float OUT    0.09476744  egantry.0.joint.00.offset
    14  float OUT      -114.536  egantry.0.joint.00.pos-cmd ==> y1-pos-cmd
    14  float IN       -114.536  egantry.0.joint.00.pos-fb <== y1-pos-fb
    14  bit   IN          FALSE  egantry.0.joint.00.pos-lim-sw
    14  float IN              0  egantry.0.joint.01.correct
    14  bit   OUT         FALSE  egantry.0.joint.01.enable ==> y2-enable
    14  bit   IN          FALSE  egantry.0.joint.01.home-sw <== y2-home-sw
    14  bit   I/O         FALSE  egantry.0.joint.01.index-enable <=> y2-index-enable
    14  bit   IN          FALSE  egantry.0.joint.01.neg-lim-sw
    14  float OUT     -56.98623  egantry.0.joint.01.offset
    14  float OUT       -52.354  egantry.0.joint.01.pos-cmd ==> y2-pos-cmd
    14  float IN        -52.354  egantry.0.joint.01.pos-fb <== y2-pos-fb
    14  bit   IN          FALSE  egantry.0.joint.01.pos-lim-sw
после включения и выравнивания

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

cnc@cnc:~$ halcmd show pin egantry.0
Component Pins:
Owner   Type  Dir         Value  Name
    14  float IN            100  egantry.0.align-acc
    14  float IN           0.05  egantry.0.align-hyst
    14  float IN             50  egantry.0.align-vel
    14  bit   IN           TRUE  egantry.0.axis.amp-enable <== y-enable
    14  s32   IN              0  egantry.0.axis.home-state <== y-home-state
    14  bit   OUT         FALSE  egantry.0.axis.home-sw ==> y-home-sw
    14  bit   IN           TRUE  egantry.0.axis.homed <== y-homed
    14  bit   I/O         FALSE  egantry.0.axis.index-enable <=> y-index-enable
    14  float IN      -109.3402  egantry.0.axis.motor-pos-cmd <== y-pos-cmd
    14  float OUT     -109.3422  egantry.0.axis.motor-pos-fb ==> y-pos-fb
    14  bit   OUT         FALSE  egantry.0.axis.neg-lim-sw
    14  bit   OUT         FALSE  egantry.0.axis.pos-lim-sw
    14  float IN              0  egantry.0.joint.00.correct
    14  bit   OUT          TRUE  egantry.0.joint.00.enable ==> y1-enable
    14  bit   IN          FALSE  egantry.0.joint.00.home-sw <== y1-home-sw
    14  bit   I/O         FALSE  egantry.0.joint.00.index-enable <=> y1-index-enable
    14  bit   IN          FALSE  egantry.0.joint.00.neg-lim-sw
    14  float OUT    0.09476744  egantry.0.joint.00.offset
    14  float OUT      -109.435  egantry.0.joint.00.pos-cmd ==> y1-pos-cmd
    14  float IN       -109.436  egantry.0.joint.00.pos-fb <== y1-pos-fb
    14  bit   IN          FALSE  egantry.0.joint.00.pos-lim-sw
    14  float IN              0  egantry.0.joint.01.correct
    14  bit   OUT          TRUE  egantry.0.joint.01.enable ==> y2-enable
    14  bit   IN          FALSE  egantry.0.joint.01.home-sw <== y2-home-sw
    14  bit   I/O         FALSE  egantry.0.joint.01.index-enable <=> y2-index-enable
    14  bit   IN          FALSE  egantry.0.joint.01.neg-lim-sw
    14  float OUT     -56.98623  egantry.0.joint.01.offset
    14  float OUT       -52.354  egantry.0.joint.01.pos-cmd ==> y2-pos-cmd
    14  float IN        -52.356  egantry.0.joint.01.pos-fb <== y2-pos-fb
    14  bit   IN          FALSE  egantry.0.joint.01.pos-lim-sw

Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Ну вот-же оно выравнивается со скоростью 50...
Screenshot-HAL Oscilloscope-1.png (4166 просмотров) <a class='original' href='./download/file.php?id=41191&sid=49c27ac92684403793c4dd6611417222&mode=view' target=_blank>Загрузить оригинал (88.87 КБ)</a>
В конце есть маленький скачёк, но это видимо из-за увеличения egantry.0.align-hyst до 0.05. Это значение не стоит увеличивать. Имеет смысл уменьшать на станках с точностью лучше, чем 0.01, но так, чтобы оно было больше колебаний привода при удержании.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

egantry версия 1.0pre1:

Добавлены пины:

egantry.N.joint.MM.amp-fault-in bit in - Вход сигнала ошибки от усилителя
egantry.N.axis.amp-fault-out bit out - Логическое И всех входов egantry.N.joint.MM.amp-fault-in

egantry.N.joint.MM.ferror float out - Величина ошибки позиционирования привода
egantry.N.axis.fb-joint s32 out - Номер привода, актуальная позиция которого используется для оси.

Теперь в качестве актуальной позиции (feedback) оси используется актуальная позиция привода, у которого в данный момент наибольшая ошибка позиционирования (egantry.N.joint.MM.ferror). Это позволяет оси (axis.N) правильно отрабатывать превышение ошибки позиционирования (FERROR) по любому из приводов. egantry.N.axis.fb-joint укажет привод, на котором произошло превышение.

Обновлённые файлы в первом сообщении.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

egantry версия 1.0pre2:

Исправлена ошибка: при хомлении "из далека" (например с другого края стола) и при использовании уточнения по индексу иногда возникала ошибка "joint following error".

Обновлённые файлы в первом сообщении.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

В чем отличия?

egantry.N.joint.MM.offset float out
Смещение позиции привода относительно позиции оси
egantry.N.joint.MM.correct float in (default: 0.0)
Коррекция позиции начала привода относительно других
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Как минимум в направлении сигнала. :)
offset - это смещение реальной позиции привода относительно нулевой позиции оси. В обычном случае после хомления будет равно расстоянию, которое проехал привод до датчика HOME. В случае уточнения по индексу будет равен (или очень близко) нулю. Чисто информационный пин, вне компонента не очень-то и нужен.

correct - это величина конструктивной коррекции взаимоположения приводов. Например ставите датчики HOME на приводах портала примерно одинаково, выполняете процедуру хомления и замеряете перпендикулярность портала относительно оси. Например портал оказывается непрепендикулярен и чтобы это исправить нужно одну его "ногу" сдвинуть скажем на 5мм. Для этого не требуется передвигать датчики HOME, а достаточно на correct соотв. привода подать значение этого смещения:
setp egantry.N.joint.MM.correct 5
теперь при хомлении оси приводы сами будут учитывать эту поправку и выравнивать портал.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

Screenshot-HAL Oscilloscope.png (3888 просмотров) <a class='original' href='./download/file.php?id=51664&sid=49c27ac92684403793c4dd6611417222&mode=view' target=_blank>Загрузить оригинал (74.89 КБ)</a>
Почемуто какоето не соответствие
pid.y => Y1
pid.v => Y2
pid.y.error, pid.v.error Ошибка малькая, но уже на выходе egantry.0.joint.00.ferror и egantry.0.joint.01.ferror гдето в 10 раз больше, тоже самое и на выходе egantry.0.axis.motor-pos-fb
В чем может быть причина?

Настраивал параметры PID двигателей ориентируясь на pid.y.error, pid.v.error
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

pid.N.error - это ошибка после того как PID отработал цикл, а egantry.N.joint.MM.ferror это ошибка, которую ещё только предстоит скомпенсировать PID'у в очередном сервоцикле.
Или иначе:
pid.N.error - показывает насколько точно PID выполнил задание, а egantry.N.joint.MM.ferror - насколько надо будет передвинуть привод в следующем сервоцикле.
С одиночной осью без egantry будет тот-же самый эффект.
umerov писал(а):Настраивал параметры PID двигателей ориентируясь на pid.y.error, pid.v.error
так и надо делать.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

Спасибо, теперь понятно.
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

f-error.png (3855 просмотров) <a class='original' href='./download/file.php?id=51714&sid=49c27ac92684403793c4dd6611417222&mode=view' target=_blank>Загрузить оригинал (64.11 КБ)</a>
очень странно, сейчас проверил на одиночных осях pid.error такойже как и axis.f-error.
проверил конфигурацию и с gantry.comp (более простой компонент) - там такое же не соответствие

Может подправить PID чтоб egantry.0.axis.motor-pos-fb был с минимальной ошибкой?
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

Еще заметил - при маленькой скорости pid.y.error, pid.v.error примерно равны egantry.0.joint.00.ferror и egantry.0.joint.01.ferror, но на масимальной скорости различия существенны. (Макимальная скорость 15 м. в минуту), может компонент - не успевает обрабатывать показания энкодера?

попробывал и на стандартной кинематике gantry - там все нормально
gantry.png (3824 просмотра) <a class='original' href='./download/file.php?id=51758&sid=49c27ac92684403793c4dd6611417222&mode=view' target=_blank>Загрузить оригинал (73.14 КБ)</a>
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

umerov писал(а):очень странно, сейчас проверил на одиночных осях pid.error такойже как и axis.f-error.
Я в том смысле, если между axis.N и pid.N воткнуть ещё какой-нибудь компонент (в обе стороны), то будет такое-же "запаздывание".
Как примерно это происходит: функции всех компонентов, поставленных в очередь обработки (командой addf) поочерёдно получают возможность выполнится (условно назовём это "квантом работы") по разу в течении каждого сервоцикла. При этом входящие данные функция получает в начале этого "кванта", а результаты выдаёт на выходные пины в конце "кванта". Теперь представим цепочку компонентов:
addf axis.N servo-thread
addf egantry.N servo-thread
addf pid.N servo-thread
при этом значение пинов pos-cmd к моменту завершения кванта для axis.N и перед началом кванта для egantry.N окажется на выходе axis.N и на входе egantry.N - т.е. никакой задержки не будет. Тоже самое произодёт и для egantry.N -> pid.N. А вот значение пинов pos-fb должно будет продвигаться в обратном порядке (как-бы против течение) - значение feedback энкодера одновременно подаётся на и на pid.N.feedback и на egantry.N.joint.MM.pos-fb, после кванта работы для egantry.N соотв. значение появляется на выходе egantry.N.axis.motor-pos-fb, но засада в том, что в данном сервоцикле функция axis.N уже отработала и свежее значение pos-fb она увидит только в следующем сервоцикле.
"Париться" по этому поводу не стоит, на точность это никак не влияет (при правильной очереди на "кванты") - управляющее задание доходит до PID и отрабатывается им без задержек, задерживается сигнал, который нужен только для расчёта f-error.
umerov писал(а):Еще заметил - при маленькой скорости pid.y.error, pid.v.error примерно равны egantry.0.joint.00.ferror и egantry.0.joint.01.ferror, но на масимальной скорости различия существенны.
Всё правильно, разница равна изменению положению оси за сервоцикл.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
umerov
Кандидат
Сообщения: 79
Зарегистрирован: 18 янв 2012, 21:22
Репутация: 21
Откуда: Украина
Контактная информация:

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

Сообщение umerov »

теперь все прояснилось.
вот еще тема описывает этот процесс http://www.cnc-club.ru/forum/viewtopic. ... iew=unread

И еще один вопрос - если установить частоту servo-thread вместо 1 мс. => в 0.1 мс. если в этом смысл, сомжет ли пид двигателей отрабатывать траекторию точнее?
Ответить

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