User defined M-code calling python script
13 Apr 2015 21:12 #57752
by dienno
User defined M-code calling python script was created by dienno
This is the first time I've posted so please be gentle, I'm more sensitive than I want to admit.
What I want to do:
I have a user defined M-code that I call through pyvcp that is supposed to turn on a solenoid and launch a python script that opens a separate opencv camera window.
Why do I want to do this?
I have a center finding camera setup on my mill with a pneumatic piston that will flip it down under the spindle to find the center of my part.
I could not get camunits or camview to work on my debian 12.xx install.
I would like to have a pyvcp button that moves the spindle into the correct XYZ location then engage my solenoid/piston to flip the camera into place.
Then I want the same pycvp button to call my python script which opens the camera output and rotates the image accordingly. (note: the opencv camera python script works great stand alone right now)
Current state:
I can call my M101 user defined gcode from my pyvcp panel and it changes the state of my pin, so I know that my custom gcode is working
I have a line in the M101 definition like 'python camera1.py" to call the camera script.
When I run the M101 from pyvcp the pin changes but the camera1.py script does not launch.
If I make a copy of the M101 file and rename it M101.sh and make it executable and run it from the command line it executes my camera1.py script.
Assumption:
I originally assumed that custom m-codes are run as bash scripts so it should function the same when I run it as an m-code or a bash script (guess I'm missing something here).
I am currently assuming that there is some slight difference when the bash script is run from within linuxcnc to call a python script.
Question:
What am I missing?
Is there some specific permission I need to give camera1.py so it can be called from within linuxcnc in an M-code?
Is what I am trying to do possible?
Thanks
Dustin
What I want to do:
I have a user defined M-code that I call through pyvcp that is supposed to turn on a solenoid and launch a python script that opens a separate opencv camera window.
Why do I want to do this?
I have a center finding camera setup on my mill with a pneumatic piston that will flip it down under the spindle to find the center of my part.
I could not get camunits or camview to work on my debian 12.xx install.
I would like to have a pyvcp button that moves the spindle into the correct XYZ location then engage my solenoid/piston to flip the camera into place.
Then I want the same pycvp button to call my python script which opens the camera output and rotates the image accordingly. (note: the opencv camera python script works great stand alone right now)
Current state:
I can call my M101 user defined gcode from my pyvcp panel and it changes the state of my pin, so I know that my custom gcode is working
I have a line in the M101 definition like 'python camera1.py" to call the camera script.
When I run the M101 from pyvcp the pin changes but the camera1.py script does not launch.
If I make a copy of the M101 file and rename it M101.sh and make it executable and run it from the command line it executes my camera1.py script.
Assumption:
I originally assumed that custom m-codes are run as bash scripts so it should function the same when I run it as an m-code or a bash script (guess I'm missing something here).
I am currently assuming that there is some slight difference when the bash script is run from within linuxcnc to call a python script.
Question:
What am I missing?
Is there some specific permission I need to give camera1.py so it can be called from within linuxcnc in an M-code?
Is what I am trying to do possible?
Thanks
Dustin
Please Log in or Create an account to join the conversation.
13 Apr 2015 21:25 #57755
by ArcEye
Replied by ArcEye on topic User defined M-code calling python script
Hi
To run a user M code command file these conditions must be met
www.linuxcnc.org/docs/devel/html/gcode/m...tml#sec:M100-to-M199
Calling camera1.py will not do anything unless it is executable and the command processor is specified in the header
otherwise use
python camera1.py
Without seeing your script don't know if anything else is at play
regards
To run a user M code command file these conditions must be met
www.linuxcnc.org/docs/devel/html/gcode/m...tml#sec:M100-to-M199
Calling camera1.py will not do anything unless it is executable and the command processor is specified in the header
otherwise use
python camera1.py
Without seeing your script don't know if anything else is at play
regards
Please Log in or Create an account to join the conversation.
13 Apr 2015 22:38 #57758
by dienno
Replied by dienno on topic User defined M-code calling python script
Thanks for the quick reply ArcEye.
I am at work, so I will have to post the script later.
I looked through all of the user Mcode conditions and I have met them. Also, my mcode does run from pyvcp and it does change the state of my pin it just does not execute the python script also. The script camera1.py is executable and is stored in the same folder as my user defined m-codes.
I think this is what my m-code looks like (file name M101). I'll have to double check when I go home.
#!/bin/bash
# file to turn on parport pin 17 to engage the camera
halcmd setp parport.1.pin-17-out False
python camera1.py (this may also be ./camera1.py, I'm not sure what the final version looked like)
exit 0
When I run the M101 from pyvcp or the manual input, the hal pin changes state but the camera1.py script does not launch.
If I change the file name to M101.sh and comment out the halcmd, and run from the command line it launches the camera1.py script and the camera output pops up on the screen. (see modified code below for file with name M101.sh)
#!/bin/bash
# file to turn on parport pin 17 to engage the camera
# halcmd setp parport.1.pin-17-out False
python camera1.py (this may also be ./camera1.py, I'm not sure what the final version looked like)
exit 0
Why doesn't camera1.py launch when I run M101 from within linuxcnc? Do I need something in the header of the file that references python? I think you mentioned this in your reply but I don't fully understand.
I'm sure I'm doing something dumb.
Thanks for the help
I am at work, so I will have to post the script later.
I looked through all of the user Mcode conditions and I have met them. Also, my mcode does run from pyvcp and it does change the state of my pin it just does not execute the python script also. The script camera1.py is executable and is stored in the same folder as my user defined m-codes.
I think this is what my m-code looks like (file name M101). I'll have to double check when I go home.
#!/bin/bash
# file to turn on parport pin 17 to engage the camera
halcmd setp parport.1.pin-17-out False
python camera1.py (this may also be ./camera1.py, I'm not sure what the final version looked like)
exit 0
When I run the M101 from pyvcp or the manual input, the hal pin changes state but the camera1.py script does not launch.
If I change the file name to M101.sh and comment out the halcmd, and run from the command line it launches the camera1.py script and the camera output pops up on the screen. (see modified code below for file with name M101.sh)
#!/bin/bash
# file to turn on parport pin 17 to engage the camera
# halcmd setp parport.1.pin-17-out False
python camera1.py (this may also be ./camera1.py, I'm not sure what the final version looked like)
exit 0
Why doesn't camera1.py launch when I run M101 from within linuxcnc? Do I need something in the header of the file that references python? I think you mentioned this in your reply but I don't fully understand.
I'm sure I'm doing something dumb.
Thanks for the help
Please Log in or Create an account to join the conversation.
13 Apr 2015 23:14 #57760
by ArcEye
Replied by ArcEye on topic User defined M-code calling python script
This M133 script runs a halcmd and then opens JTs ArcBuddy, which is a python app
What I meant by the header to specify the processing app is in the first line of arcbuddy.py
This is not present in this form in a lot of python scripts, they reference python-env, which may or may not be set
The result is
(ignore the fact that it is Machinekit, I had that loaded at the time)
So you can set a pin and then open a python app if all is correct
regards
#!/bin/bash
halcmd setp iocontrol.0.lube_level 1
arcbuddy.py
exit 0
What I meant by the header to specify the processing app is in the first line of arcbuddy.py
#!/usr/bin/python
This is not present in this form in a lot of python scripts, they reference python-env, which may or may not be set
The result is
(ignore the fact that it is Machinekit, I had that loaded at the time)
So you can set a pin and then open a python app if all is correct
regards
Please Log in or Create an account to join the conversation.
13 Apr 2015 23:48 #57764
by andypugh
There are several ways to do this, some more fun than others.
M101 will search for an executable file called "101" and will execute it.
An executable file can be a Python script. So you could simply rename your Python script, start the file with the "magic" incantationMake the file executable (chmod or right-click in the GUI and go to properties) and then M101 should run the Python directly.
Or you could start at the other end...
A GladeVCP panel can have buttons that run arbitrary python code, and init code could create the camera window.
Python scripts can send-G-code to LinuxCNC:
www.linuxcnc.org/docs/html/common/python..._linuxcnc_command_tt (c.mdi)
You can manipulate HAL pins created by the Python code inside the Python code.
Replied by andypugh on topic User defined M-code calling python script
What I want to do:
I have a user defined M-code that I call through pyvcp that is supposed to turn on a solenoid and launch a python script that opens a separate opencv camera window.
There are several ways to do this, some more fun than others.
M101 will search for an executable file called "101" and will execute it.
An executable file can be a Python script. So you could simply rename your Python script, start the file with the "magic" incantation
#!/usr/bin/python
Or you could start at the other end...
A GladeVCP panel can have buttons that run arbitrary python code, and init code could create the camera window.
Python scripts can send-G-code to LinuxCNC:
www.linuxcnc.org/docs/html/common/python..._linuxcnc_command_tt (c.mdi)
You can manipulate HAL pins created by the Python code inside the Python code.
Please Log in or Create an account to join the conversation.
14 Apr 2015 01:11 #57767
by dienno
Replied by dienno on topic User defined M-code calling python script
Thanks for all of the help everyone. I'll give this a shot today or tomorrow.
Please Log in or Create an account to join the conversation.
14 Apr 2015 07:26 #57770
by dienno
Replied by dienno on topic User defined M-code calling python script
Renaming my python script called camera1.py to M102 worked great. I already had the shebang at the top so it was really easy. Thanks for the help. I'll post my finished scripts for the camera and NGCgui stuff once I make sure it is all debugged. Just in case someone else might have a use for it.
Please Log in or Create an account to join the conversation.
14 Apr 2015 11:40 #57775
by dienno
Replied by dienno on topic User defined M-code calling python script
I think I jumped the gun a little on claiming full success. My new mcode that calls my camera Python script opens the camera as expected but when I click back to my axis screen it closes the camera window. Hmmm. I'll post my script tomorrow but I'm guessing that I may need to change my approach to what arceye originally suggested.
Please Log in or Create an account to join the conversation.
14 Apr 2015 13:17 #57778
by ArcEye
Replied by ArcEye on topic User defined M-code calling python script
You probably need to spawn the process so that it runs independently.
Simple as using
mypyprogram.py &
in the M1xx file
or suitable equivalent if launching from another python program.
regards
Simple as using
mypyprogram.py &
in the M1xx file
or suitable equivalent if launching from another python program.
regards
Please Log in or Create an account to join the conversation.
14 Apr 2015 20:30 #57798
by dienno
Replied by dienno on topic User defined M-code calling python script
I'll give that a try. Here is my current mcode (M102) that is actually just the python script that runs the camera (see attached). To do what you are saying, I'm guessing I will have to go back to having my M102 script be a bash script that calls my python script. So I will have to rename my python camera script back to camera1.py and just add camera1.py & to my bash script.
When the bash script calls the python script does it look in the same directory that it resides in, or does it look in the working path specified in the ini file?
Thanks
When the bash script calls the python script does it look in the same directory that it resides in, or does it look in the working path specified in the ini file?
Thanks
Please Log in or Create an account to join the conversation.
Time to create page: 0.108 seconds