Использование "шпинделя" для управления допоборудованием
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Спасибо!
Завтра подъедет друг, дружащий с программированием, - покажу ему. (я до такого уровня ещё не доучился...)
Если честно, я удивлён, что до сих пор нет стандартного решения подобной проблемы (ведь уже есть куча станков с лазерами, плазмами, да и стабильная подача и во фрезере тоже была бы нелишней)... Я усиленно читаю про компоненты HAL - вроде там уже есть что-то близкое к автоматическому расчёту длины траектории (но я пока в описании "плаваю" почти на ощупь).
Завтра подъедет друг, дружащий с программированием, - покажу ему. (я до такого уровня ещё не доучился...)
Если честно, я удивлён, что до сих пор нет стандартного решения подобной проблемы (ведь уже есть куча станков с лазерами, плазмами, да и стабильная подача и во фрезере тоже была бы нелишней)... Я усиленно читаю про компоненты HAL - вроде там уже есть что-то близкое к автоматическому расчёту длины траектории (но я пока в описании "плаваю" почти на ощупь).
Хочешь быть счастливым? Будь им!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
в свою очередь не пойму зачем идти через длинну траектории ??Ворон226 писал(а):что-то близкое к автоматическому расчёту длины траектории
чтоб вычислить ту же скорость??
так разве интересно узнать ее значение
я считаю нужна просто обратная связь "скорость-количество геля"
а количество зависит от скорости на stepgen.3
вот мы и вычислили линейную скорость и подали на задание скорости stepgen.3,которая подает
а программирования здесь нет (ну почти нет)
это мы создаем пользовательский компонент
ложишь это все в папку и ничего больше не надо с этим делать
ну мож я и не в ту сторону смотрю
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
А может и в ту...
Только тогда нужно брать значение скорости по X, прибавлять скорость по Y и, умножив на нужный коэффициент, подавать на насос.
Разве в этом случае нельзя обойтись самим HAL-лом? Ща подумаю как...
Только тогда нужно брать значение скорости по X, прибавлять скорость по Y и, умножив на нужный коэффициент, подавать на насос.
Разве в этом случае нельзя обойтись самим HAL-лом? Ща подумаю как...
Хочешь быть счастливым? Будь им!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
в архиве файлы конфигурацииВорон226 писал(а):брать значение скорости по X, прибавлять скорость по Y и, умножив на нужный коэффициент, подавать на насос.
как раз там это все сделано
попробуй запусти и все увидешь
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
это кусок твоего хала (только я переименовал 666=>333
) :
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Я так понял: мы берём мгновенную скорость по Х и по Y и, пользуясь "штанами Архимеда", должны найти квадратный корень из суммы квадратов мгновенных скоростей по двум координатам. Это и будет мгновенная скорость "подачи геля", которая будет отслеживать скорости автоматически.nkp писал(а):на входы подаем скорости по осям - на выходе получаем линейную скоростьКод: Выделить всё
#!/usr/bin/python import hal import math h = hal.component("vel") h.newpin("vaxis1", hal.HAL_FLOAT, hal.HAL_IN) h.newpin("vaxis2", hal.HAL_FLOAT, hal.HAL_IN) h.newpin("velout", hal.HAL_FLOAT, hal.HAL_OUT) h.newpin("setpyvcp", hal.HAL_FLOAT, hal.HAL_IN) h.newparam("setvel",hal.HAL_FLOAT, hal.HAL_RW) h.ready() try: while 1: h['velout'] = h["setpyvcp"]*h["setvel"]* math.sqrt(h["vaxis1"]**2 + h["vaxis2"]**2) except KeyboardInterrupt: raise SystemExit
в двух местах корректировка - "setvel" задает из хал грубую настройку
а "setpyvcp" ползунком на лету из панели pyvcp
правильность формулы не гарантирую - но не беда - тут есть люди дружащие с математикой![]()
файлы в папку конфигурации:
А делается это так:
В hal прописываем:
# что пользуемся пользовательским компонентом vel.py
loadusr -Wn vel python vel.py
# задаем две компоненты реального времени в низкоскоростной поток - servo-thread
loadrt abs count=2
addf abs.0 servo-thread
addf abs.1 servo-thread
# Присваиваем значение модуля скорости X abs.0 и передаём это значение vel.vaxis1
net absin0 abs.0.in axis.0.joint-vel-cmd
net absout0 abs.0.out vel.vaxis1
# Присваиваем значение модуля скорости Y abs.1 и передаём это значение vel.vaxis2
net absin1 abs.1.in axis.1.joint-vel-cmd
net absout1 abs.1.out vel.vaxis2
В пользовательской подпрограмме vel.py вычисляется значение суммарной мгновенной скорости:
try:
while 1:
h['velout'] = h["setpyvcp"]*h["setvel"]* math.sqrt(h["vaxis1"]**2 + h["vaxis2"]**2)
Далее в hal:
# значение velout, вычисленное в пользовательской подпрограмме, передается stepgen.3.velocity-cmd
net velout vel.velout stepgen.3.velocity-cmd
# А уже stepgen.3 вычисляет значения step и dir и:
net astep <= stepgen.3.step
net adir <= stepgen.3.dir
# и далее
net astep => parport.0.pin-05-out
net adir => parport.0.pin-14-out
Если я правильно понял написанное, то самое время откорректировать математическую формулу вычисления мгновенной скорости "пипетки".
Как же вычисляется квадратный корень??? Буду искать...
Хочешь быть счастливым? Будь им!
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Совсем забыл!
Если я переименовываю всё , например, в 777, то мне нужно:
1. переименовать файл .hal в 777.hal
2. переименовать файл pump.ini в 777.ini
3. прописать в 777.ini :
[EMC]
MACHINE = 777
Правильно?
Если я переименовываю всё , например, в 777, то мне нужно:
1. переименовать файл .hal в 777.hal
2. переименовать файл pump.ini в 777.ini
3. прописать в 777.ini :
[EMC]
MACHINE = 777
Правильно?
Хочешь быть счастливым? Будь им!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
тебе мануалы надо писатьВорон226 писал(а):Я так понял:
все правильно
вот здесь не понял - поясни - что ты имел в виду - "откорректировать математическую формулу" ?Ворон226 писал(а):Если я правильно понял написанное, то самое время откорректировать математическую формулу вычисления мгновенной скорости "пипетки".
Как же вычисляется квадратный корень??? Буду искать...
Код: Выделить всё
h['velout'] = h["setpyvcp"]*h["setvel"]* math.sqrt(h["vaxis1"]**2 + h["vaxis2"]**2)достаточно переименовать 777.halВорон226 писал(а):Совсем забыл!
Если я переименовываю всё , например, в 777, то мне нужно:
1. переименовать файл .hal в 777.hal
2. переименовать файл pump.ini в 777.ini
3. прописать в 777.ini :
[EMC]
MACHINE = 777
Правильно?
и подкорректировать в ини строку:
Код: Выделить всё
HALFILE = 777.hal- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Дык, я ещё не дошел до математических выражений - потому не увидел квадратного корняnkp писал(а):вот здесь не понял - поясни - что ты имел в виду - "откорректировать математическую формулу" ?Ворон226 писал(а):Если я правильно понял написанное, то самое время откорректировать математическую формулу вычисления мгновенной скорости "пипетки".
Как же вычисляется квадратный корень??? Буду искать...не то???Код: Выделить всё
h['velout'] = h["setpyvcp"]*h["setvel"]* math.sqrt(h["vaxis1"]**2 + h["vaxis2"]**2)
Спасибо - сегодня вечером или завтра утром попробую...
Хочешь быть счастливым? Будь им!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Можно использовать пин motion.spindle-speed-out = будет в rpm - т.е. об/мин.Ворон226 писал(а):2. Строка
net avel-cmd <= motion.spindle-speed-out-rps
говорит о передачи переменной значения скорости в оборотах в секунду т.е. значения скорости шаговика должны быть не более 0.5 (так у меня получилось при испытаниях). Значит команда должна выглядеть так:
M3 S0.5
Но непонятно (пока не изучил) - можно ли скорость задавать значением меньшим единицы?
ЗЫ А вот такой пин вам не нравится?
motion.current-vel OUT FLOAT
Current cartesian velocity
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
ну эта-ааа...Nick писал(а):Current cartesian velocity
мы же легких путей не ищем
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
ЗАРАБОТАЛО!!!
Прекрасно отслеживает перемещения по X и Y и крутит насос. Скорость регулируется ползунком на панели EMC2. Откорректировал коэффициент в hal.
setp vel.setvel 0.2
Осталось привязать к насосу команду разрешения и запрета через g-коды, иначе насос качает при ЛЮБОМ перемещении
Спасибо за помощь в освоении этой оси - это не просто ось. Это широченная "дверь" в управление технологическими процессами, как на уровне быта (теплички, куры, топливный котел и т.п.), так и на уровне серьёзных производственных процессов! Учусь дальше... Завтра проведу съемки - поделюсь своей радостью.
Прекрасно отслеживает перемещения по X и Y и крутит насос. Скорость регулируется ползунком на панели EMC2. Откорректировал коэффициент в hal.
setp vel.setvel 0.2
Осталось привязать к насосу команду разрешения и запрета через g-коды, иначе насос качает при ЛЮБОМ перемещении
Спасибо за помощь в освоении этой оси - это не просто ось. Это широченная "дверь" в управление технологическими процессами, как на уровне быта (теплички, куры, топливный котел и т.п.), так и на уровне серьёзных производственных процессов! Учусь дальше... Завтра проведу съемки - поделюсь своей радостью.
Хочешь быть счастливым? Будь им!
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
А где почитать про интерпретатор G-кодов?
Хочется понять:
Что происходит, когда EMC2 "читает" список G-кодов?
Например,
команды M07 и M09.
Какие компоненты запускаются? Какие функции можно из них "вытащить"?
Теперь конкретнее:
Задаю переменную - nasos и привязываю её,например, к motion.digital-out-02
В hal. появляется строчка:
net nasos <= motion.digital-out-02
В vel.py:
try:
while 1:
h['velout'] = h["nasos"]* h["setpyvcp"]*h["setvel"]* math.sqrt(h["vaxis1"]**2 + h["vaxis2"]**2)
Теперь, если motion.digital-out-02 равен нулю - насос "молчит". Если же - единице - отрабатывает скорости перемещения - "качает".
Вопросы (уже конкретные):
1. КАК включить (изменить значение) motion.digital-out-02 командой G-кода? И где это написано?
2. Есть ли возможность "прописывать" не только НОЛЬ или ЕДИНИЦУ, но и МИНУС единицу (чтобы задавать направление движения насоса)?
3. Где и как прописывается ПАУЗА между двумя Gкодами? Например, для обеспечения такого режима: Включил - пауза - выключил...
Хочется понять:
Что происходит, когда EMC2 "читает" список G-кодов?
Например,
команды M07 и M09.
Какие компоненты запускаются? Какие функции можно из них "вытащить"?
Теперь конкретнее:
Задаю переменную - nasos и привязываю её,например, к motion.digital-out-02
В hal. появляется строчка:
net nasos <= motion.digital-out-02
В vel.py:
try:
while 1:
h['velout'] = h["nasos"]* h["setpyvcp"]*h["setvel"]* math.sqrt(h["vaxis1"]**2 + h["vaxis2"]**2)
Теперь, если motion.digital-out-02 равен нулю - насос "молчит". Если же - единице - отрабатывает скорости перемещения - "качает".
Вопросы (уже конкретные):
1. КАК включить (изменить значение) motion.digital-out-02 командой G-кода? И где это написано?
2. Есть ли возможность "прописывать" не только НОЛЬ или ЕДИНИЦУ, но и МИНУС единицу (чтобы задавать направление движения насоса)?
3. Где и как прописывается ПАУЗА между двумя Gкодами? Например, для обеспечения такого режима: Включил - пауза - выключил...
Хочешь быть счастливым? Будь им!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
пауза - G4 P1Ворон226 писал(а):Вопросы (уже конкретные):1. КАК включить (изменить значение) motion.digital-out-02 командой G-кода? И где это написано?2. Есть ли возможность "прописывать" не только НОЛЬ или ЕДИНИЦУ, но и МИНУС единицу (чтобы задавать направление движения насоса)?3. Где и как прописывается ПАУЗА между двумя Gкодами? Например, для обеспечения такого режима: Включил - пауза - выключил...
все G-code
--------------
M64 P2 "включит" motion.digital-out-02
M65 P2 "выключит" motion.digital-out-02
http://www.linuxcnc.org/docs/2.5/html/g ... ec:M62-M65
--------------------------------
при желании можно умножить на -1
http://www.linuxcnc.org/docs/2.5/html/m ... lt2.9.html
но имхо это можно и по другому сделать
---------------------------
если ты не понял последний пост Ника - то расшифрую - мы пошли не по кратчайшему пути
но зато сколько постигнуто
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Как??? Т.е. как умножить в подпрограмме или инвертировать в hal я разобрался... А вот как организовать трех-позиционное состояние и управлять им g-кодами - не понял...nkp писал(а):при желании можно умножить на -1
http://www.linuxcnc.org/docs/2.5/html/m ... lt2.9.html
но имхо это можно и по другому сделать
nkp писал(а):если ты не понял последний пост Ника - то расшифрую - мы пошли не по кратчайшему пути![]()
но зато сколько постигнуто
В hal:
loadusr -Wn vel python vel.py
net nasos <= motion.digital-out-02
net vel-sr <= motion.current-vel
net velout vel.velout stepgen.3.velocity-cmd
setp vel.setvel 0.2
В vel.py:
try:
while 1:
h['velout'] = h["nasos"]*h["setpyvcp"]*h["setvel"]* h["vel-sr"]
Хм... А разве в самом hal-е нельзя сделать такую операцию? и обойтись без пользовательской подпрограммы?
(эх... ну не изучал я инглиш... Да и французский чуть-чуть)
Хочешь быть счастливым? Будь им!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
motion.current-vel как раз вместо этой программы и можно использовать - это текущая скорость.Ворон226 писал(а):Хм... А разве в самом hal-е нельзя сделать такую операцию? и обойтись без пользовательской подпрограммы?
(эх... ну не изучал я инглиш... Да и французский чуть-чуть)
Чтобы использовать -1 и другие значения - надо использовать motion.analog-out-00
И gкод M67 или M68 http://linuxcnc.org/docs/html/gcode/m-c ... log-Output
M68 E0 Q-1
а почемуне хочешь использовать код управления шпинделем?
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Хм... после таких уроков можно и шпинделем... 
А как в Hal-е умножать на коэффициент?
И неужели можно и коэффициенты сразу задавать?
M68 E0 Q-0.024
что будет означать: значение motion.analog-out-00 будет равно -0.024???
А как в Hal-е умножать на коэффициент?
И неужели можно и коэффициенты сразу задавать?
M68 E0 Q-0.024
что будет означать: значение motion.analog-out-00 будет равно -0.024???
Хочешь быть счастливым? Будь им!
- Ворон226
- Мастер
- Сообщения: 1923
- Зарегистрирован: 01 окт 2012, 18:14
- Репутация: 181
- Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Не нашел в описании EMC2 такого. Ну нет в описании stepgen.<chan>.enablenkp писал(а):попробуй в хал:Ворон226 писал(а):крутить шаговик тоже отказался. Молчком отказался. При подаче команды M3 S3000 (пробовал и S3, и S30...) - никакой реакции нетвот сюда:Код: Выделить всё
setp stepgen.3.enable 1
Хочешь быть счастливым? Будь им!
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Использование "шпинделя" для управления допоборудованием
Только через доп компонент (если в нужном компоненте нет пина scale):Ворон226 писал(а):А как в Hal-е умножать на коэффициент?
И неужели можно и коэффициенты сразу задавать?
или mult2 http://linuxcnc.org/docs/html/man/man9/mult2.9.html - умножение пина на пин
или sum2 http://linuxcnc.org/docs/html/man/man9/sum2.9.html - пин1*параметр1 + пин2*параметр2
да.Ворон226 писал(а):M68 E0 Q-0.024
что будет означать: значение motion.analog-out-00 будет равно -0.024???
