Страница 1 из 2

Скрипты для MACH3.

Добавлено: 12 дек 2014, 07:38
putman
Здравствуйте ! :good:
Был на форуме скрипт центроискателя, у меня он не работал, кое как адаптировал.
Т.к. для финишной обработки я снимаю деталь, и снова ставлю другой стороной, она всегда сдвинута на небольшой угол (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) не сработает?
Да, так должно.
Что же Вы сразу не написали если знали.
Любите помучать :hehehe:

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
Я сам наполовину (методом тыка) домучил , знал-бы помог :wik:

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)
А вот это место я толком не понял как работает :thinking: - но работает правильно (на десять раз проверил) :hehehe:

Re: Скрипты для MACH3.

Добавлено: 12 дек 2014, 21:15
putman
Сейчас лопнет голова.

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

Call SetDRO(0,0) 'Обнуление оси X
Верно ли я понял, эта командо обнуляет значение в окошке оси Х ?
Вот выполняю этот скрипт:

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

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.
Такие вот чудеса.
Подскажите, КАК ???