эта тема про ЕМС, та про Мачnkp писал(а):надо бы объеденить темы
Вычисление расстояния до конца контура
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: Вычисление расстояния до конца контура
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Вычисление расстояния до конца контура
пардон...aftaev писал(а):эта тема про ЕМС, та про Мач
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Вычисление расстояния до конца контура
Необходимо найти расстояние до конца контура. При чем это расстояние должно быть переменной (устанавливаться "движком" на панели). При совпадении расстояния до конца контура и установленного значение - событие ( а там разрулим что делать с событием).
Вроде так.
Вроде так.
Хочешь быть счастливым? Будь им!
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Вычисление расстояния до конца контура
Пора приступить к реализации алгоритма оперативного нахождения устанавливаемого расстояния до конца контура.
Вариант первый.
1. При обработке векторного рисунка контура витража вычислять:
- общую длину контура;
- длину каждого сегмента.
2. Прописывать в G-код эту информацию.
3. Переписать «постпроцессор», «читающий» G-коды, чтобы не "ругался" на служебную информацию в G-коде.
4. Написать подпрограмму (скрипт), которая будет сравнивать значение ползунка «выключение насоса» с длиной контура и оперативно вычислять точку выключения насоса.
Думаю, что подобная программа может пригодится и на других станках (плазморез, автораздатчик кормов и т.п.)
Вариант первый.
1. При обработке векторного рисунка контура витража вычислять:
- общую длину контура;
- длину каждого сегмента.
2. Прописывать в G-код эту информацию.
3. Переписать «постпроцессор», «читающий» G-коды, чтобы не "ругался" на служебную информацию в G-коде.
4. Написать подпрограмму (скрипт), которая будет сравнивать значение ползунка «выключение насоса» с длиной контура и оперативно вычислять точку выключения насоса.
Думаю, что подобная программа может пригодится и на других станках (плазморез, автораздатчик кормов и т.п.)
Хочешь быть счастливым? Будь им!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Вычисление расстояния до конца контура
Хм... А это интересно...
В принципе длинну контура можно запросто рассчиатать.
В gкод можем написать например #<len> = длинна или вообще в пин hal или в analog-out запихать.
Осталось придумать, что с ним потом делать... можно суммировать пройденное расстояние... правда тоже не совсем понятно как... можно через current-vel его вычислять, но будет не очень точно. Вопрос в том насколько это будет не точно.
В принципе длинну контура можно запросто рассчиатать.
В gкод можем написать например #<len> = длинна или вообще в пин hal или в analog-out запихать.
Осталось придумать, что с ним потом делать... можно суммировать пройденное расстояние... правда тоже не совсем понятно как... можно через current-vel его вычислять, но будет не очень точно. Вопрос в том насколько это будет не точно.
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Вычисление расстояния до конца контура
Есть пин - расстояние до конца сегмента. Его и использовать. Т.е. имея общую длину контура можно вычитать расстояние до конца сегмента в самом начале движения по этому сегменту. И затем прибавлять расстояние до конца сегмента и сравнивать со значением ползунка "Расстояние до конца контура", которое задает параметр выключения насоса. Если этого не произошло в данном сегменте, то переходим к следующему и т.д.
Попробую нарисовать блок-схему алгоритма.
А вот можно ли в G-кодах делать строку, которую будет понимать CNC? Например организовать переменную (длина контура). Я с этим пока не сталкивался...
Попробую нарисовать блок-схему алгоритма.
А вот можно ли в G-кодах делать строку, которую будет понимать CNC? Например организовать переменную (длина контура). Я с этим пока не сталкивался...
Хочешь быть счастливым? Будь им!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Вычисление расстояния до конца контура
переменные #<имя> = [1+2+3]
или #1 = [1+2+3]
забыл, как у тебя с английским?
http://linuxcnc.org/docs/html/gcode/ove ... parameters
или #1 = [1+2+3]
забыл, как у тебя с английским?
http://linuxcnc.org/docs/html/gcode/ove ... parameters
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Вычисление расстояния до конца контура
С английским тяжко, но по ссылке основное понятно 
Буду прописывать алгоритм поподробнее...
Буду прописывать алгоритм поподробнее...
Хочешь быть счастливым? Будь им!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Вычисление расстояния до конца контура
тут на форуме металлистов задались вопросом смазки направляющих через определенное расстояние пройденое осью...
так вот об использовании motion.distance-to-go и axis.n.motor-pos-fb читал - но как считать с их помощью -
Ворон226, как этот motion.distance-to-go на практике применять ???
так вот об использовании motion.distance-to-go и axis.n.motor-pos-fb читал - но как считать с их помощью -
Ворон226, как этот motion.distance-to-go на практике применять ???
Последний раз редактировалось nkp 08 июл 2013, 10:04, всего редактировалось 1 раз.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Вычисление расстояния до конца контура
я вот так попробовал:
в хал:
может есть внутри емс "считалка" ??
Код: Выделить всё
#!/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: Вычисление расстояния до конца контура
Может лучше брать скорость оси и интегрировать ее?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: Вычисление расстояния до конца контура
http://www.chipmaker.ru/topic/113606/Nick писал(а):ЗЫ А чего ссылку не дал?
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Вычисление расстояния до конца контура
Со смазкой все просто - считай количество степов или время движения и подавай масло. Тут вопрос немного иной. Я молчу не оттого, что не вижу - думаю...
Хочешь быть счастливым? Будь им!
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Вычисление расстояния до конца контура
Вопрос оказался совсем непрост.
Вот первое приближение.
Вступление.
Что мы имеем наверняка?
Общую длину контура можно вычислить на этапе формирования 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 и выключаем насос.
Схематично изобразил алгоритм на рисунке...
(сомневаюсь, чтобы кто-то в этом разобрался...)
Вот первое приближение.
Вступление.
Что мы имеем наверняка?
Общую длину контура можно вычислить на этапе формирования 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 и выключаем насос.
Схематично изобразил алгоритм на рисунке...
(сомневаюсь, чтобы кто-то в этом разобрался...)
Хочешь быть счастливым? Будь им!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Вычисление расстояния до конца контура
Щас погоди... сделаем длинну попробуем поэкспериментировать.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Вычисление расстояния до конца контура
Так, в последней ревизии добавил комментарий
(path len: [и какая длинна])
Теперь, надо придумать как это использовать....
пока мне в голову лезет только одно:
1. запоминаем длинну в пин. Через analog-out -> analog-in.
2. включаем интегратор, который будет считать пройденный путь.
3. сравниваем, если прошли длинну-параметр - останавливаем шпиндель.
Все это делать надо на hal.
Все в принципе будет как в том примере со смазкой направляющих.... Только вот это запоминание через два пина и два Gкода мне как-то не нравится.... может я слишком заработался, но почему-то ничего другого в голову не лезет....
(path len: [и какая длинна])
Теперь, надо придумать как это использовать....
пока мне в голову лезет только одно:
1. запоминаем длинну в пин. Через analog-out -> analog-in.
2. включаем интегратор, который будет считать пройденный путь.
3. сравниваем, если прошли длинну-параметр - останавливаем шпиндель.
Все это делать надо на hal.
Все в принципе будет как в том примере со смазкой направляющих.... Только вот это запоминание через два пина и два Gкода мне как-то не нравится.... может я слишком заработался, но почему-то ничего другого в голову не лезет....
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Вычисление расстояния до конца контура
Nick! А на это что скажешь?
Ворон226 писал(а):Что хотелось бы иметь?
Если в LCNC есть пин motion.distance-to-go , который оперативно высчитывается во время работы станка и означает: расстояние до конца сегмента, то, наверняка, в недрах LCNC есть само значение - ДЛИНА СЕГМЕНТА! Вот бы его достать!
Хочешь быть счастливым? Будь им!
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Вычисление расстояния до конца контура
А почему ДВА G-кода? Вроде бы и нужно только высчитывать длину контура и её через G-код передавать переменной...Nick писал(а): Только вот это запоминание через два пина и два Gкода мне как-то не нравится...
Остальное всё оперативно в hal-е.
Хочешь быть счастливым? Будь им!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Вычисление расстояния до конца контура
а длина сегмента и расстояние от начала до конца сегмента - не одно и то же??
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Вычисление расстояния до конца контура
так вот в том то и проблема, как его в hal передать? (возможно я туплю и мне не приходит какое-то очень простое решениеВорон226 писал(а):А почему ДВА G-кода? Вроде бы и нужно только высчитывать длину контура и её через G-код передавать переменной...
Не, есть текущее distance-to-go - оно не с начала сегмента.nkp писал(а):а длина сегмента и расстояние от начала до конца сегмента - не одно и то же??
А зачем? Оно нам и не нужно вроде...Ворон226 писал(а):который оперативно высчитывается во время работы станка и означает: расстояние до конца сегмента, то, наверняка, в недрах LCNC есть само значение - ДЛИНА СЕГМЕНТА! Вот бы его достать!
В крайнем случае можно его запоминать при смене текущей строки gкода.
