Использование "шпинделя" для управления допоборудованием

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

Re: Использование "шпинделя" для управления допоборудованием

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

Спасибо!
Завтра подъедет друг, дружащий с программированием, - покажу ему. (я до такого уровня ещё не доучился...)

Если честно, я удивлён, что до сих пор нет стандартного решения подобной проблемы (ведь уже есть куча станков с лазерами, плазмами, да и стабильная подача и во фрезере тоже была бы нелишней)... Я усиленно читаю про компоненты HAL - вроде там уже есть что-то близкое к автоматическому расчёту длины траектории (но я пока в описании "плаваю" почти на ощупь).
Хочешь быть счастливым? Будь им!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Использование "шпинделя" для управления допоборудованием

Сообщение nkp »

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

Re: Использование "шпинделя" для управления допоборудованием

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

А может и в ту...

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

Re: Использование "шпинделя" для управления допоборудованием

Сообщение nkp »

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

Re: Использование "шпинделя" для управления допоборудованием

Сообщение nkp »

это кусок твоего хала (только я переименовал 666=>333 :) ) :
Выделение(006).jpg (1404 просмотра) <a class='original' href='./download/file.php?id=11486&mode=view' target=_blank>Загрузить оригинал (275.18 КБ)</a>
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Использование "шпинделя" для управления допоборудованием

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

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
правильность формулы не гарантирую - но не беда - тут есть люди дружащие с математикой :)
файлы в папку конфигурации:
Pump.tar
Я так понял: мы берём мгновенную скорость по Х и по Y и, пользуясь "штанами Архимеда", должны найти квадратный корень из суммы квадратов мгновенных скоростей по двум координатам. Это и будет мгновенная скорость "подачи геля", которая будет отслеживать скорости автоматически.

А делается это так:

В 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: Использование "шпинделя" для управления допоборудованием

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

Совсем забыл!
Если я переименовываю всё , например, в 777, то мне нужно:

1. переименовать файл .hal в 777.hal
2. переименовать файл pump.ini в 777.ini
3. прописать в 777.ini :
[EMC]
MACHINE = 777

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

Re: Использование "шпинделя" для управления допоборудованием

Сообщение nkp »

Ворон226 писал(а):Я так понял:
тебе мануалы надо писать :)
все правильно
Ворон226 писал(а):Если я правильно понял написанное, то самое время откорректировать математическую формулу вычисления мгновенной скорости "пипетки".
Как же вычисляется квадратный корень??? Буду искать...
вот здесь не понял - поясни - что ты имел в виду - "откорректировать математическую формулу" ?

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

h['velout'] = h["setpyvcp"]*h["setvel"]* math.sqrt(h["vaxis1"]**2 + h["vaxis2"]**2)
не то???
Ворон226 писал(а):Совсем забыл!
Если я переименовываю всё , например, в 777, то мне нужно:

1. переименовать файл .hal в 777.hal
2. переименовать файл pump.ini в 777.ini
3. прописать в 777.ini :
[EMC]
MACHINE = 777
Правильно?
достаточно переименовать 777.hal
и подкорректировать в ини строку:

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

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

Re: Использование "шпинделя" для управления допоборудованием

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

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: Использование "шпинделя" для управления допоборудованием

Сообщение Nick »

Ворон226 писал(а):2. Строка
net avel-cmd <= motion.spindle-speed-out-rps
говорит о передачи переменной значения скорости в оборотах в секунду т.е. значения скорости шаговика должны быть не более 0.5 (так у меня получилось при испытаниях). Значит команда должна выглядеть так:
M3 S0.5
Но непонятно (пока не изучил) - можно ли скорость задавать значением меньшим единицы?
Можно использовать пин motion.spindle-speed-out = будет в rpm - т.е. об/мин.


ЗЫ А вот такой пин вам не нравится? :)
motion.current-vel OUT FLOAT
Current cartesian velocity
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Использование "шпинделя" для управления допоборудованием

Сообщение nkp »

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

Re: Использование "шпинделя" для управления допоборудованием

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

ЗАРАБОТАЛО!!!

Прекрасно отслеживает перемещения по X и Y и крутит насос. Скорость регулируется ползунком на панели EMC2. Откорректировал коэффициент в hal.
setp vel.setvel 0.2

Осталось привязать к насосу команду разрешения и запрета через g-коды, иначе насос качает при ЛЮБОМ перемещении ;)

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

Re: Использование "шпинделя" для управления допоборудованием

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

А где почитать про интерпретатор 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: Использование "шпинделя" для управления допоборудованием

Сообщение nkp »

Ворон226 писал(а):Вопросы (уже конкретные):1. КАК включить (изменить значение) motion.digital-out-02 командой G-кода? И где это написано?2. Есть ли возможность "прописывать" не только НОЛЬ или ЕДИНИЦУ, но и МИНУС единицу (чтобы задавать направление движения насоса)?3. Где и как прописывается ПАУЗА между двумя Gкодами? Например, для обеспечения такого режима: Включил - пауза - выключил...
пауза - G4 P1
все 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: Использование "шпинделя" для управления допоборудованием

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

nkp писал(а):при желании можно умножить на -1
http://www.linuxcnc.org/docs/2.5/html/m ... lt2.9.html
но имхо это можно и по другому сделать
Как??? Т.е. как умножить в подпрограмме или инвертировать в hal я разобрался... А вот как организовать трех-позиционное состояние и управлять им g-кодами - не понял...
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: Использование "шпинделя" для управления допоборудованием

Сообщение Nick »

Ворон226 писал(а):Хм... А разве в самом hal-е нельзя сделать такую операцию? и обойтись без пользовательской подпрограммы?
(эх... ну не изучал я инглиш... Да и французский чуть-чуть)
motion.current-vel как раз вместо этой программы и можно использовать - это текущая скорость.

Чтобы использовать -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: Использование "шпинделя" для управления допоборудованием

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

Хм... после таких уроков можно и шпинделем... ;)

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

Re: Использование "шпинделя" для управления допоборудованием

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

nkp писал(а):
Ворон226 писал(а):крутить шаговик тоже отказался. Молчком отказался. При подаче команды M3 S3000 (пробовал и S3, и S30...) - никакой реакции нет
попробуй в хал:

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

setp  stepgen.3.enable 1
вот сюда:
Выделение(004).jpg
Не нашел в описании EMC2 такого. Ну нет в описании stepgen.<chan>.enable
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Использование "шпинделя" для управления допоборудованием

Сообщение Nick »

Ворон226 писал(а):А как в Hal-е умножать на коэффициент?
И неужели можно и коэффициенты сразу задавать?
Только через доп компонент (если в нужном компоненте нет пина scale):
или 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???
да.
Ответить

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