User Defined M codes
- rds626
- Offline
- New Member
Less
More
- Posts: 17
- Thank you received: 0
21 Nov 2018 13:27 #121122
by rds626
User Defined M codes was created by rds626
I would like to use these codes to wiggle some I/O lines using halcmd, or, perhaps there is a better method. Anyway, I've set my PCNC 1100 up using a MESA 7i92 board & this works fine. This board has 2 ports available which only 1 port is used for all the standard functions leaving the other port free.
It seems to me there should be an easy way to utilize these unused I/O lines on the free port through user defined M codes M1xx. In some examples I see the use of halcmd to toggle bits on the MESA cards.
So I'm pretty sure that I would need to re-flash my 7i92 card with some definitions for the unused port. Then it looks like PP has some limitations that need to be address. For example, if open a terminal in "~v2.1.5/bin$" I see the executable "halcmd" but you cannot simply run it like you can in LinuxCNC.
Maybe in the context of a M1xx call the "halcmd" does work, but I just don't enough about PP to know. It kind of feels like Tormach doesn't want you to use any hardware but their own.
So how do I reprogram my 7i92 to use the free port for some simple I/O, and then make PP able to use them through the user defined M codes.
Any insights appreciated.
It seems to me there should be an easy way to utilize these unused I/O lines on the free port through user defined M codes M1xx. In some examples I see the use of halcmd to toggle bits on the MESA cards.
So I'm pretty sure that I would need to re-flash my 7i92 card with some definitions for the unused port. Then it looks like PP has some limitations that need to be address. For example, if open a terminal in "~v2.1.5/bin$" I see the executable "halcmd" but you cannot simply run it like you can in LinuxCNC.
Maybe in the context of a M1xx call the "halcmd" does work, but I just don't enough about PP to know. It kind of feels like Tormach doesn't want you to use any hardware but their own.
So how do I reprogram my 7i92 to use the free port for some simple I/O, and then make PP able to use them through the user defined M codes.
Any insights appreciated.
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17937
- Thank you received: 4790
21 Nov 2018 14:34 #121126
by PCW
Replied by PCW on topic User Defined M codes
You don't need to reprogram the 7I92 to access simple GPIO
The way all Mesa Hostmot2 configurations work is that all I/O pins can be used as
GPIO as long as they have not been assigned to special functions like step generators. PWM, encoders, etc
Depending on the firmware used, you may have to insure that special functions on the second connector are not enabled (this is done in hal file via the loadrt hostmot2 line with the num_stepgens=N num_pwmgens=M etc configuration tokens)
To use GPIO pins as outputs you must first set them into output mode, as all pins default to inputs with pullups.
Since they are high before LinuxCNC is running (because of the pullups), GPIO outputs should be used in active low mode, for example if you wish to drive a SSR connect SSR+ to 7I92 5V and SSR- to the 7I92 IO pin. This will insure tha the SSR is not activated at power up or power down.
Note that the second connector is GPIO 17..33
The way all Mesa Hostmot2 configurations work is that all I/O pins can be used as
GPIO as long as they have not been assigned to special functions like step generators. PWM, encoders, etc
Depending on the firmware used, you may have to insure that special functions on the second connector are not enabled (this is done in hal file via the loadrt hostmot2 line with the num_stepgens=N num_pwmgens=M etc configuration tokens)
To use GPIO pins as outputs you must first set them into output mode, as all pins default to inputs with pullups.
Since they are high before LinuxCNC is running (because of the pullups), GPIO outputs should be used in active low mode, for example if you wish to drive a SSR connect SSR+ to 7I92 5V and SSR- to the 7I92 IO pin. This will insure tha the SSR is not activated at power up or power down.
Note that the second connector is GPIO 17..33
Please Log in or Create an account to join the conversation.
- Todd Zuercher
- Offline
- Platinum Member
Less
More
- Posts: 5009
- Thank you received: 1443
21 Nov 2018 15:26 #121131
by Todd Zuercher
Replied by Todd Zuercher on topic User Defined M codes
To some extent it is true about Tormach. But look at it from their perspective. Allowing customers to freely customize their products would make customer support on their end a nearly impossible nightmare. Keeping the hardware and software locked down to known designs make it much simpler for them to support, troubleshoot and fix.
I am pretty sure that you wouldn't need to reflash. My understanding is that any unused pins can be used as GPIO. Although if the firmware is assigning a purpose to that pin, you may be limited to the programed purpose of it (as an input or output). That said just give it a try, can you hook up an indicator of some sort, open a terminal while Linuxcnc is running type halcmd -kf then try to setp the appropriate GPIO pin and see if any thing happens. If that works then you should be good to go setting up your custom M-codes.
(I don't know if any of this is possible in Path Pilot.)
I am pretty sure that you wouldn't need to reflash. My understanding is that any unused pins can be used as GPIO. Although if the firmware is assigning a purpose to that pin, you may be limited to the programed purpose of it (as an input or output). That said just give it a try, can you hook up an indicator of some sort, open a terminal while Linuxcnc is running type halcmd -kf then try to setp the appropriate GPIO pin and see if any thing happens. If that works then you should be good to go setting up your custom M-codes.
(I don't know if any of this is possible in Path Pilot.)
Please Log in or Create an account to join the conversation.
- andypugh
- Offline
- Moderator
Less
More
- Posts: 23313
- Thank you received: 4861
21 Nov 2018 15:35 #121134
by andypugh
It should be easy enough to try it and see.
Note that halcmd will fail on any system if LinuxCNC is not running.
Does "halrun" work under PP? (That needs to be run with LinuxCNC _not_ running)
Replied by andypugh on topic User Defined M codes
Maybe in the context of a M1xx call the "halcmd" does work, but I just don't enough about PP to know. It kind of feels like Tormach doesn't want you to use any hardware but their own.
It should be easy enough to try it and see.
Note that halcmd will fail on any system if LinuxCNC is not running.
Does "halrun" work under PP? (That needs to be run with LinuxCNC _not_ running)
Please Log in or Create an account to join the conversation.
- rds626
- Offline
- New Member
Less
More
- Posts: 17
- Thank you received: 0
23 Nov 2018 22:10 #121274
by rds626
Replied by rds626 on topic User Defined M codes
OK, thanks for the feedback.
I'm able to create a file M101 in "~/tmc/configs/tormach_mill/nc_subs/" with the contents of
and can see the output in the terminal program when I enter M101 into the MDI box.
So this looks promising. According to some of the examples the "halcmd" will need to be something like:to wiggle a pin. So I'm not sure yet what the parameters will be for my case, or even how to figure them out.
For reasons I don't understand I'm unable to run any of the linuxcnc utilities in "~/tmc/bin" such as "halcmd" and or "mesaflash". Simply typing the command returns "command not found" even though it's listed in the directory & is executable. If I type "./haclcmd" then I get "./halcmd: error while loading shared libraries: liblinuxcncini.so.0: cannot open shared object file: No such file or directory" which I don't understand. Is halcmd a program or some kind of script?
Anyway, In my quest to figure out the 7i92 contents I downloaded & install "mesaflash" and ran:
which produce the following file.
Note that for my mill I'm connected to P2 and I added the Tormach PCNC 1100 S3 column to this file.
Note: This printout shows pin numbers based on a DB25 connector. The pin numbers change if using a IDC header.
What I'm interested in are the P1 pins since these are not being used. It's interesting to see that many of these pins are defined for what must be another Tormach device - perhaps the lathe???.
Anyway, there are some simple IO pins available to use on P1 (Is there a way to reflash these to be all simple IO pins?).
So now the question is how do I use this information to form a an argument for "halcmd" to wiggle a bit, let say on P1, Pin 14, IOPort 18?
Thanks again.
I'm able to create a file M101 in "~/tmc/configs/tormach_mill/nc_subs/" with the contents of
#!/bin/bash
halcmd show all
exit 0
So this looks promising. According to some of the examples the "halcmd" will need to be something like:
halcmd setp parport.0.pin-14-out True
For reasons I don't understand I'm unable to run any of the linuxcnc utilities in "~/tmc/bin" such as "halcmd" and or "mesaflash". Simply typing the command returns "command not found" even though it's listed in the directory & is executable. If I type "./haclcmd" then I get "./halcmd: error while loading shared libraries: liblinuxcncini.so.0: cannot open shared object file: No such file or directory" which I don't understand. Is halcmd a program or some kind of script?
Anyway, In my quest to figure out the 7i92 contents I downloaded & install "mesaflash" and ran:
$ mesaflash --device 7i92 --addr 10.10.10.10 --readhmid
Note that for my mill I'm connected to P2 and I added the Tormach PCNC 1100 S3 column to this file.
Note: This printout shows pin numbers based on a DB25 connector. The pin numbers change if using a IDC header.
What I'm interested in are the P1 pins since these are not being used. It's interesting to see that many of these pins are defined for what must be another Tormach device - perhaps the lathe???.
Anyway, there are some simple IO pins available to use on P1 (Is there a way to reflash these to be all simple IO pins?).
So now the question is how do I use this information to form a an argument for "halcmd" to wiggle a bit, let say on P1, Pin 14, IOPort 18?
Thanks again.
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17937
- Thank you received: 4790
24 Nov 2018 01:00 - 24 Nov 2018 01:13 #121278
by PCW
Replied by PCW on topic User Defined M codes
_All_ I/O pins are available as simple GPIO with _any_ configuration, as long as they are not claimed
by a enabled special function.
Special functions are enabled in the config string, so you can make all pins become GPIO if you wish
by setting all the num_XXXX tokens in the configuration string to 0 (not recommended)
Typically special functions like stepgens are numbered so that higher numbered instances are on the second connector, so its normally possible to disable all special functions on the second connector by setting the configuration string properly. Once this is done the second connector I/O will become straight GPIO
The config string is located either in the hal or ini file
So to toggle a bit (say IO bit 17 = P1.pin1), you would first (typically in the hal file)
set the pin into output mode:
setp hm2_7i92.0.gpio.017.is_output true
And then either net the output pin to a signal:
net flood iocontrol.0.coolant-flood hm2_7i92.0.gpio.017.out
Or set/clear it by hand:
setp hm2_7i92.0.gpio.017.out true
setp hm2_7i92.0.gpio.017.out false
by a enabled special function.
Special functions are enabled in the config string, so you can make all pins become GPIO if you wish
by setting all the num_XXXX tokens in the configuration string to 0 (not recommended)
Typically special functions like stepgens are numbered so that higher numbered instances are on the second connector, so its normally possible to disable all special functions on the second connector by setting the configuration string properly. Once this is done the second connector I/O will become straight GPIO
The config string is located either in the hal or ini file
So to toggle a bit (say IO bit 17 = P1.pin1), you would first (typically in the hal file)
set the pin into output mode:
setp hm2_7i92.0.gpio.017.is_output true
And then either net the output pin to a signal:
net flood iocontrol.0.coolant-flood hm2_7i92.0.gpio.017.out
Or set/clear it by hand:
setp hm2_7i92.0.gpio.017.out true
setp hm2_7i92.0.gpio.017.out false
Last edit: 24 Nov 2018 01:13 by PCW.
Please Log in or Create an account to join the conversation.
- rds626
- Offline
- New Member
Less
More
- Posts: 17
- Thank you received: 0
24 Nov 2018 17:25 #121297
by rds626
Replied by rds626 on topic User Defined M codes
OK, after playing around with different arguments to halcmd in my M101 file, it appears something has happened & halcmd is no longer working.
When viewing the terminal output while issuing a M101 in PP I no longer see halcmd outputs. The terminal outputs:So it looks like I can no longer issue halcmd's from within the M101 file???
Ignoring this I did try your suggestions but none of the lines are wiggling on P1 or gpio.017.
I'm still confused why I cannot simply open a terminal up in "~/tmc/bin" and run "halcmd" or any of the listed programs there.
This works in linuxcnc without any problems so what's going on with PP?
When viewing the terminal output while issuing a M101 in PP I no longer see halcmd outputs. The terminal outputs:
Issuing MDI command: M101
REMAP hal component ...
Ignoring this I did try your suggestions but none of the lines are wiggling on P1 or gpio.017.
I'm still confused why I cannot simply open a terminal up in "~/tmc/bin" and run "halcmd" or any of the listed programs there.
This works in linuxcnc without any problems so what's going on with PP?
Please Log in or Create an account to join the conversation.
- Clive S
- Offline
- Platinum Member
Less
More
- Posts: 2241
- Thank you received: 476
24 Nov 2018 17:37 #121298
by Clive S
Replied by Clive S on topic User Defined M codes
Are you using the PP gui ? if you are on the MDI try "ADMIN HALMETER"
Please Log in or Create an account to join the conversation.
- andypugh
- Offline
- Moderator
Less
More
- Posts: 23313
- Thank you received: 4861
24 Nov 2018 17:53 #121299
by andypugh
REMAP? That's a surprise...
Halcmd won't work if LinuxCNC isn't active. (No shared memory area to connect to)
Replied by andypugh on topic User Defined M codes
Issuing MDI command: M101 REMAP hal component ...
REMAP? That's a surprise...
Halcmd won't work if LinuxCNC isn't active. (No shared memory area to connect to)
Please Log in or Create an account to join the conversation.
- rds626
- Offline
- New Member
Less
More
- Posts: 17
- Thank you received: 0
24 Nov 2018 18:57 #121301
by rds626
Yes & ADMIN HALMETER works as expected.Not sure what that means while running PP. The only way I have been able to get halcmd to work was through a user defined M code where my file, M101, contained something like:Now this no longer works & reports:My machine continues to work fine. The only way I figure to get back to where I was is to do a restore.
Replied by rds626 on topic User Defined M codes
Are you using the PP gui ? if you are on the MDI try "ADMIN HALMETER"
Halcmd won't work if LinuxCNC isn't active. (No shared memory area to connect to)
#!/bin/bash
halcmd show all
exit 0
Issuing MDI command: M101
REMAP hal component ...
Please Log in or Create an account to join the conversation.
Time to create page: 0.091 seconds