Stronę tą wyświetlono już: 3337 razy
G-code umożliwia tworzenie podprogramów sub oraz ich wywoływanie za pomocą call. Oto przykład implementacji programu wykorzystującego podprogram wywoływany z parametrami sterującymi:
#<edge_width> = 10
#<number_of_edges> = 7
o002 sub
#<angle> = [360 / #2]
#<current_angle> = 0
G0 G90 Z#5
X#3 Y#4
G1 G91 F300
M3 S800
Z-1
o001 repeat [ #2 ]
X[#1 * sin [#<current_angle>]] Y[#1 * cos [#<current_angle>]]
#<current_angle> = [#<current_angle> + #<angle>]
o001 endrepeat
o002 endsub
o002 call [#<edge_width>] [#<number_of_edges>] [20] [20] [0]; wywołanie podprogramu sterującego z parametrami: długość boku wielokąta, liczba boków wielokąta, x, y, z
o002 call [#<edge_width>] [#<number_of_edges>] [120] [20] [0]; ponowne wywołanie programu sterującego z nowymi parametrami
G0 G90 Z0
X0 Y0
M30
Podprogramy nie muszą być wywoływane z argumentami, ale jeżeli takie argumenty powinny zostać przekazane to odwołanie się do nich odbywa się poprzez kolejne zmienne o numerach od 1 do 30. Możliwe jest również zwrócenie wartości przez podprogram np. tak:
#<edge_width> = 10
#<number_of_edges> = 7
o002 sub
o003 if [#2 le 3]
(msg, something wrong with argument); a to jest sposób na wyświetlenie messageboxa (w nowszych wersjach LinuxCNC)
o002 return; kończę program bo liczba boków jest mniejsza niż 3
o003 endif
#<angle> = [360 / #2]
#<current_angle> = 0
G0 G90 Z#5
X#3 Y#4
G1 G91 F300
M3 S800
Z-1
o001 repeat [ #2 ]
X[#1 * sin [#<current_angle>]] Y[#1 * cos [#<current_angle>]]
#<current_angle> = [#<current_angle> + #<angle>]
o001 endrepeat
o002 endsub
o002 call [#<edge_width>] [2] [20] [20] [0]
o002 call [#<edge_width>] [#<number_of_edges>] [120] [20] [0]
G0 G90 Z0
X0 Y0
M30