Страница 1 из 2
Скрипты для MACH3.
Добавлено: 12 дек 2014, 07:38
putman
Здравствуйте !
Был на форуме скрипт центроискателя, у меня он не работал, кое как адаптировал.
Т.к. для финишной обработки я снимаю деталь, и снова ставлю другой стороной, она всегда сдвинута на небольшой угол (0.1 - 0.3 градуса).
По этому по двум отверстиям хочу находить угол смещения.
Вопрос первый,
1. Нужны функции sin, cos, tg, они поддерживаются скриптом или придется высчитывать руками ?
Вопрос второй,
2. В завершении приведенного ниже скрипта, инструмент стоит в координатах 0, 0. Но стоит начать другую УП, как координаты смещаются с учетом G92 и нули уходят. Как написать так, что бы значения не изменялись ?
Вопрос третий,
3. Искал и не смог найти справочника по языку сценариев для MACH3, это какой то секретный язык ?
Код: Выделить всё
Code "G04 p0.25" 'пауза 0.5 c
Code "G31 X-1000 F200" ' двигаться по +Х на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Call SetDRO(0,0) ' обнулить данные в окне X
Code "G04 p0.25" ' пауза 0.5 с
Code "G01 x0.25" '
Code "G04 p0.25" ' пауза 0.5 с
Code "G31 X1000" ' двигаться по -X на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Code "G04 p0.25" ' пауза 0.5 с
Xnew = GetDRO(0) - 0.25
Code "G01 x"&Xnew
Xnew = (Xnew+0.25)/2
Code "G01 x"&Xnew
Code "G92 X0"
Code "G04 p0.25" ' пауза 0.5 с
'Установили предварительный нуль по Х.
Code "G31 Y-1000 F200" ' двигаться по +Х на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Call SetDRO(1,0) ' обнулить данные в окне Y
Code "G04 p0.25" ' пауза 0.5 с
Code "G01 Y0.25" '
Code "G04 p0.25" ' пауза 0.5 с
Code "G31 Y1000" ' двигаться по -X на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Code "G04 p0.25" ' пауза 0.5 с
Ynew = GetDRO(1) - 0.25
'responde = MsgBox ("сторона X =" &Xnew&)
Code "G01 Y"&Ynew
Ynew = (Ynew+0.25)/2
'responde = MsgBox ("сторона X =" &Xnew&)
Code "G01 Y"&Ynew
Code "G92 Y0"
Code "G04 p0.25" ' пауза 0.5 с
'Установили предварительный нуль по Y.
Code "G04 p0.25" 'пауза 0.5 c
Code "G31 X-1000 F100" ' двигаться по +Х на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Call SetDRO(0,0) ' обнулить данные в окне X
Code "G04 p0.25" ' пауза 0.5 с
Code "G01 x0.25" '
Code "G04 p0.25" ' пауза 0.5 с
Code "G31 X1000" ' двигаться по -X на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Code "G04 p0.25" ' пауза 0.5 с
Xnew = GetDRO(0) - 0.25
Code "G01 x"&Xnew
Xnew = (Xnew+0.25)/2
Code "G01 x"&Xnew
Code "G92 X0"
Code "G04 p0.25" ' пауза 0.5 с
'Установили окончательный нуль по Х.
Code "G31 Y-1000 F100" ' двигаться по +Х на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Call SetDRO(1,0) ' обнулить данные в окне Y
Code "G04 p0.25" ' пауза 0.5 с
Code "G01 Y0.25" '
Code "G04 p0.25" ' пауза 0.5 с
Code "G31 Y1000" ' двигаться по -X на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Code "G04 p0.25" ' пауза 0.5 с
Ynew = GetDRO(1) - 0.25
'responde = MsgBox ("сторона X =" &Xnew&)
Code "G01 Y"&Ynew
Ynew = (Ynew+0.25)/2
'responde = MsgBox ("сторона X =" &Xnew&)
Code "G01 Y"&Ynew
Code "G92 Y0"
Code "G04 p0.25" ' пауза 0.5 с
'Call SetDRO(1,0) ' обнулить данные в окне Y
Большущее ВСЕМ заранее СПАСИБО !!!
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 07:44
aftaev
putman писал(а):2. В завершении приведенного ниже скрипта, инструмент стоит в координатах 0, 0. Но стоит начать другую УП, как координаты смещаются с учетом G92 и нули уходят. Как написать так, что бы значения не изменялись ?
можно кнопочку сделать запомнить координаты (текущие координаты записать в какое нибудь поле ввода)
putman писал(а):3. Искал и не смог найти справочника по языку сценариев для MACH3, это какой то секретный язык ?
Visual Basic
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 07:46
aftaev
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 08:01
putman
aftaev писал(а):putman писал(а):2. В завершении приведенного ниже скрипта, инструмент стоит в координатах 0, 0. Но стоит начать другую УП, как координаты смещаются с учетом G92 и нули уходят. Как написать так, что бы значения не изменялись ?
1. можно кнопочку сделать запомнить координаты (текущие координаты записать в какое нибудь поле ввода)
2. На тебе до кучки Список скриптов/макросов для Mach #1
1. Так текущие при поиске центра - 0,0. И в поле Х и Y они стоят уже, только после любой команды перемещения к ним прибавляется то что находится в G92.
Сформулирую вопрос иначе.
Как из скрипта выставить реальные координаты X = 0, Y = 0, что бы ничего не смещалось ?
2. По ссылке куча ссылок форумов, а не скрипты. Так и должно быть ?
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 08:22
aftaev
putman писал(а):Как из скрипта выставить реальные координаты X = 0, Y = 0, что бы ничего не смещалось ?
1. создать свое поле ввода
2. когда нужно туды переписать нужные данные
putman писал(а):2. По ссылке куча ссылок форумов, а не скрипты. Так и должно быть ?
были примеры макросов
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 08:27
putman
aftaev писал(а):putman писал(а):Как из скрипта выставить реальные координаты X = 0, Y = 0, что бы ничего не смещалось ?
1. создать свое поле ввода
2. когда нужно туды переписать нужные данные
Зачем создавать свое поле если есть МАЧевское родное, туда вписал и Enter.
Надо автоматизировать, минимизировать ручной ввод.
Свое поле ввода тоже скриптом будет написано, зачем 2 скрипта, если можно из первого (центроискатела) сразу вписать в X, Y нули.
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 18:43
putman
Нашел мануал по VB, про синус и косинус там ничего нет.
Неужели такие вычисления не предусмотрены ?
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 19:13
Сергей Саныч
putman писал(а):Неужели такие вычисления не предусмотрены ?
В любом поисковике набираешь "visual basic математические функции" и ...
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 19:20
putman
Сергей Саныч писал(а):putman писал(а):Неужели такие вычисления не предусмотрены ?
В любом поисковике набираешь "visual basic математические функции" и ...
Набрал в гугле - "visual basic математические функции" и ...
...
Радостно скопировав - "Xnew = Math.Cos(0.31)" из примера .... и
и - не работает )))))))))))
VB для МАЧА не принимает.
Подскажите синтаксис пожалуйста, в гугле примеров полно, но не для MACH3.
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 19:47
Сергей Саныч
А просто Xnew = сos(0.31) не сработает?
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 19:49
konyshevk
Вот отсюда кое-что можно взять , это с оф. саита мача , Много примеров . есть с чем поэксперементировать . на английском
Сам вожусь щас со скриптом поиска центра с поворотом шпинделя на 180 гр. - это для того что-бы датчик не центрировать
привязку по краю с поворотом сделал , могу скинуть , вожусь с центром
Капризный мачь очень ,
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 19:54
shalek
Я в скриптах ничего не рублю, но гляньте может чего пригодится.
(для просмотра содержимого нажмите на ссылку)Sub Main()
' 2010 Circular Pocket Probing Script
' 3-1-11
Dim FRate1, FRate2
Dim DMax, Clearance, EdgeLength, CornerClear
Dim XStart, YStart
Dim PlateOffset, XOffset, YOffset
Dim ZeroYN
Dim ToolNo
Dim ToolD
Dim ProbeD
Dim ProbeLengthX, ProbeLengthY
Dim XNew, XHit1, Xhit2, XEdge, X1, X2
Dim YNew, YHit1, YHit2, YEdge, Y1, Y2
Dim XPos, YPos, EdgeAngle, PocketXLen, PocketYLen, EdgeDelta, XCenter, YCenter
Dim XScale, YScale, ZScale
Dim CurrentAbsInc
Dim CurrentFeed
FRate1 = abs(GetUserDRO(1821))
FRate2 = abs(GetUserDRO(1822))
DMax = abs(GetUserDRO(1823))
PlateOffset = GetUserDRO(1824)
ToolNo = GetCurrentTool()
ToolD = GetToolParam(ToolNo,1)
If GetUserDRO(1829) = 0 then
ProbeD = ToolD
Else
ProbeD = GetUserDRO(1829)
End If
Clearance = abs(GetUserDRO(1825))
XOffset = GetUserDRO(1826)
YOffset = GetUserDRO(1827)
EdgeLength = abs(GetUserDRO(1828))
ProbeLengthY = GetOEMDRO(801) + DMax
XStart = GetOEMDRO(800)
YStart = GetOEMDRO(801)
If GetOEMLED(801) Then ' On = English Measure INCH
CornerClear = 1.5
Else ' Off = Metric Measure MM
CornerClear = 38
End If
If GetOEMLED(1871) Then
ZeroYN=1
Else
ZeroYN=0
End If
CurrentFeed = GetOemDRO(818) ' Get the current feedrate to return to later
CurrentAbsInc = GetOemLED(48) ' Get the current G90/G91 state
'Get Axis Scale factors
XScale = GetOEMDRO(59)
YScale = GetOEMDRO(60)
ZScale = GetOEMDRO(61)
'Set All Axis' Scale to 1
Call SetOEMDRO(59,1)
Call SetOEMDRO(60,1)
Call SetOEMDRO(61,1)
Sleep(250)
'Check for Errors
If GetOemLED(16)<>0 Then ' Check for Machine Coordinates
Message "Please change to working coordinates"
Call SetOEMDRO(59,XScale)
Call SetOEMDRO(60,YScale)
Call SetOEMDRO(61,ZScale)
Sleep(250)
Exit Sub ' Exit if in Machine Coordinates
End If
If GetOemLED(825)<>0 Then
Message "Probe Grounded - Check connection and try again"
Call SetOEMDRO(59,XScale)
Call SetOEMDRO(60,YScale)
Call SetOEMDRO(61,ZScale)
Sleep(250)
Exit Sub ' Exit if probe is tripped
End If
Code "G90"
Sleep(125)
Message "Probing for Y Center....."
Sleep(1000) 'Pause 1 second
Code "F" & FRate1
Sleep(125)
Code "G31 Y" & ProbeLengthY
While IsMoving()
Wend
YHit1 = GetVar(2001)
Y1 = YHit1 + ProbeD/2 + YOffset 'Tool position at probe hit.
If FRate2=0 Then
Code "G0 Y" & YStart
While IsMoving()
Wend
Else
Code "G0 Y" & YHit1 - ProbeD/4
While IsMoving()
Wend
End If
If FRate2<>0 Then
Code "F" & Frate2
Sleep(150)
Code "G31 Y" & ProbeLengthY
While IsMoving()
Wend
YHit1 = GetVar(2001)
Y1 = YHit1 + ProbeD/2 + YOffset 'Tool position at probe hit.
Code "G0 Y" & YStart
While IsMoving()
Wend
End If
ProbeLengthY = YStart-DMax
Code "F" & FRate1
Sleep(125)
Code "G31 Y" & ProbeLengthY
While IsMoving()
Wend
YHit2 = GetVar(2001)
Y2 = YHit2 - ProbeD/2 - YOffset 'Tool position at probe hit.
If FRate2<>0 Then
Code "G0 Y" & YHit2 + ProbeD/4
While IsMoving()
Wend
Code "F" & Frate2
Sleep(150)
Code "G31 Y" & ProbeLengthY
While IsMoving()
Wend
YHit2 = GetVar(2001)
Y2 = YHit2 - ProbeD/2 - YOffset 'Tool position at probe hit.
End If
YPos = (Y1+Y2)/2
If ZeroYN = 1 then
Code "G0 Y" & YPos
While IsMoving()
Wend
SetOEMDRO(801,0)
Sleep(150)
Else
Code "G0 Y" & YStart
While IsMoving()
Wend
End If
YCenter = Cstr(YPos)
PathLength = Len(YCenter)
For X = 2 To PathLength Step 1
lstring=Mid(YCenter,X,PathLength-X+1)
If Left(lstring,1) = "." Then
LabelLength = X+5
Exit For
End If
Next X
YCenter=Left(YCenter, LabelLength)
Message "Y Center Found.........."
Sleep(150)
'X Probing
'//////////////////////////////
ProbeLengthX = XStart - DMax
Message "Probing for X Center....."
Sleep(250) 'Pause 1/4 second
Code "F" & FRate1
Sleep(125)
Code "G31 X" & ProbeLengthX
While IsMoving()
Wend
XHit1 = GetVar(2000)
X1 = XHit1 - ProbeD/2 - XOffset 'Tool position at probe hit.
If FRate2=0 Then
Code "G0 X" & XStart
While IsMoving()
Wend
Else
Code "G0 X" & XHit1 + ProbeD/4
While IsMoving()
Wend
End If
If FRate2<>0 Then
Message "Slow Probing for X position....."
Sleep(100) 'Pause 1/10 second
Code "F" & Frate2
Sleep(150)
Code "G31 X" & ProbeLengthX
While IsMoving()
Wend
XHit1 = GetVar(2000)
X1 = XHit1 - ProbeD/2 - XOffset 'Tool position at probe hit.
Code "G0 X" & XStart
While IsMoving()
Wend
End If
ProbeLengthX = XStart + DMax
Message "Probing for X Center....."
Sleep(250) 'Pause 1/4 second
Code "F" & FRate1
Sleep(125)
Code "G31 X" & ProbeLengthX
While IsMoving()
Wend
XHit2 = GetVar(2000)
X2 = XHit2 + ProbeD/2 + XOffset 'Tool position at probe hit.
If FRate2=0 Then
Code "G0 X" & XStart
While IsMoving()
Wend
Else
Code "G0 X" & XHit2 - ProbeD/4
While IsMoving()
Wend
End If
If FRate2<>0 Then
Message "Slow Probing for X position....."
Sleep(100) 'Pause 1/10 second
Code "F" & Frate2
Sleep(150)
Code "G31 X" & ProbeLengthX
While IsMoving()
Wend
XHit2 = GetVar(2000)
X2 = XHit2 + ProbeD/2 + XOffset 'Tool position at probe hit.
End If
XPos = (X1+X2)/2
If ZeroYN = 1 then
Code "G0 X" & XPos
While IsMoving()
Wend
SetOEMDRO(800,0)
Sleep(150)
Else
Code "G0 X" & XStart
While IsMoving()
Wend
End If
XCenter = Cstr(XPos)
PathLength = Len(XCenter)
For X = 2 To PathLength Step 1
lstring=Mid(XCenter,X,PathLength-X+1)
If Left(lstring,1) = "." Then
LabelLength = X+5
Exit For
End If
Next X
XCenter=Left(XCenter, LabelLength)
Message "X Center Found.........."
Sleep(150)
SetUserLabel (9,XCenter)
SetUserLabel (10,YCenter)
Code "F" & CurrentFeed ' Reset to original feed rate
If CurrentAbsInc = 0 Then 'if G91 was in effect before then return to it
Code "G91"
End If
Call SetOEMDRO(59,XScale)
Call SetOEMDRO(60,YScale)
Call SetOEMDRO(61,ZScale)
Sleep(250)
Message "Center Found"
If GetOemLED(1872) Then SetUserLED(1870,0)
End Sub
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 19:54
putman
konyshevk писал(а):Вот отсюда кое-что можно взять , это с оф. саита мача , Много примеров . есть с чем поэксперементировать . на английском
Спасибо, по Вашей ссылке вижу про sin, cos и т.п.
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 19:57
putman
Сергей Саныч писал(а):А просто Xnew = сos(0.31) не сработает?
Да, так должно.
Что же Вы сразу не написали если знали.
Любите помучать

Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 20:13
konyshevk
konyshevk писал(а):привязку по краю с поворотом сделал , могу скинуть , вожусь с центром
Вот примерно так на видео , специально биение щупа делал 1мм , разбег по привязки меньше сотки
https://www.youtube.com/watch?v=ojzfXr1ARI8
мучился два дня , мозг закипел, с в. бейсиком все ясно но вот из него в мачь и обратно это тяжело .
Code "G04 p0.2"
Code "G91"
Call SetDRO(0,0)
Code "G04 p0.2"
Code "G31 X1000 F500"
While IsMoving()
Wend
a = GetDRO(0)
Code "G1 X-1 F500"
Code "G04 p0.2"
Code "G1 c0.5 F100"
Code "G31 X1000 F500"
While IsMoving()
Wend
b = GetDRO(0)
Code "G1 X-1 F500"
Code "G1 c-0.5 F100"
d=((a+b)/2)
Code "G04 p0.2"
Call SetDRO(0,d)
Code "G04 p0.2"
Code "G90"
Code "G04 p0.2"
Code "G1 X0 f500"
Code "G04 p0.2"
Call SetDRO(0,-1.67)
У меня С - это шпиндель 1 = 1оборот
1.67 подбирал компенсация диаметра шарика (радиус примерно - мертвая зона до сработки датчика))
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 20:27
putman
konyshevk, с математическими функциями разобрался, спасибо !!!
И тоже мозг уже кипит, не могу победить G92.
Догадываюсь, что всё делается легко и просто, но никак.
Ассемблер блин в стопицот раз проще.
У меня Call SetDRO(0,0) и Call SetDRO(1,0) устанавливают в окошке мача нули, а в - "Сдвиг по G92" диаметр отверстия минус диаметр щупа всегда получается и когда в режим абсолютного позиционирования возвращаюсь для дальнейшей работы УП, эти сдвиги прибавляются к нулевым координатам и капец ((((((((((((((
Когда скрипт центроискателя под себя делал, 2 вечера не смог добиться обнуления G92 и форумчане ничего по этому поводу не знают ((((
Помучаюсь эти выходные и заброшу, придётся видимо выписывать значения, делить калькулятором.
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 20:34
konyshevk
Я сам наполовину (методом тыка) домучил , знал-бы помог

Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 20:46
putman
Не понимаю, зачем у Вас в скрипте используется G91 ? Немного проще и всё, а потом гемор с G92.
У меня оно тоже присутствует, из-за этого и в G92 всякая хрень вылезает.
Сейчас попробую переписать скрипт только в абсолютных координатах.
Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 21:00
konyshevk
G91 относительная система координат
я в нее перешел обнулил окно Х , замерил расстояние от текущего положения датчика до детали
двумя положениями шпинделя , высчитал среднее и эта точка стала нулем за минусом радиуса шарика
Call SetDRO(0,d)
Code "G04 p0.2"
Code "G90"
Code "G04 p0.2"
Code "G1 X0 f500"
Code "G04 p0.2"
Call SetDRO(0,-1.67)
А вот это место я толком не понял как работает

- но работает правильно (на десять раз проверил)

Re: Скрипты для MACH3.
Добавлено: 12 дек 2014, 21:15
putman
Сейчас лопнет голова.
Верно ли я понял, эта командо обнуляет значение в окошке оси Х ?
Вот выполняю этот скрипт:
Код: Выделить всё
Code "G04 p0.25" 'пауза 0.5 c
Code "G31 X-1000 F200" ' двигаться по +Х на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Call SetDRO(0,0) ' обнулить данные в окне X -=( 1 )=-
Code "G04 p0.25" ' пауза 0.5 с
Code "G01 x0.25" '
Code "G04 p0.25" ' пауза 0.5 с
Code "G31 X1000" ' двигаться по -X на 1м до касания щупом
While IsMoving()
Wend ' дождаться конца движения
Code "G04 p0.25" ' пауза 0.5 с
Xnew = GetDRO(0) - 0.25
Code "G01 x"&Xnew
Xnew = (Xnew+0.25)/2
Code "G01 x"&Xnew
Code "G04 p0.25" ' пауза 0.5 с
Call SetDRO(0,0) ' обнулить данные в окне X -=( 2 )=-
На вид строчки -=( 1 )=- и -=( 2 )=- одинаковые, но в MACH они творят чудеса.
Первая строчка обнуляет значение в окошке Х.
Вторая же, почему то вычитает из нуля, то что в данный момент находится в окне Х.
Т.е. после её выполнения там не нуль, а (-1.8), до выполнения было 1.8.
Такие вот чудеса.
Подскажите, КАК ???