Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
aftaev
Зачётный участник
Сообщения: 34042 Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:
Сообщение
aftaev » 03 мар 2017, 18:03
Темка про интересные 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
Откуда: Казахстан.
Контактная информация:
Сообщение
aftaev » 03 мар 2017, 18:06
Нарезание конусной резьбы:
Взято от сюды
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
Откуда: Казахстан.
Контактная информация:
Сообщение
aftaev » 03 мар 2017, 18:09
Нарезание 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
Где то скачал с инета архивчик под разные резьбы наруж/внутр.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Сообщения: 34042 Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:
Сообщение
aftaev » 06 мар 2020, 18:15
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Сообщения: 34042 Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:
Сообщение
aftaev » 06 ноя 2021, 18:28
Написал программку для точения 3х зонного шнека. Зона 1 - цилиндрическая, зона 2 - конус, зона 3 - цилиндрическая.
На чертеже красным показан профиль шнека. Чертеж взял с Алиэкспресса.
На фото средний шнек выточен с переменным шагом.
Программка
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.