Страница 2 из 3
Re: Вычисление расстояния до конца контура
Добавлено: 18 май 2013, 21:55
aftaev
nkp писал(а):надо бы объеденить темы
эта тема про ЕМС, та про Мач
Re: Вычисление расстояния до конца контура
Добавлено: 18 май 2013, 21:58
nkp
aftaev писал(а):эта тема про ЕМС, та про Мач
пардон...
Re: Вычисление расстояния до конца контура
Добавлено: 18 май 2013, 22:20
Ворон226
Необходимо найти расстояние до конца контура. При чем это расстояние должно быть переменной (устанавливаться "движком" на панели). При совпадении расстояния до конца контура и установленного значение - событие ( а там разрулим что делать с событием).
Вроде так.
Re: Вычисление расстояния до конца контура
Добавлено: 02 июл 2013, 07:52
Ворон226
Пора приступить к реализации алгоритма оперативного нахождения устанавливаемого расстояния до конца контура.
Вариант первый.
1. При обработке векторного рисунка контура витража вычислять:
- общую длину контура;
- длину каждого сегмента.
2. Прописывать в G-код эту информацию.
3. Переписать «постпроцессор», «читающий» G-коды, чтобы не "ругался" на служебную информацию в G-коде.
4. Написать подпрограмму (скрипт), которая будет сравнивать значение ползунка «выключение насоса» с длиной контура и оперативно вычислять точку выключения насоса.
Думаю, что подобная программа может пригодится и на других станках (плазморез, автораздатчик кормов и т.п.)
Re: Вычисление расстояния до конца контура
Добавлено: 02 июл 2013, 09:39
Nick
Хм... А это интересно...
В принципе длинну контура можно запросто рассчиатать.
В gкод можем написать например #<len> = длинна или вообще в пин hal или в analog-out запихать.
Осталось придумать, что с ним потом делать... можно суммировать пройденное расстояние... правда тоже не совсем понятно как... можно через current-vel его вычислять, но будет не очень точно. Вопрос в том насколько это будет не точно.

Re: Вычисление расстояния до конца контура
Добавлено: 02 июл 2013, 16:05
Ворон226
Есть пин - расстояние до конца сегмента. Его и использовать. Т.е. имея общую длину контура можно вычитать расстояние до конца сегмента в самом начале движения по этому сегменту. И затем прибавлять расстояние до конца сегмента и сравнивать со значением ползунка "Расстояние до конца контура", которое задает параметр выключения насоса. Если этого не произошло в данном сегменте, то переходим к следующему и т.д.
Попробую нарисовать блок-схему алгоритма.
А вот можно ли в G-кодах делать строку, которую будет понимать CNC? Например организовать переменную (длина контура). Я с этим пока не сталкивался...
Re: Вычисление расстояния до конца контура
Добавлено: 02 июл 2013, 16:14
Nick
переменные #<имя> = [1+2+3]
или #1 = [1+2+3]
забыл, как у тебя с английским?
http://linuxcnc.org/docs/html/gcode/ove ... parameters
Re: Вычисление расстояния до конца контура
Добавлено: 02 июл 2013, 17:01
Ворон226
С английским тяжко, но по ссылке основное понятно
Буду прописывать алгоритм поподробнее...
Re: Вычисление расстояния до конца контура
Добавлено: 08 июл 2013, 08:24
nkp
тут на форуме металлистов задались вопросом смазки направляющих через определенное расстояние пройденое осью...
так вот об использовании
motion.distance-to-go и
axis.n.motor-pos-fb читал - но как считать с их помощью -
Ворон226, как этот
motion.distance-to-go на практике применять ???
Re: Вычисление расстояния до конца контура
Добавлено: 08 июл 2013, 09:56
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
может есть внутри емс "считалка" ??
Re: Вычисление расстояния до конца контура
Добавлено: 08 июл 2013, 12:21
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 и на смазку.
---
ЗЫ А чего ссылку не дал?
Re: Вычисление расстояния до конца контура
Добавлено: 08 июл 2013, 15:13
nkp
Nick писал(а):ЗЫ А чего ссылку не дал?
http://www.chipmaker.ru/topic/113606/
Re: Вычисление расстояния до конца контура
Добавлено: 09 июл 2013, 06:49
Ворон226
Со смазкой все просто - считай количество степов или время движения и подавай масло. Тут вопрос немного иной. Я молчу не оттого, что не вижу - думаю...
Re: Вычисление расстояния до конца контура
Добавлено: 09 июл 2013, 17:46
Ворон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 и выключаем насос.
Схематично изобразил алгоритм на рисунке...
(сомневаюсь, чтобы кто-то в этом разобрался...)
Re: Вычисление расстояния до конца контура
Добавлено: 09 июл 2013, 18:04
Nick
Щас погоди... сделаем длинну попробуем поэкспериментировать.
Re: Вычисление расстояния до конца контура
Добавлено: 09 июл 2013, 19:56
Nick
Так, в последней ревизии добавил комментарий
(path len: [и какая длинна])
Теперь, надо придумать как это использовать....
пока мне в голову лезет только одно:
1. запоминаем длинну в пин. Через analog-out -> analog-in.
2. включаем интегратор, который будет считать пройденный путь.
3. сравниваем, если прошли длинну-параметр - останавливаем шпиндель.
Все это делать надо на hal.
Все в принципе будет как в том примере со смазкой направляющих.... Только вот это запоминание через два пина и два Gкода мне как-то не нравится.... может я слишком заработался, но почему-то ничего другого в голову не лезет....
Re: Вычисление расстояния до конца контура
Добавлено: 09 июл 2013, 20:52
Ворон226
Nick! А на это что скажешь?
Ворон226 писал(а):Что хотелось бы иметь?
Если в LCNC есть пин motion.distance-to-go , который оперативно высчитывается во время работы станка и означает: расстояние до конца сегмента, то, наверняка, в недрах LCNC есть само значение - ДЛИНА СЕГМЕНТА! Вот бы его достать!
Re: Вычисление расстояния до конца контура
Добавлено: 09 июл 2013, 20:55
Ворон226
Nick писал(а): Только вот это запоминание через два пина и два Gкода мне как-то не нравится...
А почему ДВА G-кода? Вроде бы и нужно только высчитывать длину контура и её через G-код передавать переменной...
Остальное всё оперативно в hal-е.
Re: Вычисление расстояния до конца контура
Добавлено: 09 июл 2013, 21:01
nkp
а длина сегмента и расстояние от начала до конца сегмента - не одно и то же??
Re: Вычисление расстояния до конца контура
Добавлено: 09 июл 2013, 21:12
Nick
Ворон226 писал(а):А почему ДВА G-кода? Вроде бы и нужно только высчитывать длину контура и её через G-код передавать переменной...
так вот в том то и проблема, как его в hal передать? (возможно я туплю и мне не приходит какое-то очень простое решение

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