Поиск нуля кольцом
Поиск нуля кольцом
Здравствуйте! В общем, эту штуку сделали в Маче макросами, вот видео. Хочу сделать в LinuxCNC.
https://www.youtube.com/watch?v=bCeQ0WlSXmc
Преимущество, имхо в том, что точность в 2 раза выше обычного метода с простым касанием.
Конструкцию думаю делать такой: серебряное кольцо 925 пробы, тонкий короткий щуп из того же материала. Серебро - так как усилие контакта небольшое по сравнению с парой медь-фреза, и его возникающие в эксплуатации окислы имеют такую же проводимость как и металл.
Взять пружинку, которая всё время возвращается в одно и то же положение. Ну и сплав пружины чтоб от температуры окружающего воздуха не зависел. Во время измерения ее освобождать вниз, а во время резки отгибать вверх.
Пружина жестко продолжается планкой, её длина будет превышать длину инструмента на ширину кольца+некоторое расстояние. Для удобства, так как пружина с планкой громоздкая, её можно разместить снизу, на заготовке, а маленькое кольцо приклеить сверху около фрезера. По периметру кольца 3 лазерных указки, для предварительного ручного центрирования. Кольцо припаяно к серебряной пластинке, которая служит "нулем" по Z.
Вот набросал алгоритм:
-1. Устанавливаем вручную щуп внутри кольца. Делаем как обычно хоминг, но в пределах стенок кольца, далее запускаем нижеследующий код.
0. Переходим на относительные координаты.
1. Едем по Z, до касания с потолком датчика.
2. Едем обратно, 2мм.
3. Обнуляем переменные.
4. Едем по Y вперед, отмеряем расстояние, заносим в переменную R1, до касания с датчиком - стенками кольца.
5. На малой скорости – уточняем.
6. Едем расстояние R1, в обратном направлении.
7. Едем назад по Y, отмеряем расстояние, заносим в переменную R2, до касания с датчиком – стенками кольца.
8. На малой скорости – уточняем.
9. R3=(R1+R2)/2-0.5D, где 0.5D – половина диаметра щупа.
10. Едем вперед на расстояние R3.
11. То же самое но по оси X.
12. Поднимаемся по Z, чтобы освободить щуп из кольца.
13. Делаем программное смещение.
14. Переходим на абсолютные координаты.
Я понимаю, что всё можно сделать с помощью О-кодов. У меня вопрос к уважаемым знатокам, как мне отловить в цикле событие – щуп сконтачил с кольцом. Желательно, чтобы щуп электрически был соединен с лимитом, так как один из лимитов у меня на станке – HOME, и таким образом его можно будет использовать и для хоминга вручную.
https://www.youtube.com/watch?v=bCeQ0WlSXmc
Преимущество, имхо в том, что точность в 2 раза выше обычного метода с простым касанием.
Конструкцию думаю делать такой: серебряное кольцо 925 пробы, тонкий короткий щуп из того же материала. Серебро - так как усилие контакта небольшое по сравнению с парой медь-фреза, и его возникающие в эксплуатации окислы имеют такую же проводимость как и металл.
Взять пружинку, которая всё время возвращается в одно и то же положение. Ну и сплав пружины чтоб от температуры окружающего воздуха не зависел. Во время измерения ее освобождать вниз, а во время резки отгибать вверх.
Пружина жестко продолжается планкой, её длина будет превышать длину инструмента на ширину кольца+некоторое расстояние. Для удобства, так как пружина с планкой громоздкая, её можно разместить снизу, на заготовке, а маленькое кольцо приклеить сверху около фрезера. По периметру кольца 3 лазерных указки, для предварительного ручного центрирования. Кольцо припаяно к серебряной пластинке, которая служит "нулем" по Z.
Вот набросал алгоритм:
-1. Устанавливаем вручную щуп внутри кольца. Делаем как обычно хоминг, но в пределах стенок кольца, далее запускаем нижеследующий код.
0. Переходим на относительные координаты.
1. Едем по Z, до касания с потолком датчика.
2. Едем обратно, 2мм.
3. Обнуляем переменные.
4. Едем по Y вперед, отмеряем расстояние, заносим в переменную R1, до касания с датчиком - стенками кольца.
5. На малой скорости – уточняем.
6. Едем расстояние R1, в обратном направлении.
7. Едем назад по Y, отмеряем расстояние, заносим в переменную R2, до касания с датчиком – стенками кольца.
8. На малой скорости – уточняем.
9. R3=(R1+R2)/2-0.5D, где 0.5D – половина диаметра щупа.
10. Едем вперед на расстояние R3.
11. То же самое но по оси X.
12. Поднимаемся по Z, чтобы освободить щуп из кольца.
13. Делаем программное смещение.
14. Переходим на абсолютные координаты.
Я понимаю, что всё можно сделать с помощью О-кодов. У меня вопрос к уважаемым знатокам, как мне отловить в цикле событие – щуп сконтачил с кольцом. Желательно, чтобы щуп электрически был соединен с лимитом, так как один из лимитов у меня на станке – HOME, и таким образом его можно будет использовать и для хоминга вручную.
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Поиск нуля кольцом
Его нет необходимости ловить в цикле - в LCNC есть G38.Urx писал(а):как мне отловить в цикле событие – щуп сконтачил с кольцом.
Чудес не бывает. Бывают фокусы.
Re: Поиск нуля кольцом
А G38 только с probe работает? А с Home? Просто не хочется всякий раз перетыкать штепсель датчика из home в probe, забуду и будет неприятность.
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Поиск нуля кольцом
Куда подключишь (на уровне hal), с тем и будет работать. Нет препятствий подключить к одному источнику сигнала два входа, конечно, если Home не используется как аппаратный лимит.Urx писал(а):А G38 только с probe работает? А с Home?
Чудес не бывает. Бывают фокусы.
- solo
- Мастер
- Сообщения: 1374
- Зарегистрирован: 20 окт 2011, 18:39
- Репутация: 272
- Настоящее имя: Юрий Соловьев
- Откуда: Украина Харьков
- Контактная информация:
Re: Поиск нуля кольцом
Классная идея хом выполнять кольцом. тогда получается вообще датчики нома не нужны если допустим кольцо закрепить стационарно на столе.
А можно один и тот же вывод ЛПТ порта использовать как пробе и Хом.
А можно один и тот же вывод ЛПТ порта использовать как пробе и Хом.
Мне кажется что можно после этой операции достаточно переместиться в относительной системе координат в реверсом направлении после последней пробы на расстояние R3=(R1+R2)/2 без учета диаметра инструмента.Urx писал(а):9. R3=(R1+R2)/2-0.5D, где 0.5D – половина диаметра щупа.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Поиск нуля кольцом
Погоди, так что ты хочешь таким образом делать, искать параметры инструмента, или нули станка?
Re: Поиск нуля кольцом
Вот написал код, сегодня проверил, ругается на строку с ROUND, типа не понимает выражение.
Код: Выделить всё
#<CurX> = #5420
#<CurY> = #5421
#<CurZ> = #5422
;0. Переходим на относительные координаты.
G91
;1. Едем по Z, до касания с потолком датчика.
G38.2 Z-20 F10
G38.4 Z3 F1
G92 Z[0-2]
;2. Едем обратно, 2мм.
G0 Z2
;3. Обнуляем переменные.
#<R1>=0
#<R2>=0
#<R3>=0
;4. Едем по Y вперед, отмеряем расстояние, заносим в переменную R1, до касания с ;датчиком - стенками кольца.
;5. На малой скорости – уточняем.
G92 Y[0]
G38.2 Y20 F10
G38.4 Y-3 F1
#<R1>=#<CurY>
;6. Едем расстояние R1, в обратном направлении.
G0 Y-#<R1>
;7. Едем назад по Y, отмеряем расстояние, заносим в переменную R2, до касания с ;датчиком – стенками кольца.
;8. На малой скорости – уточняем.
G92 Y[0]
G38.2 Y-20 F10
G38.4 Y3 F1
#<R2>=#<CurY>
;9. R3=(R1+R2)/2-0.5D, где 0.5D – половина диаметра щупа.
#<R3>= ROUND[(#<R1>+#<R2>)/2]-1
;10. Едем вперед на расстояние R3.
G92 Y[0]
G0 Y#<R3>
G92 Y[0]
;11. То же самое но по оси X.
#<R1>=0
#<R2>=0
#<R3>=0
G92 X [0]
G38.2 X 20 F10
G38.4 X -3 F1
#<R1>=#<CurX>
G0 X-#<R1>
G92 X[0]
G38.2 X-20 F10
G38.4 X3 F1
#<R2>=#<CurX>
#<R3>= ROUND[(#<R1>+#<R2>)/2]-1
G92 X[0]
G0 X#<R3>
G92 X[0]
;12. Поднимаемся по Z, чтобы освободить щуп из кольца.
G0 Z5
;14. Переходим на абсолютные координаты.
G90-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Поиск нуля кольцом
Код: Выделить всё
#<CurX> = #5420
#<CurY> = #5421
#<CurZ> = #5422
;0. Переходим на относительные координаты.
G91
;1. Едем по Z, до касания с потолком датчика.
G38.2 Z-20 F10
G38.4 Z3 F1
G92 Z[0-2]
;2. Едем обратно, 2мм.
G0 Z2
;3. Обнуляем переменные.
#<R1>=0
#<R2>=0
#<R3>=0
;4. Едем по Y вперед, отмеряем расстояние, заносим в переменную R1, до касания с ;датчиком - стенками кольца.
;5. На малой скорости – уточняем.
G92 Y[0]
G38.2 Y20 F10
G38.4 Y-3 F1
#<R1>=#<CurY>
;6. Едем расстояние R1, в обратном направлении.
G0 Y-#<R1>
;7. Едем назад по Y, отмеряем расстояние, заносим в переменную R2, до касания с ;датчиком – стенками кольца.
;8. На малой скорости – уточняем.
G92 Y[0]
G38.2 Y-20 F10
G38.4 Y3 F1
#<R2>=#<CurY>
;9. R3=(R1+R2)/2-0.5D, где 0.5D – половина диаметра щупа.
#<R3> = ROUND[[[#<R1> + #<R2>]/2] - 1]
;10. Едем вперед на расстояние R3.
G92 Y[0]
G0 Y#<R3>
G92 Y[0]
;11. То же самое но по оси X.
#<R1>=0
#<R2>=0
#<R3>=0
G92 X [0]
G38.2 X 20 F10
G38.4 X -3 F1
#<R1>=#<CurX>
G0 X-#<R1>
G92 X[0]
G38.2 X-20 F10
G38.4 X3 F1
#<R2>=#<CurX>
#<R3>= ROUND[[[#<R1>+#<R2>]/2]-1]
G92 X[0]
G0 X#<R3>
G92 X[0]
;12. Поднимаемся по Z, чтобы освободить щуп из кольца.
G0 Z5
;14. Переходим на абсолютные координаты.
G90
m2-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Поиск нуля кольцом
не прослеживая алгоритм , я мог не правильно расставить скобки...
поправь , если что...
поправь , если что...
Re: Поиск нуля кольцом
Спасибо, nkp! Проверил - больше не ругается, а скобки я расставлю как надо.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Поиск нуля кольцом
nkp +1!
На всякий случай, все математические выражения должны быть в []. Т.е. не
#1 = 2 + 3
а
#1 = [2 + 3]
На всякий случай, все математические выражения должны быть в []. Т.е. не
#1 = 2 + 3
а
#1 = [2 + 3]
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Поиск нуля кольцом
Если R3 это центр кольца, то надо просто [[#<R1> + #<R2>]/2]... И кстати, зачем в измерениях ROUND?;9. R3=(R1+R2)/2-0.5D, где 0.5D – половина диаметра щупа.
#<R3> = ROUND[[[#<R1> + #<R2>]/2] - 1]
;10. Едем вперед на расстояние R3.
G92 Y[0]
G0 Y#<R3>
G92 Y[0]
- Serb01
- Опытный
- Сообщения: 107
- Зарегистрирован: 04 июн 2012, 09:58
- Репутация: 17
- Настоящее имя: Сергей Беседин
- Откуда: Новокузнецк
- Контактная информация:
Re: Поиск нуля кольцом
Стабильности не будет. Всё должно быть жестко. Примерно так.Urx писал(а):Взять пружинку, которая всё время возвращается в одно и то же положение. Ну и сплав пружины чтоб от температуры окружающего воздуха не зависел. Во время измерения ее освобождать вниз, а во время резки отгибать вверх.
Пружина жестко продолжается планкой, её длина будет превышать длину инструмента на ширину кольца+некоторое расстояние. Для удобства, так как пружина с планкой громоздкая, её можно разместить снизу, на заготовке, а маленькое кольцо приклеить сверху около фрезера. По периметру кольца 3 лазерных указки, для предварительного ручного центрирования. Кольцо припаяно к серебряной пластинке, которая служит "нулем" по Z.
Значительно проще быть чуточку внимательней, чем долгое время пускать деньги на ветер
Re: Поиск нуля кольцом
Сегодня после долгих и упорных испытаний, в том числе станка и датчика на прочность, получил работающий код:
Следующим усовершенствованием будет избавление от периодического перетыкивания датчика с HOME на PROBE, сдуру бывает забываешь перетыкнуть и хорошо еще что прога останавливается, или гибкость станка не позволяет сразу поломать фрезу или дорогостоящий датчик. Так как кольцо я использую еще и для начального хоминга. Задействую выход который включает пылесос, этот выход не использую все равно, он будет релюшкой переключать датчик с PROBE на HOME в программе. Еще второе усовершенствование - эта прога будет запускаться при старте Axes вместо рисующей надпись "LinuxCNC". Ну и смещение сделаю нормальное, чтобы ноль был не в центре кольца а там где он должен быть, в начале работы.
Код: Выделить всё
#<CurX> = #5420
#<CurY> = #5421
#<CurZ> = #5422
;0. Переходим на относительные координаты.
G91
;1. Едем по Z, до касания с потолком датчика.
G38.2 Z-20 F100
G38.4 Z3 F10
G92 Z[0-2]
;2. Едем обратно, 2мм.
G0 Z2
;3. Обнуляем переменные.
#<R1>=0
#<R2>=0
#<R3>=0
;4. Едем по Y вперед, отмеряем расстояние, заносим в переменную R1, до касания с ;датчиком - стенками кольца.
;5. На малой скорости – уточняем.
G92 Y[0]
G38.2 Y20 F100
G38.4 Y-3 F10
#<CurY> = #5421
#<R1>=ABS[#<CurY>]
(DEBUG, "R1y ", #<R1>)
;6. Едем расстояние R1, в обратном направлении.
G0 Y-#<R1>
;7. Едем назад по Y, отмеряем расстояние, заносим в переменную R2, до касания с ;датчиком – стенками кольца.
;8. На малой скорости – уточняем.
G92 Y[0]
G38.2 Y-20 F100
G38.4 Y3 F10
#<CurY> = #5421
#<R2>=ABS[#<CurY>]
(DEBUG, "R2y ", #<R2>)
;9. R3=(R1+R2)/2-0.5D, где 0.5D – половина диаметра щупа.
#<R3> = [[#<R1> + #<R2>]/2]
(DEBUG, "R3y ", #<R3>)
;10. Едем вперед на расстояние R3.
G92 Y[0]
G0 Y#<R3>
G92 Y[0]
;11. То же самое но по оси X.
#<R1>=0
#<R2>=0
#<R3>=0
G92 X [0]
G38.2 X 20 F100
G38.4 X -3 F10
#<CurX> = #5420
#<R1>=ABS[#<CurX>]
(DEBUG, "R1x ", #<R1>)
G0 X-#<R1>
G92 X[0]
G38.2 X-20 F100
G38.4 X3 F10
#<CurX> = #5420
#<R2>=ABS[#<CurX>]
(DEBUG, "R2x ", #<R2>)
#<R3>= [[#<R1> + #<R2>]/2]
(DEBUG, "R3x ", #<R3>)
G92 X[0]
G0 X#<R3>
G92 X[0]
;12. Поднимаемся по Z, чтобы освободить щуп из кольца.
G0 Z15
;14. Переходим на абсолютные координаты.
G90
(DEBUG, "X ", #5420)
(DEBUG, "Y ", #5421)
(DEBUG, "Z ", #5422)
m2
Re: Поиск нуля кольцом
Да, абсолютно не нужен, я уже дошел до этой истины практическим путем.Nick писал(а):Если R3 это центр кольца, то надо просто [[#<R1> + #<R2>]/2]... И кстати, зачем в измерениях ROUND?;9. R3=(R1+R2)/2-0.5D, где 0.5D – половина диаметра щупа.
#<R3> = ROUND[[[#<R1> + #<R2>]/2] - 1]
;10. Едем вперед на расстояние R3.
G92 Y[0]
G0 Y#<R3>
G92 Y[0]
Re: Поиск нуля кольцом
Да, только я собрал свой пружинящий щуп, как понял его минусы, и ставить не стал. Использую фрезу в качестве щупа. Интересная у вас конструкция. Это дело надо устанавливать в патрон вместо фрезы?Serb01 писал(а):Стабильности не будет. Всё должно быть жестко. Примерно так.Urx писал(а):Взять пружинку, которая всё время возвращается в одно и то же положение. Ну и сплав пружины чтоб от температуры окружающего воздуха не зависел. Во время измерения ее освобождать вниз, а во время резки отгибать вверх.
Пружина жестко продолжается планкой, её длина будет превышать длину инструмента на ширину кольца+некоторое расстояние. Для удобства, так как пружина с планкой громоздкая, её можно разместить снизу, на заготовке, а маленькое кольцо приклеить сверху около фрезера. По периметру кольца 3 лазерных указки, для предварительного ручного центрирования. Кольцо припаяно к серебряной пластинке, которая служит "нулем" по Z.
- Serb01
- Опытный
- Сообщения: 107
- Зарегистрирован: 04 июн 2012, 09:58
- Репутация: 17
- Настоящее имя: Сергей Беседин
- Откуда: Новокузнецк
- Контактная информация:
Re: Поиск нуля кольцом
Да, вставляется в цангу.
Значительно проще быть чуточку внимательней, чем долгое время пускать деньги на ветер
Re: Поиск нуля кольцом
А как выбрать другой код который запускается при запуске Axes? Тот который рисует "LinuxCNC". Или может быть этот файл можно как то отредактировать чтобы вставить свой код - поиск нуля кольцом?
- Serb01
- Опытный
- Сообщения: 107
- Зарегистрирован: 04 июн 2012, 09:58
- Репутация: 17
- Настоящее имя: Сергей Беседин
- Откуда: Новокузнецк
- Контактная информация:
Re: Поиск нуля кольцом
Nick перевёл руководсво EMC2 Integrators Manual Перевод на русский язык http://cnc-club.ru/forum/viewtopic.php?f=15&t=150#p1496
В ini файле в разделе DISPLAY строка файл который будет загружен при старте AXIS. Используйте пустую строку "" и никакого файла не будет загружено.
В ini файле в разделе DISPLAY строка
Код: Выделить всё
OPEN_FILE = /full/path/to/file.ngcЗначительно проще быть чуточку внимательней, чем долгое время пускать деньги на ветер
Re: Поиск нуля кольцом
Большое спасибо вам и Nick-у.Serb01 писал(а):Nick перевёл руководсво EMC2 Integrators Manual Перевод на русский язык http://cnc-club.ru/forum/viewtopic.php?f=15&t=150#p1496
В ini файле в разделе DISPLAY строкафайл который будет загружен при старте AXIS. Используйте пустую строку "" и никакого файла не будет загружено.Код: Выделить всё
OPEN_FILE = /full/path/to/file.ngc
