Вычисление расстояния до конца контура

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

Re: Вычисление расстояния до конца контура

Сообщение nkp »

Nick писал(а):Не, есть текущее distance-to-go - оно не с начала сегмента.
но в начале сегмента пин показывает же полную длину...(ну почти)
выше по теме я использовал это для вычисление траектории - просто берем в каждом сементе только первое значение...
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Ворон226 »

Я это тоже использовал в своем алгоритме: в начальный момент движения по сегменту distance-to-go = длине сегмента.
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Nick »

Даже если так, зачем это нам нужно? Нам нужно расстояние до конца контура, а не до конца сегмента.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Ворон226 »

Если предварительно считать длину сегмента и прописывать её, то можно оперативно сравнивать расстояние до конца СЕГМЕНТА с выставленной величиной для остановки насоса. (у меня в алгоритме подробно прописано). Длину контура LK сравниваем с величиной расстояния до конца контура для выключения насоса Sc, если LK > Sc, то вычитаем длину первого сегмента и опять сравниваем LK - LSi с Sc. Если LK - LSi > Sc , то вычитаем из длины контура длину первого сегмента и ждем следующего сегмента. Если LK - LSi < Sc , то отслеживаем LK - dist = Sc и выключаем насос.

Вроде такая логика. И все можно менять оперативно, кроме длины контура, конечно ;)
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Nick »

Ворон226 писал(а):Если предварительно считать длину сегмента и прописывать её, то можно оперативно сравнивать расстояние до конца СЕГМЕНТА с выставленной величиной для остановки насоса.
Так имхо гораздо удобнее следующий алгоритм:
1. начало контрура: имеем длинну.
2. включаем интегратор, который считает пройденное расстояние.
3. от длинны контура отнимаем значение интегратора и пихаем в wcomp - там по достижении нужного остатка пути отрубаем шпиндель.
3а. также можно по интегратору включать насос не сразу.

И не надо разбивать контур на сегменты, возиться с кучей хитрых вычислений на стыках.

Покатит такое?
Если да, то сейчас накидаю hal и пост процессор.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение nkp »

Nick писал(а):Если да,
если длина контура известна до начала обработки - то чего еще можно желать... ;)
твой алгоритм по моему полностью подходит...
а "кто" вычисляет длину контуров? кам?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Nick »

Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Ворон226 »

Nick писал(а):Покатит такое?
Если да, то сейчас накидаю hal и пост процессор.
Да уж - это будет проще, чем постоянно с сегментами возиться. Согласен.
nkp писал(а):а "кто" вычисляет длину контуров?
Так нет такой функции. :(
Придется вычислять заранее при написании программы в G-кодах. Это отдельный вопрос...
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Nick »

Ворон226 писал(а):Так нет такой функции.
Придется вычислять заранее при написании программы в G-кодах. Это отдельный вопрос...
Так в Gcodetools уже добавил же, перед каждым контуром пишется комментарий с длинной контура. Смотри последнюю ревизию
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Ворон226 »

Nick писал(а):Так в Gcodetools уже добавил же, перед каждым контуром пишется комментарий с длинной контура. Смотри последнюю ревизию
Как так? Пропустил??? Вот тебе и на... СПасибо!!!
Я так понял, что качать тут: http://cnc-club.ru/forum/download/file.php?id=1713 ???
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Nick »

не, качать dev версию отсюда (т.к. добавил только вчера ;) ):
https://launchpad.net/gcodetools

можно через bazaar скачать bzr branch lp:gcodetools (и перед этим sudo apt-get install bzr )
или там по ссылке, нажимаем lp:gcodetools , там внизу тыркаем на самую последнюю ревизию и там скачать tarball.
После того как скачаешь, распаковываешь (если надо) и выполняешь python create_inx.py, чтобы появились нужные inx, после этого копируешь все в стандартный директорий.
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Ворон226 »

В субботу буду пытать... Спасибо!
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Ворон226 »

Nick писал(а):Теперь надо сделать постпроцессор, который переделает эту строчку в нужную нам.
Я так понимаю, остановились на варианте
M67 -> analog-out -> analog.in -> и потом сравнение с integ.
Так?

ЗЫ надо назад в твою тему перебираться :)
Ну да... Для начала нужно сделать простой алгоритм. А потом уже добавить кучу настроек всяких (я тут уже целое исследование надумал - статистику набрать нужно. Но вот для опытов жалко эпоксидного контура - уж очень он дорогой...)
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Nick »

Ок, тогда делаем так:
В additional post processor добавляем:

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

regex(r"\(path len: ([\d\.\-]+)\)",r"M64 P0\nM68 E0 Q\1\nG4 P0.1\nM65 P0\n ");
Это поняет (path len: XXX.XXX) на

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

M64 P0
M68 E0 Q432.17329
G4 P0.1
M65 P0
Потом надо все это подсоединить...
итак:

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

net len <= motion.analog-out-00

# считаем пройденное расстояние
net vel <= motion.current-vel 
net vel => integ.0.in 

# добавляем сброс интегратора по m64 PO
net reset <= motion.digital-out-00
net reset => integ.0.reset

# добавляем сравнение
# максимум
net len => sum2.0.in0
net max <= sum2.0.out
net max => wcomp.0.max

# вход
net path <= integ.0.out 
net path => wcomp.0.in

# минимум
net min => wcomp.0.min
net min => sum2.0.in1
setp sum2.0.gain1 -1

# тут надо бы подключить min куда-нибудь... например к пину pyvcp, чтобы в нем можно было быстро настроить длину контура до/после.

# и включаем шпиндель /можно с чем нибудь этот сигнал потом скрестить/
net spindle-cut <= wcomp.0.out
Как-то так... :)

А ты тренируйся на чем-нибудь по дешевле, на кошках сметане например :).
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Вычисление расстояния до конца контура

Сообщение Ворон226 »

Nick писал(а):А ты тренируйся на чем-нибудь по дешевле, на кошках сметане например
Самое дешевое - жидкое мыло или гель ;) Литр за 40 рублей. И можно многократно использовать ;) Но вязкость другая... Может зубную пасту?

Буду разбирать твой вариант. Если честно, я просто не пользовал интегратор, но теперь разберусь, наверняка.
Хочешь быть счастливым? Будь им!
Ответить

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