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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

nkp писал(а):надо бы объеденить темы
эта тема про ЕМС, та про Мач
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

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

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

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

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

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

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

Пора приступить к реализации алгоритма оперативного нахождения устанавливаемого расстояния до конца контура.

Вариант первый.

1. При обработке векторного рисунка контура витража вычислять:
- общую длину контура;
- длину каждого сегмента.

2. Прописывать в G-код эту информацию.

3. Переписать «постпроцессор», «читающий» G-коды, чтобы не "ругался" на служебную информацию в G-коде.

4. Написать подпрограмму (скрипт), которая будет сравнивать значение ползунка «выключение насоса» с длиной контура и оперативно вычислять точку выключения насоса.

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

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

Сообщение Nick »

Хм... А это интересно...
В принципе длинну контура можно запросто рассчиатать.
В gкод можем написать например #<len> = длинна или вообще в пин hal или в analog-out запихать.
Осталось придумать, что с ним потом делать... можно суммировать пройденное расстояние... правда тоже не совсем понятно как... можно через current-vel его вычислять, но будет не очень точно. Вопрос в том насколько это будет не точно. :thinking:
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

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

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

Есть пин - расстояние до конца сегмента. Его и использовать. Т.е. имея общую длину контура можно вычитать расстояние до конца сегмента в самом начале движения по этому сегменту. И затем прибавлять расстояние до конца сегмента и сравнивать со значением ползунка "Расстояние до конца контура", которое задает параметр выключения насоса. Если этого не произошло в данном сегменте, то переходим к следующему и т.д.
Попробую нарисовать блок-схему алгоритма.

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

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

Сообщение Nick »

переменные #<имя> = [1+2+3]
или #1 = [1+2+3]

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

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

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

С английским тяжко, но по ссылке основное понятно ;)

Буду прописывать алгоритм поподробнее...
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

тут на форуме металлистов задались вопросом смазки направляющих через определенное расстояние пройденое осью...
так вот об использовании motion.distance-to-go и axis.n.motor-pos-fb читал - но как считать с их помощью - :wik:
Ворон226, как этот motion.distance-to-go на практике применять ???
Последний раз редактировалось nkp 08 июл 2013, 10:04, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

я вот так попробовал:

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

#!/usr/bin/python
import hal 
h = hal.component("path")
h.newpin("dist", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("line", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("out", hal.HAL_FLOAT, hal.HAL_OUT)

h.ready()
l = 0
h['out'] = 0
try:
    while 1:		
	if l !=  h['line']    :
		h['out'] = h['out'] + h['dist']
		l = h['line']		
except KeyboardInterrupt:
    raise SystemExit
    
в хал:

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

loadusr -Wn path python path.py
loadrt conv_s32_float count=1
addf conv-s32-float.0 servo-thread 
net line_s32 conv-s32-float.0.in motion.program-line 
net path motion.distance-to-go path.dist 
net line conv-s32-float.0.out   path.line
может есть внутри емс "считалка" ??
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

nkp писал(а):тут на форуме металлистов задались вопросом смазки направляющих через определенное расстояние пройденое осью...
так вот об использовании motion.distance-to-go и axis.n.motor-pos-fb читал - но как считать с их помощью -
Ворон226, как этот motion.distance-to-go на практике применять ???
Может лучше брать скорость оси и интегрировать ее?
http://linuxcnc.org/docs/html/man/man9/integ.9.html

ИМХО самое оно то что надо.

---
Потом все это дело в wcomp или limit и вывод этого wcomp на пин reset integ и на смазку.
---


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

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

Сообщение nkp »

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

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

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

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

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

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

Вопрос оказался совсем непрост.

Вот первое приближение.
Вступление.
Что мы имеем наверняка?
Общую длину контура можно вычислить на этапе формирования G-кода. Сейчас пока не останавливаюсь на этом. Обозначаем её - LK.
Расстояние до конца сегмента контура. Это пин motion.distance-to-go linux-CNC. Обозначим - dist.
Величина расстояния до конца контура, на которой нужно выключать насос. Определяется на практике. Обозначаем Sc.

Что происходит в насосе во время работы и после его выключения?
При включении насоса давление в системе подачи компонента начинает расти давление. И растет до некоторой предельной величины - далее давление стабилизируется.
Чем выше давление в системе подачи компонента, тем больше вытекает этого компонента уже после отключения насоса.
Получается, что существует некоторая величина времени работы насоса, после которой уже количество вытекшего компонента после выключения насоса не увеличивается. Назовем её - Tн max. Если время работы насоса больше, чем Tн max, то количество вытекшего компонента после отключения насоса величина постоянная. Если время работы насоса меньше, чем Tн max, то величина вытекшего клея Pс = К * Vн * Tн, где
Vн - скорость подачи насоса,
Тн - время работы насоса,
К - некоторый коэффициент, который находится из практики.
Если принять скорость подачи насоса за величину постоянную, то можно также сказать и о длинах контура:
Если длина контура больше некоторой предельной величины для определенного значения скорости подачи насоса, то компонент успеет нарисовать линию, после выключения насоса, длиной - Smax. Если длина контура меньше предельной величины, то длина остаточной лини будет равна :
Sc = K * Vн * Sн, где
Sн - длина контура, нанесенного при включенном насосе.

Что хотелось бы иметь?
Если в LCNC есть пин motion.distance-to-go , который оперативно высчитывается во время работы станка и означает: расстояние до конца сегмента, то, наверняка, в недрах LCNC есть само значение - ДЛИНА СЕГМЕНТА! Вот бы его достать! Назовем его - LS.

Алгоритм работы подпрограммы управления выключением насоса ДО конца контура.
1. Читаем значение переменной LK (длина контура) из программы в G-кодах.
2. Если LK => Lmax , то присваиваем переменной Sc значение Smax. Если LK<Lmax, то Sc = K * Vн * LK, где значения K и Vн устанавливаются соответствующими ползунками на панели управления станком (по практическим таблицам).
3. С началом движения по контуру (я не нашел специального сигнала "Начало контура" в LCNC, потому привязался к значению motion.distance-to-go: равен нулю - конец сегмента, перешел из нуля в некоторое значение - начало движения по сегменту) сравниваем длину контура с длиной сегмента:
если LK - LS > Sc, то присваиваем значение LK = LK - LS и ждем следующего сегмента. Если LK - LS <= Sc, то начинаем искать точку отключения насоса:
LK - dist <= Sc и выключаем насос.

Схематично изобразил алгоритм на рисунке...

(сомневаюсь, чтобы кто-то в этом разобрался...)
Вложения
Блок-схема 01.png (1916 просмотров) <a class='original' href='./download/file.php?id=16173&mode=view' target=_blank>Загрузить оригинал (45.94 КБ)</a>
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Щас погоди... сделаем длинну попробуем поэкспериментировать.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Так, в последней ревизии добавил комментарий
(path len: [и какая длинна])
Теперь, надо придумать как это использовать....
пока мне в голову лезет только одно:
1. запоминаем длинну в пин. Через analog-out -> analog-in.
2. включаем интегратор, который будет считать пройденный путь.
3. сравниваем, если прошли длинну-параметр - останавливаем шпиндель.

Все это делать надо на hal.

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

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

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

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

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

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

Nick писал(а): Только вот это запоминание через два пина и два Gкода мне как-то не нравится...
А почему ДВА G-кода? Вроде бы и нужно только высчитывать длину контура и её через G-код передавать переменной...
Остальное всё оперативно в hal-е.
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

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

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

Сообщение Nick »

Ворон226 писал(а):А почему ДВА G-кода? Вроде бы и нужно только высчитывать длину контура и её через G-код передавать переменной...
так вот в том то и проблема, как его в hal передать? (возможно я туплю и мне не приходит какое-то очень простое решение :) )
nkp писал(а):а длина сегмента и расстояние от начала до конца сегмента - не одно и то же??
Не, есть текущее distance-to-go - оно не с начала сегмента.
Ворон226 писал(а):который оперативно высчитывается во время работы станка и означает: расстояние до конца сегмента, то, наверняка, в недрах LCNC есть само значение - ДЛИНА СЕГМЕНТА! Вот бы его достать!
А зачем? Оно нам и не нужно вроде...

В крайнем случае можно его запоминать при смене текущей строки gкода.
Ответить

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