Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Автоматический Поиск Центра Отверстия
Все о станках с ЧПУ > Станки с ЧПУ, Hobby CNC > Программное обеспечение
ridirt
Встал такой вопрос : можно ли в мач3 или какой нибудь другой программе определить центр отверстия или центр круглой заготовки/детали.
Нигде в интернете пока ничего вразумительного не нашел, может плохо искал правда. Здесь на форуме тоже похожей темы нет.
Если у кого то есть опыт в этом деле то хотя бы намекните в каком направлении двигаться а то тыкаюсь сейчас как слепой котенок.

Просто встал вопрос о последующей фрейзерной обработке цилиндрического изделия выточенного на токарном станке, а вот как центр этого изделия найти пока не понятно. unsure.gif
Хочется так же знать есть ли в мач такая очень нужная функция как определение верха заготовки по z ? rolleyes.gif
Андр1
Ставите на концевик одной из осей щуп,тарируете его,касаетесь одной стенки отверстия,касаетесь другой стенки.Считаете. Вроде вот такой алгоритм должен подойти.Сам не делал,только идея.
По З дожно быть аналогично.
А потом фреЙЙЙзеровать можно. ))
vladin21
Способов и инструментов масса(по слову probe ищется на раз). Вот один из примеров реализации http://youtu.be/TRUa81Oxfv8 (сам поиск центра с 1мин18сек)
ridirt
probe значит..., оке спасибо, а вообще в том фидео показана реализация щупаа по программной части ничего нет, а меня интересует как раз эта часть , так как в остальном то все просто. ab.gif

Андр1, алгоритм не верный, нужно коснуться 4 стенок , когда 2 стенок касаемся можно только центр отрезка найти, алгоритм то и ежу понятен, хочется чтобы "где то вот взял прогу скачал поставил и не мучаешься" wink.gif
Alexeon
Вот скрипт для щупа по отвестию,под Мач3.Использовал скрипт для поиска "0" по габаритам-автор не я(взял либо тут на форуме либо еще гдето не помню уже).Переписал для отверстия.Причем отвестие любое-овал,прямоугоьник. XY и глубина Z
вносятся отдельно.Рекомендую сначала опробовать скрипт на незакрепленной болванке с отверстием,но у меня работает.


Code "G92.2 "
Dww = GetOEMDRO(1000)/(2)

Zww = Question ("Mass Z ?")
Xww = Question ("Mass X ?")
Yww = Question ("Mass Y ?")

' setting_X '

Code "G91"
Code "G04 p1"
Code "G31 Z" & -Zww & "F1000"

Code "G31 X" & 5.0-Xww/2 & "F1000"
Code "G04 p1"
Code "G31 X" &-10 & "F75"
Code "G04 p1"
Code "G00 X3"
Code "G90 "
While IsMoving()
Wend
Call SetDRO(0,0)
While IsMoving()
Wend
Code "G91"
Code "G04 p1"
Code "G31 X" & Xww-10 & "F1000"
Code "G04 p1"
Code "G31 X" & 20 & "F75"
Code "G04 p1"
Code "G00 X-3"
Code "G90 "
While IsMoving()
Wend


Xw = GetDRO(0)-Dww*2
While IsMoving()
Wend
Call SetDRO(0, (GetDRO(0))/2)
While IsMoving()
Wend
Code "G04 p1"
Code "G91"



Code "G90"
Code "G31 G90 X" & 0 & "F1000.0"
Code "G31 X" &0 & "F100"
While IsMoving()
Wend

' setting_Y '

Code "G91"
Code "G31 Y" & 5.0-Yww/2 & "F1000"

Code "G04 p1"
Code "G31 Y" &-10 & "F75"
Code "G04 p1"
Code "G00 Y3"
Code "G90 "
While IsMoving()
Wend
Call SetDRO(1,0)
While IsMoving()
Wend
Code "G91"
Code "G04 p1"
Code "G31 Y" & Yww-10 & "F1000"
Code "G04 p1"
Code "G31 Y" & 20 & "F100"
Code "G04 p1"
Code "G00 Y-3"
Code "G90 "
While IsMoving()
Wend
Yw = GetDRO(1)-Dww*2
Call SetDRO(1, (GetDRO(1))/2)
While IsMoving()
Wend
Code "G04 p1"
Code "G91 "
Code "G90"
Code "G31 G90 Y" & 0 & "F1000.0"
Code "G31 Y" &0 & "F100"
Code "G00 Z20"
Code "G90 "

While IsMoving()
Wend

responde = MsgBox ("MassX" &Xw&)
responde = MsgBox ("MassY" &Yw&)
ridirt
Alexeon, спасибоо огромное обязательно опробую как только доберусь до станка.
с меня пиво ad.gif
ridirt
А как прикрутить макрос к какой нибудь команде, к примеру к команде включения шпинделя или просто к любой команде которая не понимается к примеру матчем . Вот есть к примеру какой то постпроцессор который к примеру почти подходящий к моему плазморезу, мои действия каковы, ? я должен как то поменять постпроцессор так чтобы там перед включением плазмы прописывался г-год, который бы запускал в матче макрос поиска верха заготовки, или переписать в матче комманду м3 ак чтобы она не просто включала к примеру плазму а перед этим еще верхзаготовки искала а потом только включала плазму. Вот есть к примеру какой то простенький постпроцессор с щиткама он мне выдал такую ерунду
N0000 G21
N0010 G17
N0020 G90
N0030 T10
N0040 G00 Z12.7000
N0050 X16.4112 Y138.0278
N0060 Z5.0000
N0070 G01 Z1.0000 F500
N0080 G02 X15.1881 Y129.0598 I11.3157 J134.1553 F5000.0
N0090 G03 X7.3548 Y71.6234 I39.9897 J96.4249
N0100 G03 X7.5567 Y71.4242 I8.1509 J72.2285
N0110 G02 X77.2862 Y-0.5682 I-173.6591 J-173.8606
N0120 G03 X78.9393 Y-0.5574 I78.1091 J-0.0000
N0130 G02 X148.7090 Y71.1964 I310.8167 J-156.2259
N0140 G03 X148.9226 Y71.4029 I148.1285 J72.0107
N0150 G03 X83.3670 Y121.2268 I116.2285 J96.4249
N0160 G01 X77.9956 Y114.1589
N0170 X72.6246 Y121.2265
N0180 G03 X15.1881 Y129.0598 I39.9897 J96.4249
N0190 G02 X6.2202 Y130.2829 I11.3157 J134.1553
N0200 G00 Z12.7000
N0210 M05
N0220 M05
N0230 M30
она работает и при этом рисуется сердечко, но вот чем здесь запускается плазма непонятно , ниаких кодов нет, только в конце выключения, а что выключать кгда ничего не включено.
Темный лес до сих пор все это для меня
ridirt
Спустя почти 4 года я вновь озаботился всерьез проблемой поиска ценра отверстия, и в поиске яндекса вылетела на первой же странице тема созданная мной же. За более чем 3 года видимо в интернете ничего нового и не появилось, только старое, хорошенько покопавшись я нашел еще более старый пост с похожей тематикой на другом сайте, скрипт довольно простой , говорят что рабочий, поэтому я смело на следующей неделе попробую прикрутить его уже к своему станку
, может кого еще интересует выкину на всякий пожарный сюда

Код
Rem VBScript Поиск центра отверстия

ProbeFeed = 100 'Скорость перемещения фрезы при поиске
Rem У меня при этой скорости деталь даже не сдвигалась.
ProbeDist = 30 ' Расстояние с запасом до краев отверстия. Если отверстие большое - увеличить до диаметра
Code "M3"
Code "G4 P1" 'пауза 1 секунда

Code "F" &ProbeFeed 'Устанавливаем скорость поиска

If GetOemLed (825) <> 0 Then 'Если фреза касается края отверстия выводим
Code "(Probe plate is grounded, check connection and try again)"
Else
FeedCurrent = GetOemDRO(818) ' Запоминаем текущую скорость
XCurrent = GetDro(0)
YCurrent = GetDro(1)

Code "G4 P1" ' Пауза в 1 секунду на всякий случай

Rem Ищем влево

XNew = Xcurrent - ProbeDist ' Точка за пределами отверстия
Code "G31 X" &XNew
While IsMoving() ' ждем пока коснется или остановится
Wend
XPos1 = GetVar(2000) 'предполагаем, что коснулись и считываем X1

Code "G0 X" &XCurrent 'быстро возвращаемся в исходную позицию

Rem Ищем вправо

XNew = XCurrent + ProbeDist ' Точка за пределами отверстия
Code "G31 X" &XNew
While IsMoving() ' ждем пока коснется или остановится
Wend
XPos2 = GetVar(2000) 'предполагаем, что коснулись и считываем X2

XCenter = (XPos1 + XPos2) / 2 ' так как отверстие круглое и фреза круглая, то центр по Х в середине
Code "G0 X" &XCenter ' быстро устанавливаем в центр по Х

Rem Ищем вперед

YNew = YCurrent + ProbeDist ' Точка за пределами отверстия
Code "G31 Y" &YNew
While IsMoving()
Wend
YPos1 = GetVar(2001) 'предполагаем, что коснулись и считываем Y1
Code "G0 Y" &YCurrent

Rem Ищем назад
YNew = YCurrent - ProbeDist ' Точка за пределами отверстия
Code "G31 Y" &YNew
While IsMoving()
Wend
YPos2 = GetVar(2001) ' предполагаем, что коснулись и считываем Y2
YCenter = (YPos1 + YPos2) / 2 ' так как отверстие круглое и фреза круглая, то центр по Y в середине

Rem Двигаемся в найденный центр по Y
Code "G0 Y" &YCenter
While IsMoving () ' ждем пока едет
Wend

Code "M5"
Code "F" &FeedCurrent ' восстанавливаем скорость
End If


только мне в нем одно не понятно зачем нужны команды включения и выключения шпинделя
George164
Цитата(ridirt @ 20.11.2015, 1:19) *
только мне в нем одно не понятно зачем нужны команды включения и выключения шпинделя

Мне тоже.
Искал совершенно другое, но поиском случайно попал на этот форум.
Вы хоть и не указали источник, но, по-видимому взяли этот скрипт из моего сообщения на одном форуме. Как я там пишу, исходник был не мой. Я его только доработал.
В то время я просто не знал назначение команд М3-5, поэтому не удалил. :(
На том же форуме можно в описании датчика касания найти и мой безопасный (встроен контроль касания при любом перемещении по осям, чтобы не повредить датчик касания) скрипт для поиска центра круглой шайбы по внешним габаритам. Это уже чисто мой алгоритм. Смешно, но туда тоже перекочевали и команды М3-5. Время правки закрылось поэтому изменить скрипт вряд ли возможно.
Если есть желание и датчик касания, то можно потестировать тот скрипт и здесь. Я свой датчик касания разобрал, а собрать не смог. Есть идеи новой конструкции, но не хватает мотивации.
ridirt
Цитата(George164 @ 27.11.2015, 14:53) *
Мне тоже.
Искал совершенно другое, но поиском случайно попал на этот форум.
Вы хоть и не указали источник, но, по-видимому взяли этот скрипт из моего сообщения на одном форуме. Как я там пишу, исходник был не мой. Я его только доработал.
В то время я просто не знал назначение команд М3-5, поэтому не удалил. :(
На том же форуме можно в описании датчика касания найти и мой безопасный (встроен контроль касания при любом перемещении по осям, чтобы не повредить датчик касания) скрипт для поиска центра круглой шайбы по внешним габаритам. Это уже чисто мой алгоритм. Смешно, но туда тоже перекочевали и команды М3-5. Время правки закрылось поэтому изменить скрипт вряд ли возможно.
Если есть желание и датчик касания, то можно потестировать тот скрипт и здесь. Я свой датчик касания разобрал, а собрать не смог. Есть идеи новой конструкции, но не хватает мотивации.


Эти команды как оказалось для исключения погрешности биения фрезы, по факту конечно он не нужен, погрешности там при цанговом зажиме и шлифованной поверхности быть не может, а вот определить центр не переставляя фрезу на обломок теоритически возможно, что упрощает задачу в разы, но есть риск повредить само отверстие в этом случа
AlexSpb
Могу вам дать скрипт от CNC Magic Probe и спокойно найдете центр.
По сути это код поиска центра отверстия.
На ю тубе поиском "CNC Magic Probe" посмотрите как этот работает.
Цитата
Rem VBScript To probe In the z axis

If GetOemLed (825) <> 0 Then 'Check to see if the probe is already grounded or faulty
Code "(Z-Plate is grounded, check connection and try again)" 'this goes in the status bar if aplicable
Else
Code "G4 P0" 'Pause 0 seconds to give time to position probe plate
PlateOffset = GetUserDRO(1151) 'Get plate offset DRO
CurrentFeed = GetOemDRO(818) 'Get the current feedrate to return to later
Code "F15" 'slow down feedrate to 15 ipm

Rem Probe In the z direction
ZNew = GetDro(2) - 20 'probe move to current z - 20mm
Code "G31Z" &ZNew
While IsMoving() 'wait for probe move to finish
Wend

ZNew = GetVar(2002) 'read the touch point
Code "G0 Z" &ZNew 'move back to hit point incase there was overshoot
While IsMoving ()
Wend

If PlateOffset <> 0 Then
Call SetDro (2, PlateOffset) 'set the Z axis DRO to plate thickness
Code "G4 P0.01" 'Pause for Dro to update.
ZNew = PlateOffset + 0.5
Code "G0 Z" &ZNew 'put the Z retract height you want here
Code "(Z axis is now zeroed)" 'puts this message in the status bar
End If

Code "F" &CurrentFeed 'Returns to prior feed rate
End If

Rem VBScript To center probe inside a pipe
'If GetOemLed (825) <> 0 Then 'Check to see if the probe is already grounded or faulty
' Code "(Probe plate is grounded, check connection and try again)"

'Else
FeedCurrent = GetOemDRO(818) 'Get the current settings
XCurrent = GetDro(0)
YCurrent = GetDro(1)

Code "G4 P0" 'Pause 0 second to give time to position probe plate
Code "F15" 'slow feed rate to 15 ipm

Rem Probe Left

XNew = Xcurrent - 15 'probe -15mm to left
Code "G31 X" &XNew
While IsMoving() 'wait for the move to finish
Wend
XPos1 = GetVar(2000) 'get the probe touch location

Code "G0 X" &XCurrent 'rapid move back to start point

Rem Probe Right

XNew = XCurrent + 15 'probe +15mm to right
Code "G31 X" &XNew
While IsMoving()
Wend
XPos2 = GetVar(2000)

XCenter = (XPos1 + XPos2) / 2 'center is midway between XPos1 and XPos2
Code "G0 X" &XCenter 'rapid move to the x center location

Rem Probe up

YNew = YCurrent + 15
Code "G31 Y" &YNew
While IsMoving()
Wend
YPos1 = GetVar(2001)

Code "G0 Y" &YCurrent

Rem Probe down

YNew = YCurrent - 15
Code "G31 Y" &YNew
While IsMoving()
Wend
YPos2 = GetVar(2001)

YCenter = (YPos1 + YPos2) / 2

Rem move To the center

Code "G0 Y" &YCenter
While IsMoving ()
Wend
Rem Code "G92 X0 Y0"
While IsMoving()
Wend
code "G92 X0 Y0"

code "G92 X0 Y0"
Code "G0 Z" &ZNew +2 'put the Z retract height you want here
Code "(Z axis is now zeroed)" 'puts this message in the status bar

code "G0 X0 Y0"
Code "F" &FeedCurrent 'restore starting feed rate
Code "M5"
'End If



Не буду долго разъяснять некие глюки мача по отработке скрипта и почему строчки повторяются.
Это рабочий скрипт и с другими координатами применяется на ЧПУ CNC Magic
Скопируйте цитату и вставьте в скрипт кнопки как текст.
ridirt
ну на первый взгляд этот тот же самый скрипт, только пометки на англицком, Он рабочий я не спорю, в этом даже убрана команда включения шпинделя, но оставлена выключения)). В любом случае благодарю. Поиск центра ищется отлично.
AlexSpb
Прикольно... Здесь:
Цитата
Способов и инструментов масса(по слову probe ищется на раз). Вот один из примеров реализации http://youtu.be/TRUa81Oxfv8 (сам поиск центра с 1мин18сек)

Станок не наш, а экран мача, скрипты, в т.ч. определение координат датчика 0, определение длины инструмента-наше.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2021 IPS, Inc.