![]() | |
| Home Page | Mark Forums Read | Today's Posts | My Replies | Classifieds | Reviews | Photo Gallery | Web Links | Share Files | Advertise With Us | Ad List |
| |||||||
| Fanuc Discuss Fanuc controllers here! |
| This forum is sponsored by: |
![]() |
| | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#1
| |||
| |||
Hi all, 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: O1; M98 Q1000; M30; ; N1000; (...) M99; 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 |
|
#3
| |||
| |||
| 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: O1000; X0 Y0 M98 Q1100; X100 Y0 M98 Q1100; M30; ; N1100; (...) M99; 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); (Q=SEQUENCE NUMBER); (R=PROGRAM NUMBER)(MODAL); (A,B,C,ETC=MACRO ARGUMENTS); IF[#18 NE #0] THEN #500=#18 (REMEMBER PROGRAM NUMBER); M98 P#500 Q#17; M99; 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: O1000 M985 R1000 Q4 A1100 M985 Q4 A1200 M985 Q4 A1300 M30 N4 G52 X0 Y0 M98 Q#1 G52 X100 Y0 M98 Q#1 G52 X100 Y100 M98 Q#1 G52 X0 Y100 M98 Q#1 M99 N1100 (...) M99 N1200 (...) M99 N1300 (...) M99 The question is, how do I enable this Q trick on the 18i? And possibly not only for M98 but also for G65? |
|
#5
| |||
| |||
| 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. |
| Sponsored Links |
|
#6
| |||
| |||
| 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. |
|
#8
| |||
| |||
| 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. |
|
#10
| |||
| |||
| Hi All, 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? Cheers, Derek. |
| Sponsored Links |
|
#11
| |||
| |||
| 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: O1000 GOTO[0+#17] N0 (main program here) (sub call example: ) G65 P1000 Q123 M30 N123 (subprogram here) M99 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) |
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | Search this Thread |
| Display Modes | |
| |