I have a 0i-MC where I can use the Q argument to address a line number in the current program. No need to make an external program for subprogram. Example:
Actually this isn't explained in the FANUC manual, only the P argument is. I don't know how this was set up. But now I have a 18i where this "trick" doesn't work. Anyone knows something about this subject? I didn't find anything on the net. Some parameter to change?
Also it would be AWESOME to be able to do it with G65/G66 as well (but this does NOT work even on my 0i-MC)
Please don't tell me to use M99Nxx or some other spaghetti code workaroud
oi-mc should use the GOTO command which will just jump to a line number
m98 pxxxx loads a sub program
your post doesnt make sense to me, what are you trying to do that your not able to.
I didn't ask whether my method was good or not. I'm not trying to do something impossible.
Believe it or not, it DOES work on the 0i. I just need to make it work on the 18i.
Maybe the example code I posted wasn't very indicative of its purpose, but the purpose is irrelevant. The fact that the code works is relevant. I'll make a better example anyway:
X0 Y0 M98 Q1100;
X100 Y0 M98 Q1100;
The point is that I can just put subprogrs in the main prog instead of making lots of additional files. Potentially tens of them for each main program. I use a lot of subs and macros (even modal ones) for most of my programs, so M98 Qxx was a godsend. I wish it was possible to use this trick also with G65-66 but I've achieved something very close with my own subprogram-calling macros. Just for the record, it looks something like this:
O9000(M985 CALL LOCAL MACRO);
IF[#18 NE #0] THEN #500=#18 (REMEMBER PROGRAM NUMBER);
M98 P#500 Q#17;
Yes it's possible to specify P and Q. And the arguments used when calling M985 are mantained when the control passes to the subprogram, bacause it's called with a M98 not a G65, which means the level of local variables doesn't change. Example:
M985 R1000 Q4 A1100
M985 Q4 A1200
M985 Q4 A1300
G52 X0 Y0 M98 Q#1
G52 X100 Y0 M98 Q#1
G52 X100 Y100 M98 Q#1
G52 X0 Y100 M98 Q#1
The question is, how do I enable this Q trick on the 18i? And possibly not only for M98 but also for G65?
I've never seen the Q word used with the M98, but I HAVE used the P word with M99 in the main program.
M99P1100 jumps to N1100, and M99 by itself jumps to the beginning of the program.
Hmmm. Q, huh?
Q might be working, but it is as good as a simple GOTO only. If the sub can be repeated a number of times using Q, then it has some utility. Check and let us know.
Incidently M985 has nothing to do with M98.
M98 Q works just as M98 P. The difference is the subprogram in part of the current program instead of an additional external program. It can also be repeated with L. I'ts also possible to use P and Q in the same call. GOTO has nothing to do with it.
The "M985" I posted is a custom macro made by me.
All code examples I posted work perfectly, I'm not making up random stuff.
It seems this subject is rather obscure. Thanks for the help so far anyway. Next week I'll look for differences in the parameters 6000s between the 0i and 18i and maybe I'll find out what enables it.
P and Q in the same call?
How is it interpreted?
It looks for sequence number Q in program number P. Probably not very useful in everyday programming (but my "local macro call" custom needs it).
I got a look at the parameter manuals for both models. In the 0i, it says:
6005: bit 0 (SQC) Calling a subprogram with its sequence number by the subprogram function is: 0=disabled 1=enabled
The 18i manual doesn't mention those parameters but IIRC the parameter screen DID show all the same that are on the 0i... next week we'll see.
This issue needs investigation.
If a sub can be called by sequence number, it perhaps is a part of the calling program, not an external program. But, logically, it should still be a P-word only, not a Q-word.
I'm used to using Mac3 controller and M98 calls to a "subroutine" within the main program i.e not an external "program".
So, i was a bit disapointed to find out my new VMC with a Oi-MD control cant do this simple thing
I'm very interested in finding the best way to call sub routines (not external sub programs).
The operators manual does detail M98 P and Q words......
Such as N00030 M98 P1010 Q1030.....this jumps to an external program and to line number 1030 in the external prog.
It doesn't give an example of just the Q word - I tried it,and it does not work (even with the SEQ parameter 6005 set).
I'll give it another try as some of my progs have 6 or 7 subroutines and 24 workoffsets (jig positions) and having to use goto and external sub programs is a house keeping nightmare.
How do you do it?
I've been told that if setting 6005.0 doesn't work, then an option must be installed by fanuc.
I could dump the option params form a machine that had it enabled, but had no luck finding which one needs to be changed (or maybe changing params isn't enough truly, but it's hard to believe).
So I set my machine to achieve the same result using G65 instead. A program looks like this:
(main program here)
(sub call example: )
G65 P1000 Q123
Parameter CLV (6001 was it?) should be zero so #17 is cleared upon reset, which will cause the GOTO statement to jump to N0 on program start.
It can be simplified further using custom M/G codes (but the limitation of such calls not working when nested can be annoying)
G65 calls an external program. Q123 would set local variable 17 to 123, inside the macro.