Macro For Over 18 (Using Alias In a Macro)

Macro For Over 18 (Using Alias In a Macro)

Category : Macro New Stuff



Macro programming can use a G code to access a 9000 series program.

Read this article if you don’t know about this.


In this example macro we are going to set G181 to access program 9010.



We will create a new drilling cycle that can take into account the point of the drill in the drill depth.

The line below would call program 9010 from the G181

G181 A120. D16. R1. Z-20. F200.

It works the same as a G81 but with a drill point angle (A) and a drill diameter (D). It then goes on to use some simple trigonometry to calculate the drill point.

Believe me it has to be simple for me because as my mate used to say, “if brains were made of dynamite I would struggle to blow my your fuckin head off”

It feeds down to the Z depth then incrementally drills the extra bit for the drill point. Then it rapids back out.

G181 A120. D16. R1. Z-20. F200.

A (#1) = 120.
D (#7) = 16.
R (#18) = 1.
Z (#26) = -20.
F (#9) =200.

Remember the table below from the last article.

O09010 (Drill Point Macro)

G103 P1           (No Look Ahead)

(Letter A #1 = Drill Point Angle)
(Letter D #7 = Drill Diameter)
(Letter R #18 = Rapid Point)
(Letter Z #26 = Depth)
(Letter F #9 = Feedrate)

G00 Z#18           (Rapid To R Point)

G01 Z#26 F#9       (Feed to Z depth)

#100= #1 / 2                  (1/2 Drill Angle)
#100= TAN[ #100 ]     (Tan Of Half Drill Angle)

#101= #7 / 2                   (1/2 Drill Diameter)
#102= #101 / #100      (Calculate Extra Depth)

G91 Z – #102            (Extra Bit)
G00 Z#18          (Rapid Back To R Point)

G103 P0           (Look Ahead On)

Let me explain this macro line by line

O09010 (Drill Point Macro)

G103 P1 (No Look Ahead)

The G103 is so that the macro does not read in front and get confused, it will now only read block by block. A bit like knowing the end of a book, you wouldn’t be arsed to read the rest of it.

The control normally reads in front so it has some idea what is going to happen next.

Always include an explanation with your macro in case you forget how it works. You wrote this thing so you can’t blame the bloke on nights.

(A #1 = Drill Point Angle)
(D #7 = Drill Diameter)
(R #18 = Rapid Point)
(Z #26 = Depth)
(F #9 = Feedrate)

G00 Z#18 (Rapid To R Point)

G01 Z#26 F#9 (Feed to depth at 200mm per minute)

The calculation below halves the drill angle. You will note that the drill angle is letter A which corresponds to #1

#100= #1 / 2     (1/2 Drill Angle)

Below will get  the tangent of the angle and this ends up back in #100 
#100= TAN[ #100 ]       (Tan Of Half Drill Angle)

Calculation below halves the drill diameter and puts it in #101

#101= #7 / 2       (1/2 Drill Diameter)

Macro, The Trigonometry

This is simple trigonometry and the answer is the depth of the drill point (Y).

In the diagram above
X is #101    (Radius of drill)
A is #100    (1/2 drill point angle)
Y is #102    (the bit we need to know)

#102= #101 / #100        (Calculate Extra Depth)

G91 Z – #102        (Feed down the extra amount calculated above incrementally)
G90                      (Back to absolute)
G00 Z#18           (Rapid Back To R Point)

G103 P0         (Look Ahead Back On)

Carry on If You Are Over 18

Earlier in the post I mention the “Grown Up World Of Macro”. That is because I often meet programmers who learn macro and use it just because they can. Oh and to confuse the shit out of the machine operators and other programmers.

You learnt a bit of macro.

So fuckin what no one is impressed.

You can actually do more harm than good. As I have said in these posts before no one gives a flying fuck if you mess up the machine. Well apart from your boss (you know that bloke with the fat arse, little cock, and a Porch 911).

Seriously (and I rarely am) if you want to write macros here’s what you need to do.

  1. Do you really need one or is it just your huge ego and you need to get a life?
  2. Maybe you need to get out more?
  3. Will it confuse the operator?
  4. Can anyone use it?
  5. Is it simple for the user?
  6. Is it fool proof?

Let’s Look At My G181

Do you really need one or is it just your huge ego?
I think it could be quite useful to be able to allow for the drill point.

Maybe you need to get out more?

Will it confuse the operator?
No it’s very similar to a G81

Can anyone use it?

Is it simple for the user?
Yes my mum loves it and she’s 96.

Is it fool proof?
No definitely not we need to talk about this

Fool Proof

What if you missed out the Z value?

What if you had a minus value in R and a plus value in Z?

Would it still try and work if you input ridiculous figures?

Any of the above would completely screw it up. You could say “I’ll tell the operator to make sure he follows my rules”.

OK so if you just bought a new television and you accidentally pressed 12356 as a channel number.

What if the television just went off, or the screen locked up or it exploded and burnt down your house.

You would complain wouldn’t you. Us Brits can ignore this because we never complain. We’d probably ring up and thank them for the opportunity to build a new house.

Anyway we all know that the telly wouldn’t do that. It would either ignore you and treat you like the dipstick that you are. Or it would just go to channel 999 which is it’s highest channel.

Now this is not because Mr Sony is inside your telly thinking what to do if you make a mistake like shoving the remote control up your arse.

Your television has logic. This means in every scenario it knows what to do. It’s like the Bear Grylls of televisions.

So Let’s Look At Improving This

In a macro you can use a conditional statement. It’s like my wife said to me you either change your underpants every week or you piss off back to your mothers.

It gives choices.

Let’s Add This Line

IF [ #18 LT 0.0 ] GOTO999

What this means is that if #18, which is the R value, is less than 0 the control will jump to N999.

This means if you put a minus figure in R it would be less than zero and trigger the jump to N999.

N999 #3000= 1 (R LESS THAN ZERO PRICK!!)

#3000 puts the machine into an alarm state. The comment in brackets will be the alarm message and it looks like this.

This is how the programme looks now.

O09010 (Drill Point Macro)

G103 P1 (No Look Ahead)

IF [ #18 LT 0.0 ] GOTO999

(Letter A #1 = Drill Point Angle)
(Letter D #7 = Drill Diameter)
(Letter R #18 = Rapid Point)
(Letter Z #26 = Depth)
(Letter F #9 = Feedrate)

G00 Z#18 (Rapid To R Point)

G01 Z#26 F#9

#100= #1 / 2 (1/2 Drill Angle)
#100= TAN[ #100 ] (Tan Of Half Drill Angle)

#101= #7 / 2 (1/2 Drill Diameter)
#102= #101 / #100 (Calculate Extra Depth)

G91 Z – #102 (Extra Bit)
G00 Z#18 (Rapid Back To R Point)

N999 #3000= 1 (R LESS THAN ZERO PRICK!!)

G103 P0 (Look Ahead On)

Now it doesn’t take much imagination to see that you could completely fool proof this macro.

Oh and you can have loads of fun with the childish comments and sexual innuendo.

Variable Zero

#0 is a unique variable because it means no value.

IF [ #18 EQ #0 ] GOTO998

If you put a statement like the one above it means if #18 is vacant (meaning it has no value).

Then the programme will jump to N998.


This is a much politer alarm and it saves a kick in the bollocks from the machine programmer when he gets offended by your childish alarm comments.

Don’t confuse zero with no value. Zero is a value. Ask your clever mate.

Default Values In Your Macro

So now for the “no value” scenario. You could make your  programme jump to a line that gives a default value.

IF [ #18 EQ #0 ] GOTO123
N123 #18=1.

Take a moment to study the above code.

Come on get a grip do you understand it?

Now I’m from the old school of education. When I was a boy if you didn’t know the answer to the teacher’s question it was simple.

They beat the fuckin shit out of you.

And if you discount completely fucking up the planet and starting a lot of pointless wars, my generation have done a pretty good job thus far.

Anyway today I’m going to be patient.

Let me explain…..

If you  are offended by any of the above please go to this website(this bloke writes much better stuff than me)

IF [ #18 EQ #0 ] GOTO123
N123 #18=1.

It’s very easy really, the first line will jump to N123 and set #18 to 1 if #18 has no value.

If however, there is a value in #18, then the control ignores the GOTO123 and reads the next line which jumps to N124 and carries on as if nothing ever happened.

Belt and Braces Things You Can Do

Check all of the following, what happens if…………

  • Values to high
  • Values to low.
  • No value entered
  • Letter missed out

You can set alarms or default values if your conditions are not met.

It’s a bit like blackmail except for the bit where they have to leave a shit load of money in a phone box for you to pick up.

Things to Think About

Think of every dumb ass thing that your user could do with your macro.

Then make your macro respond in a adult way. So if he inputs daft information the macro sorts it out. It can use defaults or go into an alarm state with a message.

Keep the macro front end really simple, this is the bit the user sees and uses. For example my macro needs the radius of the drill for it’s calculation. You will note I ask the user to input the diameter.


Because it’s simple and easy for him and that’s what he will know. I can do all the work behind the scenes hidden away in my 9000 series programme.

The front end.

G181 A120. D16. R1. Z-20. F200.

This bit is all he needs to worry about I take care of everything else. It’s like an all inclusive holiday. All you needs to do is eat sleep and constantly get pissed on cheap booze.

I hope you have enjoyed reading this article.

Thanks for watching and reading

If you have been affected by any of the issues in this post or need CNC Counselling then contact me.

Siemens 828 840 Sinumerik Training

Or call us 

If you want to learn to programme CNC Milling Machines

Look no further Contact CNC Training Centre




August 11, 2023 at 1:11 am

Can your G181 be made modal?


    August 24, 2023 at 2:07 pm

    I don’t know of a way sorry

Log out of this account

Leave a Reply

WP to LinkedIn Auto Publish Powered By :