Интересные примеры Gcode и OCode

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Интересные примеры Gcode и OCode

Сообщение aftaev »

Темка про интересные GCode / OCode.

Нарезание на токарном накатки через G33.
Код взят здесь: http://forum.linuxcnc.org/forum/show-yo ... -emco-120p

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

[spoiler=]G8
G53 G0 X0
G53 G0 Z0
M6 T3 G43

#<workpieceDia> = 0.700
#<workpieceRad> = [#<workpieceDia>/2]
#<safeXOffset> = 0.025
#<safeX> = [#<workpieceRad> + #<safeXOffset>]

#<knurlStartZ> = 0.000
#<knurlLen> = 0.25
#<knurlLeadIn> = 0.010
#<knurlDepth> = 0.002
#<knurlPerDia> = 28
#<knurlAngle> = 30
#<knurlEndZ> = [#<knurlStartZ> - #<knurlLen>]

#<rpm> = 100

#<pi> = 3.142

; The surface is the circumference of the workpiece
#<workSurface> = [#<pi> * #<workpieceDia>]

; Given a knurl angle, calculate Z feed given <workSurface>
#<feedPerRev> = [TAN[#<knurlAngle>] * #<workSurface>]
#<feedPerMin> = [#<feedPerRev> * #<rpm>]
(debug, feed per revolution: #<feedPerRev>; per min: #<feedPerMin>)

; thread _width_ is equal to distance traveled in one rev, i.e. <feedPerRev>
#<threadWidth> = #<feedPerRev>
; Thus, TPI will be 1/<threadWidth>
#<tpi> = [1/#<threadWidth>]

; To do a n-start thread, we need to start each thread
; <threadWidth>/n further back (Z+) than the prior thread
#<nStartZOffset> = [#<threadWidth>/#<knurlPerDia>]


M3 S#<rpm>

#100 = #<knurlPerDia>
#110 = [[#<knurlPerDia> * #<nStartZOffset>] + #<knurlStartZ> + #<knurlLeadIn>]
(debug, knurl lead in: #110)

G0 Z#110
G0 X[#<workpieceRad> - #<knurlDepth>]

O100 WHILE [#100 GT 0]
(debug, start Z: #110; feed: #<feedPerRev>)
(calculate the lead in for the knurl AFTER this one)
#105 = #110
#110 = [#110 - #<nStartZOffset>]

;G33 Z#110 K#<feedPerRev>
;G1 Z#<knurlEndZ> F#<feedPerMin>
;G1 Z#105 F#<feedPerMin>
G33 Z#<knurlEndZ> K#<feedPerRev>
G33 Z#105 K#<feedPerRev>
;G0 X#<safeX>
G0 Z#110
;G0 X[#<workpieceRad> - #<knurlDepth>]

#100 = [#100 - 1]
O100 ENDWHILE[/spoiler]
https://www.youtube.com/watch?v=zdCQ0X7b2uo
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Интересные примеры Gcode и OCode

Сообщение aftaev »

Нарезание конусной резьбы:
Взято от сюды http://www.cnc-club.ru/wiki/index.php/% ... 0%BE%D0%B4.

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

[spoiler=]Taper Thread Subroutine for LinuxCNC)
(Latest source can be found at:)
(http://www.cnc-club.ru/wiki/index.php/Taper_thread_Gcode)

O<taper-thread> SUB
	#<Dst>	= #1
	#<Dend>	= #2
	#<l>	= #3
	#<dx> = [#<Dst>-#<Dend>]
	#<p> 	= SQRT[#4*#4 + #<dx>*#<dx>/4]
	#<step> = [#5/#6]
	#<steps> = #6

	(penetrate agle)
	#<pa> = 30
	#<px> = [#<step>*2]
	#<pz> = [ TAN[#<pa>] * #<px> ]
	#<x> = #<_x>
	#<z> = #<_z>
	#<safe_dist> = 10

	#<i> = #<steps> 
	O<taper-thread0> REPEAT [#<steps>]
		G0 X[#<x>+#<safe_dist>]
		G0 Z[#<z> + #<pz>]
		G0 X[#<x>]
		
		#<i> = [#<i>-1]
		G1 X[#<Dst> + #<i>*#<step> + #<px>] 
		G1 X[#<Dst> + #<i>*#<step>] Z[#<z>]
		G33 X[#<Dend> + #<i>*#<step>] Z[#<z>-#<l>] K[#<p>]
		G0 X[#<x>+#<safe_dist>]
	O<taper-thread0> ENDREPEAT
O<taper-thread> ENDSUB

(Параметры)
(1 - начальный диаметр)
(2 - конечный диаметр)
(3 - длинна резьбы)
(4 - шаг резьбы)
(5 - глубина резьбы)
(6 - количество проходов) 

(Parameters)
(1 - start dia)
(2 - end dia)
(3 - thread length)
(4 - pitch)
(5 - depth of thread)
(6 - number of passes)

G0 X80
G0 Z50
M3 S150
F100
O<taper-thread> CALL [46] [58] [100] [5] [2.5] [5]

M2[/spoiler]
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Интересные примеры Gcode и OCode

Сообщение aftaev »

Нарезание NTP резьбы
(для просмотра содержимого нажмите на ссылку)

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

(info: NTP Male Threads)
; Assumptions
; Z0 is the end of the pipe

o<ntp>sub
#<tool-taper>      =  #1 (=1 Tool, Taper Cut)
#<max-rpm-taper>   =  #2 (Max RPM, Taper Cut)
#<sfm-taper>       =  #3 (SFM, Taper Cut)
#<ipm-taper>       =  #4 (IPM, Taper Cut)
#<coolant>         =  #5 (=8 Coolant)
#<small-diameter>  =  #6 (Small End Diameter)
#<pipe-OD>         =  #7 (Pipe OD)
#<tool-thread>     =  #8 (=7 Tool, Threading)
#<rpm-threading>   =  #9 (RPM Threading)
#<pitch>           = #10 (Thread Pitch)
#<minor-dia>       = #11 (Z0 Minor Diameter)
#<cut-lenght>      = #12 (Thread Length)
#<cut-depth>       = #13 (Depth of Cut)

G7 G18 G40 G54 (Dia, XZ, Comp Off, CS1)

; Calculate start and end X positions for taper cut
; for 0.1 before and after overlap
#<start-X-taper> = [#<small-diameter> - 0.00625]
#<end-X-taper> = [#<pipe-OD> + 0.00625]

; Calculate end Z position
#<end-Z-taper> = -[[[[#<end-X-taper>-#<small-diameter>]/2] * TAN[88.2101]]+0.1]

; Cut Taper
G96 D#<max-rpm-taper> S#<sfm-taper> (Constance Surface Speed)
T#<tool-taper> M6 G43
G42 (start cutter comp)
M3 M#<coolant>
G0 X#<start-X-taper> Z0.100
F#<ipm-taper> 
G1 X#<end-X-taper> Z#<end-Z-taper>
M5 M9
G40 G97
G53 G0 X0 Z0

;Threading
#<X-start-thread> = #<start-X-taper>
#<X-end-thread> = [#<pipe-OD> + 0.00625]
#<Z-end-thread> = -#<cut-lenght>
T#<tool-thread> M6 G43
M3 S#<rpm-threading> M#<coolant>

o100 do 
  G0 X#<X-start-thread> Z0.100
  ;#<Z-end-thread> = -[[[[#<X-end-thread>-#<X-start-thread>]/2] * TAN[88.2101]]+0.1]
  G33 X#<X-end-thread> Z#<Z-end-thread> K#<pitch>
  G0 X[#<X-end-thread>+.05]
  Z0.100

  o110 if [[#<X-start-thread> - #<cut-depth>] GT #<minor-dia>]
    ; make sure start value minus decrement will not go beyond end value
    #<X-start-thread> = [#<X-start-thread> - #<cut-depth>]
    #<X-end-thread>   = [#<X-end-thread> - #<cut-depth>]
  o110 else
    ; last pass for odd number of divisions
    #<last-cut> = [#<X-start-thread> - #<minor-dia>]
    #<X-start-thread> = [#<X-start-thread> - #<minor-dia>]
    #<X-end-thread>   = [#<X-end-thread> - #<minor-dia>]
  o110 endif

o100 while [#<X-start-thread> ge #<minor-dia>]


G0 X[#<X-end-thread>+.05]
M5 M9
Z0.100

G53 X0 Z0

o<ntp>endsub
Вариант 2
(для просмотра содержимого нажмите на ссылку)

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

(Pipe 3-4 male.ngc 12/13/2012 Joe Kline)
(TOOL: 7  60 DEG THREAD)

G0 G20 G90
G8 (rad)
G28 (Set tool chg pos with G28.1)
T7 M6 G43

F.006
S300         ( SPINDLE SPEED)
M3 M8        ( SPINDLE FWD Cool on)
G4P1         (PAUSE)
F5
#<X_Start>=.507     ( X START POINT )
#<Z_Start>=.2       ( Z Start Point )
#<Pitch>1=.07143   ( PITCH)
#<X_Depth>=-.057    ( X DEPTH, INCR)
#<Z_Depth>=-.0357   ( Z DEPTH, INCR  FOR COMPOUND, 0 PLUNGE)
#<X_End>=.535     ( X END OF THREAD)
#<Z_End>=-.646    ( Z END OF THREAD)
#<X_Pullout>=.05      ( X PULL OUT, +/- INCR)
#<Z_Pullout>=-.1357   ( Z PULL OUT, +/- INCR)
#<First_Cut>=.015     ( 1st CUT SIZE)
#<Remaining_Cuts>=.005     ( CUT SIZE)
#<Spring_Cuts>8=1        ( SPRING CUTS )

/g0 x[#<X_Start>+#<X_Depth>] z.25
/g1z.075 (temp mark OD)
/x#<X_Start>
/z.25   (temp mark minor)

G0 X#<X_Start> Z#<Z_Start>     (Start point)
#<Compound_Dist>=SQRT[[#<X_Depth>*#<X_Depth>]+[#<Z_Depth>*#<Z_Depth>]]  (calc compound dist)
#<kx>=[#<X_Depth>/#<Compound_Dist>] (kx)
#<kz>=[#<Z_Depth>/#<Compound_Dist>] (kz)
#<Spring_Cuts>9=[[#<First_Cut>-#<Remaining_Cuts>] * #<kx>] (1st cut size X)
#<First_Z_Cut>=[[#<First_Cut>-#<Remaining_Cuts>] * #<kz>] (1st cut size Z)
o100 do
  #<Spring_Cuts>9=[#<Spring_Cuts>9+[#<Remaining_Cuts> * #<kx>]] (X)
  #<First_Z_Cut>=[#<First_Z_Cut>+[#<Remaining_Cuts> * #<kz>]] (Z)
  o110 if [#<Spring_Cuts>9 GT ABS[#<X_Depth>]] (don't go too far)
    #<Spring_Cuts>9 = #<X_Depth>  
    #<First_Z_Cut> = #<Z_Depth>
  o110 endif
  G1X[#<X_Start>+#<Spring_Cuts>9] Z[#<Z_Start>+#<First_Z_Cut>]            (start point - cut size)
  G33 X[#<X_End>+#<Spring_Cuts>9] Z[#<Z_End>+#<First_Z_Cut>] K#<Pitch>1     (cut thread)
  G33 X#<X_End> Z[#<Z_End>+#<First_Z_Cut>+#<Z_Pullout>] K#<Pitch>1 (pull out)
  G0 X[#<X_End>+#<X_Pullout>]
  G0 Z#<Z_Start>
  G0 X#<X_Start>
  o120 if [ABS[[#<Spring_Cuts>9] +.0001] GT ABS[#<X_Depth>]]
    o121 if [#<Spring_Cuts>8 GT 0] 
      #<Spring_Cuts>9=[#<Spring_Cuts>9-[#<Remaining_Cuts> * #<kx>]] (back off X)
      #<First_Z_Cut>=[#<First_Z_Cut>-[#<Remaining_Cuts> * #<kz>]] (Z)
    o121 endif  
    #<Spring_Cuts>8=[[#<Spring_Cuts>8]-1.] (decr spring passes) 
  o120 endif
o100 while [[#<Spring_Cuts>8] GT -1.0]

M5M9
G28
M30
Где то скачал с инета архивчик под разные резьбы наруж/внутр.
PipeThreads.zip
(9.54 КБ) 601 скачивание
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Интересные примеры Gcode и OCode

Сообщение aftaev »

Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Интересные примеры Gcode и OCode

Сообщение aftaev »

Написал программку для точения 3х зонного шнека. Зона 1 - цилиндрическая, зона 2 - конус, зона 3 - цилиндрическая.
На чертеже красным показан профиль шнека. Чертеж взял с Алиэкспресса.
Шнек.png (2830 просмотров) <a class='original' href='./download/file.php?id=199454&sid=b5139806e14f8f8be2833efaf4778c09&mode=view' target=_blank>Загрузить оригинал (347.79 КБ)</a>
На фото средний шнек выточен с переменным шагом.
IMG_1471 (Копировать).JPG (2830 просмотров) <a class='original' href='./download/file.php?id=199452&sid=b5139806e14f8f8be2833efaf4778c09&mode=view' target=_blank>Загрузить оригинал (250.04 КБ)</a>
Программка
SHNEK Ver4 .rar
(674 байт) 179 скачиваний
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Y13Lab
Новичок
Сообщения: 1
Зарегистрирован: 30 янв 2025, 16:30
Репутация: 0
Настоящее имя: Андрей
Контактная информация:

Re: Интересные примеры Gcode и OCode

Сообщение Y13Lab »

Немного подредактировали программу для проточки шнека.
Shnek Lathe.zip
(824 байт) 4 скачивания
Траектории строились не совсем правильно.
Снимок.PNG
Снимок.PNG (5.45 КБ) 283 просмотра
Добавили расчёт оборотов шпинделя
исходя из заданной подачи.
Добавили одну зону для плавного выхода резца.
Снимок2.PNG
Снимок2.PNG (5.42 КБ) 283 просмотра
Полученый результат, фрезеровка в токарном.
IMG_20250130_170416~5.jpg (283 просмотра) <a class='original' href='./download/file.php?id=213328&sid=b5139806e14f8f8be2833efaf4778c09&mode=view' target=_blank>Загрузить оригинал (347.51 КБ)</a>
Автору программы Огромная благодарность!
Ответить

Вернуться в «LinuxCNC»