G7x and profile in subroutine with parameters

More
1 year 7 months ago #323043 by MalteS
Hi,

I'm trying to write a macro for touchy that provides the option to specify the x/z coordinates of the G7x profile on the touchy user interface. 

My initial thought was subroutine nesting but I just found out that I cannot nest subroutines. So this does not work:


Code:
O<g7x_macro> sub O100 SUB ... O100 ENDSUB G71.1 Q100 .... O<g7x_macro> endsub


What works (a bit) is to put the profile subroutine after the main macro (before does not work).

Code:
O<g7x_macro> sub G71.1 Q100 .... O<g7x_macro> endsub O100 SUB ... O100 ENDSUB

But now I struggle with getting parameters to the subroutine. Does anybody have an idea here?

Please Log in to join the conversation.

More
1 year 7 months ago #323045 by MalteS
If there is interest. The full code is shown below (bear with me - comments are a mixture of German and English :-):

Code:
O<g7x_macro> sub ; #1 b_Modus                            (todo)  ; #2 ae - Arbeitseingriff (Zustellung)  (0.5mm) ; #3 Feed per revolution                (0.1mm/u) ; #4 Surface speed (vc)                 (50m/min) ; #5 Max RPM                            (1400) ; Set default values O100 IF  [#2 EQ 0]     #2 = 0.5 O100 ENDIF O101 IF  [#3 EQ 0]     #3 = 0.1 O101 ENDIF O102 IF  [#4 EQ 0]     #4 = 50 O102 ENDIF O103 IF  [#5 EQ 0]     #5 = 1400 O103 ENDIF (Allgemeiner Header) G8 ; Lathe Diameter Mode G18 ; XZ Plane G21 ; Metric Units G90 ; Absolute Distance (Spindle Steuerung) G96 D#5 S#4 ; Constant Surface Speed Mode M3 G95 F#3 ; Feed-Per-Rev Mode G4 P.2        ; Wait to reach speed (Anfangspositionen merken) #<x_start> = #<_x> #<z_start> = #<_z> G71.1 Q100 D[#2 / 2] I#2 G70   Q100 D[#2 / 2] M5 M2 O<g7x_macro> endsub O100 SUB   G0 X5 Z0   G0 x5 z-11.5   G0 x10 Z-14 O100 ENDSUB %

Please Log in to join the conversation.

More
1 year 7 months ago #323053 by MaHa
M2 should always be outside a subroutine, so place M2 after each endsub, and your construct should work.
As you can only use 2 variables, and there is no option to enter a global variable in MDI, it will be difficult to bring the values to your code.
The contur o100sub is in the macro file. If you keep it like that, you need to modify in the macrofile anyway. how about use the default values #3 #4 #5 as this might not change often, only submit #1 and #2 as variable.

 

Please Log in to join the conversation.

More
1 year 7 months ago #323111 by MalteS
Thanks. I'm calling this subroutine as a macro from Touchy . M2 must be inside the subroutine. There is no other GCode executed in Touchy.

I solved the variable problem in the meantime by copying the subroutine arguments to global variables. I consider this ugly as s**t but it gets the job done.
I then ran into the issue that Touchy has limited space for Macro arguments on the UI and no option to scroll through the argument list. This effectively limits the UI to enter 4 (maybe 5) points. This significantly limits the usefulness. Probably not an issue on a bigger screen but is a problem on the 1024x600 pixels display that I use.

Full program is copied below should this be of use to anybody.

Code:
#;g7x_macro O<g7x_macro> sub ; #1 Punkte                             (TODO) ; #2 X1                                (Erster Punkt) ; #3 Z1                                (Erster Punkt) ; #4 X2                               (Zweiter Punkt) ; #5 Z2                               (Zweiter Punkt) ; #6 X3                               (Dritter Punkt) ; #7 Z3                               (Dritter Punkt) ; #8 X4                               (Vierter Punkt) ; #9 Z4                               (Vierter Punkt) (Use global variables to store the points for the Subroutine below) #<_g7x_points>=#1 #<_g7x_x1>=#2 #<_g7x_z1>=#3 #<_g7x_x2>=#4 #<_g7x_z2>=#5 #<_g7x_x3>=#6 #<_g7x_z3>=#7 #<_g7x_x4>=#8 #<_g7x_z4>=#9 (Allgemeiner Header) G8 ; Lathe Diameter Mode G18 ; XZ Plane G21 ; Metric Units G90 ; Absolute Distance (Spindle Steuerung) G96 D1400 S50 ; Constant Surface Speed Mode M3 G95 F0.1 ; Feed-Per-Rev Mode G4 P.2        ; Wait to reach speed (Anfangspositionen merken) #<x_start> = #<_x> #<z_start> = #<_z> (G71, G72 -> Lang-, Plandrehen) (mit .1,.2 für Taschen ) (Q -> Subroutine Nr) (x,z -> Startposition) (D ->   Distanz zum Profil zwischen roughing und finish cut)  (E ->   G70 distanz zum profil am ende) (P ->   G70 anzahl der durchläufe) (I ->   Zustellung) (R ->   Rückzug, default ist 0.5) G71.1 Q100 D0.25 I0.5 G70   Q100 D0.25 G0 X#<x_start> Z#<z_start> M5 M2 O<g7x_macro> endsub O100 SUB     O200 IF  [#<_g7x_points> GT 0]     G0 X#<_g7x_x1> Z#<_g7x_z1>     O200 ENDIF     O201 IF  [#<_g7x_points> GT 1]     G0 X#<_g7x_x2> Z#<_g7x_z2>     O201 ENDIF     O202 IF  [#<_g7x_points> GT 2]     G0 X#<_g7x_x3> Z#<_g7x_z3>     O202 ENDIF     O203 IF  [#<_g7x_points> GT 3]     G0 X#<_g7x_x4> Z#<_g7x_z4>     O203 ENDIF O100 ENDSUB %
 

Please Log in to join the conversation.

Time to create page: 0.076 seconds
Powered by Kunena Forum