"Named" file subroutine call fails; "Numbered" ok

More
30 Dec 2013 09:02 - 31 Dec 2013 03:18 #42188 by clunc
EDIT: SOLVED. I used UPPERCASE for subroutine's FILENAME, against documentation's express information. (Thank you dgarrett and ArcEye.)
Sometimes you get so blind it's hard to see.

Just reporting.

Pulled my hair out. (Put to the side for later look into possible re-attachment.)

The main program calls a subroutine file O104C_FX.ngc [EDIT: My mistake. o104c_fx.ngc would have been fine.] with:

O<o104c_fx> call

The external subroutine file O104C_FX.ngc file contains:
O<o104c_fx> sub
(some g-code)
O<o104c_fx> endsub
M2

But on loading the main file, AXIS in LinuxCNC 2.5.3 complains:
"cannot open (or find, I forget) file o104c_fx"

I know about PROGRAM_PREFIX which I've set in [DISPLAY] in the INI file to:
/home/username/cncmodels,
and SUBROUTINE_PATH which I've set, in the correct section I forget, to:
/home/username/cncmodels:/home/username/linuxcnc/nc_models

And I've copied the file O104C_FX.ngc to BOTH
locations in the SUBROUTINE_PATH.

With no resulting happiness. (In fact with hair-pulling frustration...)

BUT change the filename to "100.ngc" and all the various
references to "O<100>"--WITHOUT changing locations or variable
values or anything else--and Joy Abounds. (It's executing this very moment.)

I experimented quite a bit (removed the underscore, removed uscore AND numbers, etc.)
and the ONLY thing I found that worked was to Name The Subroutine File with Numbers.

I am satisfied the documentation is not correct on this point.
I am satisfied the documentation could make the point more strongly. :S
Last edit: 31 Dec 2013 03:18 by clunc.

Please Log in or Create an account to join the conversation.

More
30 Dec 2013 10:13 #42191 by dgarrett
linuxcnc.org/docs/html/gcode/o-code.html


"The file name can include lowercase letters, numbers, dash, and underscore only."
...
"Note
The file names are lowercase letters only so o<MyFile> is converted to o<myfile> by the interpreter. More information about the search path and options for the search path are in the INI Configuration Section."

Please Log in or Create an account to join the conversation.

More
30 Dec 2013 12:44 #42194 by clunc
Precisely the quote which should read:

"The file name can include numbers only."

Please Log in or Create an account to join the conversation.

More
30 Dec 2013 15:45 - 30 Dec 2013 18:04 #42195 by ArcEye
Hi

Named subs work fine, you are just doing it wrong.

Linux is case sensitive and additionally the interpreter converts to lower case.

You have a subroutine named in lowercase, within a file with a name which contains uppercase letters
ie. the filename is not the same as the sub name as far as linux is concerned

Just make it simple, call the sub mysub and the file mysub.ngc, so long as the paths are correct, it will just work

PS it is a good idea to always call the sub in lowercase too
eg
o<subname> call

then there is no chance of hitting zero instead of O when you type it (or at least not noticing you did it :laugh: )

regards
Last edit: 30 Dec 2013 18:04 by ArcEye.

Please Log in or Create an account to join the conversation.

More
31 Dec 2013 03:09 #42204 by clunc
Ah, I see, with apologies to dgarrett for my earlier failure to read the WHOLE thing: "...the filename can contain LOWERCASE letters, numbers, dash, and underscore only."

(I went right past that word 'lowercase'.)

And, thanks, ArcEye, for turning me around to look at it again.

Because the subroutine name, SUBNAME, is going to be mapped to all-lower case in:
o<SUBNAME> call

then, the subroutine it calls must be designated as lowercase:
o<subname> sub
o<subname> endsub

AND the file in which it is found must be named with lowercase:
subname.ngc.

(I, pugnaciously, still don't think the documentation makes that point as well as you just did.)

Please Log in or Create an account to join the conversation.

Time to create page: 0.085 seconds
Powered by Kunena Forum