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

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

Интересные примеры 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
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

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
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

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 КБ) 551 скачивание
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

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

Сообщение aftaev »

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

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

Сообщение aftaev »

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

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