[WIKI] Ручная смена инструмента с автоизмерением длины.

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

[WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение verser »

В этой статье поделюсь удобным методом и программами к нему
для ручной смены инструмента c автоматическим измерением длины на фрезерном станке под linuxcnc(ver.2.6 и выше).
auto_tool_measurement.jpg (13034 просмотра) <a class='original' href='./download/file.php?id=49604&sid=92cee54b980e3c4a8352e6926681953c&mode=view' target=_blank>Загрузить оригинал (191.63 КБ)</a>
Цель метода: автоматизировать все действия при ручной смене инструмента по максимуму так, чтобы руками осталось лишь вынуть-старую-вставить-новую фрезу.

Особенности:
- основан на remap M6, при обнаружении в тексте g-code "M6 Tx" (или при MDI команде M6 Tx) выполняется диалог для ручной смены и далее автоматом измерение с последующей записью отступа по Z в таблицу инструмента и автоматическое продолжение выполнения g-code,
- не нужен опорный (базовый) инструмент,
- настройки типа "раз-и-навсегда" делаются в .ini файле (позиция смены, позиция датчика Tool Setter, максимальное расстояние поиска Probe),
- настройки "по-ходу" делаются в GladeVCP панельке (поверхность заготовки, скорости поиска и уточнения).

Tребование: наличие двух датчиков - Probe и Tool setter.

Установка.
(для просмотра содержимого нажмите на ссылку)
1. Дополним свой .ini такими настройками

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

...
[DISPLAY]
# добавим GladeVCP панель в виде закладки рядом с  Preview/DRO:
EMBED_TAB_NAME=Auto Tool Measurement
EMBED_TAB_COMMAND=halcmd loadusr -Wn gladevcp gladevcp -c gladevcp  -u python/auto_tool_measurement.py -x {XID} auto_tool_measurement.glade

...
[RS274NGC]
# Возможность чтения INI и HAL переменных из gcode и др.
FEATURES=30

# Папка для подпрограмм
SUBROUTINE_PATH = macros
# подпрограмма вызывается при сбое во время выполнения remap M6 процедур
ON_ABORT_COMMAND=O <on_abort> call 
# Remap M6
REMAP=M6   modalgroup=6  prolog=change_prolog   ngc=manual_change  epilog=change_epilog    
...
[TOOLSENSOR]
# Позиция X(abs),Y(abs) для Tool setter, позиция Z(abs), с которой стартует поиск 
X = 10
Y = 10  
Z = 20
# Расстояние поиска в относительных единицах, должно быть отрицательным (поиск вниз).
MAXPROBE =  -20
...
[CHANGE_POSITION]
# Позиция смены инструмента. Всё в абсолютных координатах
X = 10
Y = 10
Z = 60
...
[PYTHON]
# Папка для пользовательских модулей
PATH_PREPEND = ./python
# Точка запуска remap процедур
TOPLEVEL = python/toplevel.py
...
P.S. Если нужно добавить еще приложение, например Probe Screen, то подключать его нужно уже без компонента "-c gladevcp ", так

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

EMBED_TAB_NAME=Probe Screen 
EMBED_TAB_COMMAND=gladevcp -u python/probe_screen.py -x {XID} probe_icons/probe_screen.glade 
P.S.S. Если подключена ещё и панель для частотника, то вся группа прописывается так

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

GLADEVCP = -u spindle-vfd.py spindle-vfd-panel.glade 

EMBED_TAB_NAME=Auto Tool Measurement
EMBED_TAB_COMMAND=gladevcp -u python/auto_tool_measurement.py -x {XID} auto_tool_measurement.glade

EMBED_TAB_NAME=Probe Screen 
EMBED_TAB_COMMAND=gladevcp -u python/probe_screen.py -x {XID} probe_icons/probe_screen.glade 
2. Следующие файлы из архива поместить в:

вашу-папку-конфигурации/python
auto_tool_measurement.py
remap.py
stdglue.py
toplevel.py

вашу-папку-конфигурации/macros
manual_change.ngc
on_abort.ngc
probe_down.ngc
block_down.ngc

вашу-папку-конфигурации
auto_tool_measurement.glade
sketch_auto_tool_measurement.png

3. Дополнить в .hal строку для probe, если нет такой, (примерно так)

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

net probe  motion.probe-input <= parport.0.pin-15-in
4. удалить (или закомментировать) из всех .hal файлов строчки вида

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

loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
5. custom-postgui.hal дополнить строками

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

# The next two lines are only needed if the pins had been connected before
unlinkp iocontrol.0.tool-change
unlinkp iocontrol.0.tool-changed

# link to auto_tool_measurement toolchange, so you get the advantage of tool description on change dialog
net tool-change            auto_tool_measurement.toolchange-change    <=   iocontrol.0.tool-change 
net tool-changed           auto_tool_measurement.toolchange-changed   <=   iocontrol.0.tool-changed
net tool-prep-number       auto_tool_measurement.toolchange-number    <=   iocontrol.0.tool-prep-number
net tool-prep-loop         iocontrol.0.tool-prepare      <=   iocontrol.0.tool-prepared

Использование.

1. Запускаем linuxcnc.
2. Делаем Home.
3. Устанавливаем заготовку.
4. Устанавливаем Probe в шпиндель.
5. Вписываем желаемые скорости поиска и уточнения и делаем измерение высоты Tool Setter ( жмем на эту кнопку, подпрограмма знает куда ехать из настроек, которые сделаны в .ini, рекомендую [TOOLSENSOR] Z и [CHANGE_POSITION] Z для начала выставить на максимальную верхнюю позицию, чтоб не зацепить чего)
probe.jpg (12901 просмотр) <a class='original' href='./download/file.php?id=49669&sid=92cee54b980e3c4a8352e6926681953c&mode=view' target=_blank>Загрузить оригинал (194.45 КБ)</a>
Результат измерения появится в поле Tool Setter Height.
6. Едем к поверхности заготовки (вручную, остановимся 3-4 мм от поверхности) и жмем эту кнопку
block.jpg (13034 просмотра) <a class='original' href='./download/file.php?id=49605&sid=92cee54b980e3c4a8352e6926681953c&mode=view' target=_blank>Загрузить оригинал (198.29 КБ)</a>
Результат измерения появится в поле Block Height. Поверхность заготовки в g-code при таком Block Height будет лежать на Z=0, чтобы было по-другому, здесь к измеренному значению добавить(получим поверхность ниже нуля) или отнять(получим поверхность выше нуля) интересующее значение для поверхности и результат вручную ввести в поле Block Height, подтвердив Enter.
7. Задаем отступы для нулей заготовки по X и Y. Например,
-либо подводим этот же probe к предполагаемым нулям по XY вручную и вводим 0 в соотв.поле offsets и подтверждаем кнопками "set X" и "set Y",
-либо, для более точного выставления, переходим во вкладку Probe Screen и подходящим измерением выводим позицию в 0.( Убедитесь также, что XY(g92)=0 XY(tlo)=0).

Все. С этого места можно запускать g-code программу. При встрече M6 Tx linuxcnc переедет в точку смены инструмента, покажет сообщение сменить на такой-то инструмент (даже комметарий из таблицы для этого инструмента покажет :good: ), дождется нажатия Ok, далее сам измерит новый инструмент и продолжит выполнение программы.
Если на пути в точку смены есть препятствие (тиски и т. п.), нужно самостоятельно "усложнить" путь к месту смены инструмента в файле manual_change.ngc, а именно добавить после 21 и 61 строк доп. точку в маршруте:

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

G53 G0 X? Y?
Смену инструмента в своей разрабатываемой g-code программе прописывать так

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

M6 Tx
G43 Hx
Важно! В таблице инструментов надо чтобы все отступы по X и по Y для всех используемых в Auto Tool Measurement инструментов были = 0.
Важно! Рекомендуется в начале программы вставить смену инструмента, даже если он тот же.
Важно! Логика метода не самая простая для понимания, здесь полезное пояснение логики привязок.

Исходники здесь
auto_tool_measurement.tar.gz
update 19:50 06.05.2015
(28.44 КБ) 1326 скачиваний
Обновленная версия
auto_tool_measurement.rar
update 28.12.2015
(29.64 КБ) 769 скачиваний
P.S. Как расширить диапазон ввода probe_height и block_height (для просмотра содержимого нажмите на ссылку)
Нужно добавить 2 строчки в файле auto_tool_measurement.glade
1. После строк 6-7 с содержимым

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

  <object class="GtkAdjustment" id="adj_probe_height">
    <property name="upper">1000</property>
вставить

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

    <property name="lower">-1000</property>
2. После строк 13-14 с содержимым

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

  <object class="GtkAdjustment" id="adj_block_height">
    <property name="upper">1000</property>
вставить

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

    <property name="lower">-1000</property>
Вообще, при необходимости upper и lower можно заменить на удобные "под себя".
P.S.S. С ноября 2018г. весь код приложения auto_tool_measurement был включен в состав Probe Screen V2 (секция Remap M6). Развитие продолжено в составе Probe Screen V2.
Последний раз редактировалось verser 26 авг 2019, 19:11, всего редактировалось 77 раз.
Изображение- центроискатели
Аватара пользователя
Serg
Мастер
Сообщения: 20994
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 4979
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: [WIKI] Быстрая ручная смена инструмента.

Сообщение Serg »

verser писал(а):Probe velocitys
Это неправильно! 's' для множественного числа можно добавлять только после согласных (и то не всегда).
Для множественного числа надо писать "Probe velocities" - это будет грамматически правильно, но носитель языка скорее всего напишет просто "Probe velocity" т.к. тут, в заголовке, речь идёт не о каких-то конкретных скоростях.
verser писал(а):- настройки типа "раз-и-навсегда" делаются в .ini файле (позиция смены, позиция датчика Tool Setter, максимальное расстояние поиска Probe),
позиция смены обычно задаётся как предопределённая позиция для G30.
Максимальное расстояние поиска правильнее ограничить пределом станка по Z.
verser писал(а):д.б. равны X(abs),Y(abs) и Z(abs)
abs - это абсолютные координаты, G53? Непонятно зачем их где-то указывать, ведь LinuxCNC и так сама их знает?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Быстрая ручная смена инструмента.

Сообщение verser »

UAVpilot, спасибо за подсказки. Кое-что подправил.
Объем вновь написанного кода приличный, так что со временем "подшлифуется" :) .
Изображение- центроискатели
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Быстрая ручная смена инструмента.

Сообщение verser »

Исходники обновлены (впредь буду отмечать время обновления архива ).
Изображение- центроискатели
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение verser »

Обнаружил у метода еще одно достоинство. В паузе перед очередной сменой инструмента (когда висит сообщение о смене) позволяется поднять-опустить в креплении шпиндель (если оч. длинная или оч. короткая фреза) и никаких перенастроек, можно продолжать резать :good: .
Изображение- центроискатели
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение verser »

Внес массу правок. Кто уже качал - возьмите свежую версию, сделал еще удобнее. Использование упростилось. Описание в шапке.
Изображение- центроискатели
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение nkp »

verser писал(а):Результат измерения появится в поле Tool Setter Height.
verser писал(а):Результат измерения появится в поле Block Height.
не успел вчера пожелать - сегодня уже есть :)
+1
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение verser »

nkp писал(а): не успел вчера пожелать - сегодня уже есть :)
+1
Приложение так понравилось самому, что подумываю перейти с gmoccapy на axis :hehehe: .
Изображение- центроискатели
Аватара пользователя
Nick
Мастер
Сообщения: 22735
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1693
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение Nick »

verser писал(а):настройки "по-ходу" делаются в GladeVCP панельке (поверхность заготовки, скорости поиска и уточнения).
Скорость поиска на ходу вроде не обязательно менять - можно в ini убрать.
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение verser »

Nick писал(а): Скорость поиска на ходу вроде не обязательно менять - можно в ini убрать.
Я иногда меняю "повседневные" скорости на "сверхточные" для особо ответственных деталей, но они медленные, поэтому потом возвращаю обратно на "повседневные". Еще, все один раз введенные поля автоматически сохраняются в файле .pref, так что повторно их вводить при каждом входе уже нет необходимости.

Сегодня при тестировании автоизмерения выявил баги. Исправления к вечеру выложу.

P.S. Готово.
Изображение- центроискатели
Аватара пользователя
elephant007
Мастер
Сообщения: 771
Зарегистрирован: 18 ноя 2012, 13:12
Репутация: 292
Откуда: Сибирь, Томск
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение elephant007 »

а без пробника это будет работать? если нули детали врукопашную выставить после хомления?
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение verser »

elephant007 писал(а):а без пробника это будет работать? если нули детали врукопашную выставить после хомления?
Будет работать. Руками выставлять offsets X,Y,(Z не надо, вместо него заполняется поле Block Height). Поле Probe Height, если установлен Tool setter, нормально отработает и с фрезой в шпинделе вместо пробника. Если и Tool setter отсутствует, тогда вроде как и смысла во всем этом нет :) .
Изображение- центроискатели
pkasy
Мастер
Сообщения: 1139
Зарегистрирован: 15 мар 2013, 09:39
Репутация: 45
Откуда: Владивосток

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение pkasy »

я поставил себе, но ни разу не запускал. может ли твой модуль влиять на Z при каждом запуске, если еще никаких действий в твоем экране не производилось?
почему -то сейчас при каждом запуски резки Z становится ниже. фрезу не меняю, установкой ноля не занимаюсь. но ниже идет и все тут.
есть какие-то действия, которые он выполняет при каждом запуске программы, если в тексте даже M6TN убрано?
не знаю просто, куда еще рыть.
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение verser »

pkasy писал(а):я поставил себе, но ни разу не запускал. может ли твой модуль влиять на Z при каждом запуске, если еще никаких действий в твоем экране не производилось?
почему -то сейчас при каждом запуски резки Z становится ниже. фрезу не меняю, установкой ноля не занимаюсь. но ниже идет и все тут.
есть какие-то действия, которые он выполняет при каждом запуске программы, если в тексте даже M6TN убрано?
не знаю просто, куда еще рыть.
Отключи (закомментируй) Auto Tool Measurement в INI файле
(для просмотра содержимого нажмите на ссылку)

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

...
[DISPLAY]
# добавим GladeVCP панель в виде закладки рядом с  Preview/DRO:
#EMBED_TAB_NAME=Auto Tool Measurement
#EMBED_TAB_COMMAND=halcmd loadusr -Wn gladevcp gladevcp -c gladevcp  -u python/auto_tool_measurement.py -x {XID} auto_tool_measurement.glade

...
[RS274NGC]
# Возможность чтения INI и HAL переменных из gcode и др.
FEATURES=30

# Папка для подпрограмм
SUBROUTINE_PATH = your_subroutine_path
# подпрограмма вызывается при сбое во время выполнения remap M6 процедур
#ON_ABORT_COMMAND=O <on_abort> call 
# Remap M6
#REMAP=M6   modalgroup=6  prolog=change_prolog   ngc=manual_change  epilog=change_epilog    
...
[TOOLSENSOR]
# Позиция X(abs),Y(abs) для Tool setter, позиция Z(abs), с которой стартует поиск 
X = 10
Y = 10  
Z = 20
# скорость холостых перемещений
RAPID_FEED = 600
# Расстояние поиска в относительных единицах, должно быть отрицательным (поиск вниз).
MAXPROBE =  -20
...
[CHANGE_POSITION]
# Позиция смены инструмента. Всё в абсолютных координатах
X = 10
Y = 10
Z = 60
...
[PYTHON]
# Папка для пользовательских модулей
#PATH_PREPEND = ./python
# Точка запуска remap процедур
#TOPLEVEL = python/toplevel.py
...
тогда точно будет ясно, в нем ли причина.
Изображение- центроискатели
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение nkp »

настраивая probe (и не только) ,задавался вопросом(пытался понить логику автора))) - почему
можно смотреть активные коды только в окне mdi ??? (Axis естественно)
моя невнимательность требует этого списка на видном месте :freak:
надо бы вынести - но куда?
может между предпросмотром и окном gcode :thinking:
Аватара пользователя
verser
Мастер
Сообщения: 1792
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1200
Настоящее имя: Сергей
Откуда: Минск
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение verser »

nkp писал(а):надо бы вынести - но куда?может между предпросмотром и окном gcode
Может, в панельку Manual control типа label организовать и к низу прижать, там куча пустого места. Заодно и другие полезные данные туда же, как в gmoccapy
Изображение- центроискатели
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение nkp »

verser писал(а):там куча пустого места.
по моему места там как раз маловато...
попробуй "всё" включить...
вот узенькая однорядка под preview - имхо - самое то...
надо пробовать несколько вариантов...
зы
и перейти сюда
Аватара пользователя
Nick
Мастер
Сообщения: 22735
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1693
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение Nick »

Есть такая штука - называется status bar, она как раз для этого задумывалась ;)
http://www.pygtk.org/docs/pygtk/class-gtkstatusbar.html
Можно в ней же и переключение некоторых режимов сделать... :roll:
Можно туда добавить строчку с жесткими размерами, в которую статично записать нужные Gкоды. Черный - активный, серый не активный. Или если есть выбор, например для системы координат, можно в фиксированном окне отображать активную систему.
Аватара пользователя
odekolon
Мастер
Сообщения: 1062
Зарегистрирован: 05 ноя 2014, 14:53
Репутация: 341
Настоящее имя: Борис
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение odekolon »

сделал все по инструкции

получаю ощибку

где покопаться?
Вложения
error.png (12464 просмотра) <a class='original' href='./download/file.php?id=52194&sid=92cee54b980e3c4a8352e6926681953c&mode=view' target=_blank>Загрузить оригинал (60.75 КБ)</a>
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
Аватара пользователя
torvn77
Мастер
Сообщения: 2429
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 214
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: [WIKI] Ручная смена инструмента с автоизмерением длины.

Сообщение torvn77 »

Пока только прочитал,но есть вот какая мысль:
verser писал(а): рекомендую [TOOLSENSOR] Z и [CHANGE_POSITION] Z для начала выставить на максимальную верхнюю позицию, чтоб не зацепить чего)
Надо сделать два датчика измерения длинны:грубый и точный.
Первое измерение делать на грубом с большой скоростью поиска,а сам датчик делать из пружины,
чтобы не ломать едущий на большой скорости инструмент.
Второе измерение делать на точном,но начинать с меньшей высоты (грубо то инструмент уже оценён) и
на не большой скорости для большей точности измерений.
Сам же датчик может быть просто куском железки с проводом.

И ещё,когда это в основной дистр LinuxCNC добавят?
Ответить

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