Облегчаем себе жизнь скриптами и М-командами
Добавлено: 28 окт 2024, 17:54
Коллеги, думаю ни для кого не секрет, что скрипты - отличный способ автоматизировать однообразные операции. Лично я руководствуюсь принципом: "Если какую-то операцию нужно выполнять более 2-3 раз, то надо ее автоматизировать".
Недавно возникла задача фрезеровать отверстия. Причем диаметр и глубина отверстий - разные. Можно конечно под разные отверстия писать разные G-коды, но это долго. Можно использовать Wizard, но с ним нужно еще разобраться, да и параметров там приходится много указывать. Написал скрипт, который делает эту скучную работу за нас.
Как работает? Подводим фрезу в центр будущего отверстия на высоту, от которой отверстие будет начинаться. Например в точку x=10; y=15; z=3 и вводим М-команду, под которой сохранен скрипт. В данном случае это М99986 P20 Q30 R1 F400, где P - диаметр отверстия, Q - глубина отверстия, R - шаг заглубления, F - скорость фрезерования. Диаметр фрезы не учитывается, так что вы должны подумать об этом сами. Т.е. если фреза диаметром 10 мм и нужно отверстие диаметром 30, то соответственно вводите диаметр 20. Заглубление производится по сирали. При достижении нижней точки выполнится один проход, чтобы выровнять дно. После фреза будет выведена на начальные координаты X, Y, Z+10. Скрит не использует G91, работает в абсолютных координатах, так что не нужно беспокоиться, о том, что при прерывании выполнения скрипта станок останется в относительных координатах.
Собственно сам скрипт. Все пояснения делал на английском, т.к. кириллицу VB Script Editor не поддерживает.
' Script for milling a round hole centered in the current coordinates, P-diameter, Q-depth and in R step
PDaim= param1 'get aim diametr
Rad=PDaim/2 'get aim radius
QDeph= param2 'get aim deph
RStep= param3 'get aim step
'-------Check whether the depth is divided by a step without remainder. If yes, then set the flag=0, if not, then the flag=1------------
Div=QDeph/RStep
Ost=Fix (Div)
If Div-Ost=0 Then
Flag=0
Else
Flag=1
End If
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------
XStart = getDRO (0) 'Remember the starting position of the cutter according to X
YStart = getDRO (1) 'Remember the starting position of the cutter according to Y
ZStart = getDRO (2) 'Remember the starting position of the cutter according to Z
'--------------Moving to the starting position-----------------------
Code "G0 z"&ZStart+1
Code "G0 x"&XStart+Rad
Code "G0 z"&ZStart
'--------------------------------------------------------------------
1
ZCurren = getDRO (2)
If ZCurren-RStep >= ZStart-QDeph Then
'message "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZCurren-RStep &" I"&XRad*-1 &" J0"
Code "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZCurren-RStep &" I"&Rad*-1 &" J0"
While IsMoving ()
Wend
GoTo 1
End If
'----------------------- If the flag is =1, then you need to perform milling to a depth of an incomplete step ---------------
If Flag=1 Then
'message "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZStart-QDeph &" I"&Rad*-1 &" J0"
Code "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZStart-QDeph &" I"&Rad*-1 &" J0"
While IsMoving ()
Wend
End If
'------------------------------------------------------------------------------------------------------------------------------------------------
'----------------------- Cleaning the bottom ------------------------------------------------------------------------------------------
Code "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZStart-QDeph &" I"&Rad*-1 &" J0" 'finish cut
While IsMoving ()
Wend
'-----------------------------------------------------------------------------------------
Code "G0 z"&ZStart+10
While IsMoving ()
Wend
Code "G0 x"&XStart &"y"&YStart
While IsMoving ()
Wend
Exit Sub
Недавно возникла задача фрезеровать отверстия. Причем диаметр и глубина отверстий - разные. Можно конечно под разные отверстия писать разные G-коды, но это долго. Можно использовать Wizard, но с ним нужно еще разобраться, да и параметров там приходится много указывать. Написал скрипт, который делает эту скучную работу за нас.
Как работает? Подводим фрезу в центр будущего отверстия на высоту, от которой отверстие будет начинаться. Например в точку x=10; y=15; z=3 и вводим М-команду, под которой сохранен скрипт. В данном случае это М99986 P20 Q30 R1 F400, где P - диаметр отверстия, Q - глубина отверстия, R - шаг заглубления, F - скорость фрезерования. Диаметр фрезы не учитывается, так что вы должны подумать об этом сами. Т.е. если фреза диаметром 10 мм и нужно отверстие диаметром 30, то соответственно вводите диаметр 20. Заглубление производится по сирали. При достижении нижней точки выполнится один проход, чтобы выровнять дно. После фреза будет выведена на начальные координаты X, Y, Z+10. Скрит не использует G91, работает в абсолютных координатах, так что не нужно беспокоиться, о том, что при прерывании выполнения скрипта станок останется в относительных координатах.
Собственно сам скрипт. Все пояснения делал на английском, т.к. кириллицу VB Script Editor не поддерживает.
' Script for milling a round hole centered in the current coordinates, P-diameter, Q-depth and in R step
PDaim= param1 'get aim diametr
Rad=PDaim/2 'get aim radius
QDeph= param2 'get aim deph
RStep= param3 'get aim step
'-------Check whether the depth is divided by a step without remainder. If yes, then set the flag=0, if not, then the flag=1------------
Div=QDeph/RStep
Ost=Fix (Div)
If Div-Ost=0 Then
Flag=0
Else
Flag=1
End If
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------
XStart = getDRO (0) 'Remember the starting position of the cutter according to X
YStart = getDRO (1) 'Remember the starting position of the cutter according to Y
ZStart = getDRO (2) 'Remember the starting position of the cutter according to Z
'--------------Moving to the starting position-----------------------
Code "G0 z"&ZStart+1
Code "G0 x"&XStart+Rad
Code "G0 z"&ZStart
'--------------------------------------------------------------------
1
ZCurren = getDRO (2)
If ZCurren-RStep >= ZStart-QDeph Then
'message "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZCurren-RStep &" I"&XRad*-1 &" J0"
Code "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZCurren-RStep &" I"&Rad*-1 &" J0"
While IsMoving ()
Wend
GoTo 1
End If
'----------------------- If the flag is =1, then you need to perform milling to a depth of an incomplete step ---------------
If Flag=1 Then
'message "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZStart-QDeph &" I"&Rad*-1 &" J0"
Code "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZStart-QDeph &" I"&Rad*-1 &" J0"
While IsMoving ()
Wend
End If
'------------------------------------------------------------------------------------------------------------------------------------------------
'----------------------- Cleaning the bottom ------------------------------------------------------------------------------------------
Code "G02 X"&XStart+Rad & " y"&YStart &" Z"&ZStart-QDeph &" I"&Rad*-1 &" J0" 'finish cut
While IsMoving ()
Wend
'-----------------------------------------------------------------------------------------
Code "G0 z"&ZStart+10
While IsMoving ()
Wend
Code "G0 x"&XStart &"y"&YStart
While IsMoving ()
Wend
Exit Sub