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

Скрипт для проточки внутренних отверстий

Добавлено: 17 окт 2024, 19:45
AlanDerby
Коллеги, как известно, лень - двигатель прогресса! Запарило меня писать g-коды для проточки внутренних отверстий на токарном станке. Больно уж много строчек получается. Написал небольшой скриптец, который теперь растачивает отверстия по М-команде.

Знаю, что тут наверняка много таких же лентяев, как я, так что делюсь. ;)
Работает так - сохраняете его в виде М-команды в папку macros, у меня, например, это M99984
Чтобы запустить проточку подводите расточной резец к отверстию, набираете M99984 P20 Q12 R0.3, где P-диаметр, Q-глубина, R-шаг прохода резца.
Сразу предупрежу, что у меня токарный работает под фрезерной оболочкой, по этому у меня ось шпинделя это Х, а поперечная подача это Y. Мой станок - мои правила! :geek:
У кого координаты по феншую, следует заменить буквы в скрипте соответственно на Z и Х. Еще, у меня работа идет от радиуса, а не диаметра, так что этот момент тоже придется поправить. Видимо нужно будет убрать деление на 2, но может еще что-то.

Сам скрипт с комментариями:

' Тут принимаем параметры
P=param1 'Диметр
Q=param2 'Длина
R=param3 'Шаг

' Считываем текущие координаты от которых будем плясать
XNow=GetDRO (0) '
YNow=GetDRO (1) '

XN=XNow-Q 'целевая координата по Х

If YNow >= P/2 Then 'Проверяем положение резца. Если его положение больше или равно, половине диаметра, выходим из скрипта
Exit Sub
End If

YOffset=GetDRO (1)
code "M3"

'Этот цикл для проточки целого количества шагов. Логика такая. Пока положение резца+шаг меньше чем желаемое отверстие, выполняем точение.
1
YOffset=YOffset+R
If YOffset+R<P/2 Then
Code "G1 x"&XN
While IsMoving()
Wend
YOffset=GetDRO (1)
Code "G0 y"&YOffset-1
While IsMoving()
Wend
Code "G0x"&XNow
While IsMoving()
Wend
Code "G0 y"&YOffset+R
While IsMoving()
Wend
YOffset=GetDRO (1)
GoTo 1
End If

'Этот кусок кода для проточки остатка от нецелого шага. Если положение резца + шаг больше чем отверстие, то смещаемся на чистовую координату и выполняем цикл чистовой проточки.

Code "G0 y"&P/2
While IsMoving()
Wend
Code "G1 x"&XN
While IsMoving()
Wend
YOffset=GetDRO (1)
Code "G0 y"&YOffset-1
While IsMoving()
Wend
Code "G0x"&XNow
While IsMoving()
Wend
Code "G0 y"&YOffset
While IsMoving()
Wend

Exit Sub


Надеюсь, кому-то будет полезно. Лично мне гораздо проще стало работать. Вместо написания G-кода достаточно вести одну строчку в MDI ;)