You could run normal g-code. It was a bunch of custom stuff. Some z lift logic (a crash avoidance algorithm that drove them crazy), multi torch processing with waterjet and mixed mode plasma, an etch algorithm, some speed pierce features like oscillating/circular pierce by material type, nozzle/orifice combo, and of course material thickness.
I couldnt really use the machine without the pierce enhancements - it takes pierce times from say 15 seconds with a stationary pierce to 0.8 seconds with a circular pierce, and when you have 1400 pierces on a plate its a big difference. We cut a lot of 2" material, and the 2" takes almost 10 minutes to pierce stationary. With circular, it's about a minute and a half.
I don't know enough about subroutines to answer why they dont use them, but each part is different due to optimized lead-in and lead-out locations for tip-up avoidance, which may make it difficult to do some of that. I know our code for the flow machines which is in .ord, their own optimized thing, a 20x40 sheet were 125-150k as well.
I think they just thought I was being crazy, but all these things make the machine much more useful and far more profitable.
You can't use a Macro (does this control support macro B?) or a custom G code and create a canned cycle for the lift logic? What is the code for the oscillating/circular pierce? Can you not use g2/G3 Helical interpolation?
I understand the needs for the enhancements but I am having a hard time wrapping my mind around what the problem is on implementing them into the post, of course if you can't run type A, B or C type G code that would maybe explain it...
Sub routines are awesome, depending on controller type ( A, B, C and age) you can use local or extended sub routines. Some controllers also support program copy, which will allow you to do the same basic thing as local subroutines.
So for example. I see you have a whole bunch of rectangle parts there, using extended subs, which is most common you can program them like this.
O1234 (Main program)
G00 G90 G54 (calls rapid positioning, absolute coordinate programming, and the G54 coordinate system)
X Y Z (call out your start position)
G1 Z (Feed movement, and move to your Z plane) Not sure if you need to call a torch offset? G43 H...
M98 P1235 L32 (sub routine call, sub program number, repeat 32 times)
xyz (now these are all the start positions for the sub routine for each part)
xyz
xyz
etc.
O1235 (sub routine)
G1 x-4.
y-5.5
x0.
y0.
etc etc
M99 (return to main program)