Remap g-code: Wait for ngc commands to complete?

More
3 years 8 months ago #263467 by chowderhead
It seems when remapping g-code, either in pure Python or using prolog/ngc/epilog, any ngc commands (either in ngc file or self.execute()) are queued and subsequent Python code is immediately executed. I need to await the conclusion of a G38 before executing subsequent code, how do I do that?

Thanks!

Please Log in to join the conversation.

More
3 years 8 months ago #263470 by andypugh
I think that you might have almost guessed it in the title.

After a c.mdi() use a c.wait_complete()

linuxcnc.org/docs/stable/html/config/pyt...mand_code_attributes

Please Log in to join the conversation.

More
3 years 8 months ago #263473 by chowderhead
Thank you for the quick reply!

That works for the linuxcnc python module, but I don't see wait_complete() in the interpreter module doing a print(dir(self)) from the python routine called by REMAP, so I don't think it'll work. I suppose I could import linuxcnc in remap.py and fire mdi commands, but it seems a bit kludgy...

Please Log in to join the conversation.

More
3 years 8 months ago #263475 by andypugh
Can I see the code?

This might just be a consequence of how LinuxCNC works, with a realtime queue that is fed from userspace code.

Without actually setting up a remap I can't easily see what the interpreter library can do (it's not importable outside a remap, AFAIK).

Can you dir(interpreter) in your remap and look for a flush() command?

Please Log in to join the conversation.

More
3 years 8 months ago #263476 by chowderhead
There is no flush in interpreter.

The following blows up with a cryptic error message:

Code:
from interpreter import * from emccanon import MESSAGE import hal from time import sleep, time throw_exceptions = 1 def M33(self, **words):     if not hal.get_value('welder.wc_ready'):         self.set_errormsg('Weld controller is not ready')         return INTERP_ERROR          if hal.get_value('welder.touch_start'):         # Enable touch sense:         touch_sense = hal.get_value('welder.touch_sense')         if touch_sense:             # Shouldn't happen             self.set_errormsg('M33 called but touch sense already enabled')             return INTERP_ERROR         else:             hal.set_p('welder.touch_sense', '1') # Value must be a string         # Wait until touch sense has been enabled         enabled = hal.get_value('welder.touch_sense_enabled')         while not enabled:             sleep(0.1)             enabled = hal.get_value('welder.touch_sense_enabled')         self.execute('G90')         self.execute('G38.2 Z-10 F10')         self.execute('G91')         hal.set_p('welder.touch_sense', '0')         hal.set_p('welder.welder_on', '1')     return INTERP_OK

Please Log in to join the conversation.

More
3 years 8 months ago #263479 by andypugh
It's probably no help, but what is the cryptic error message?

Please Log in to join the conversation.

More
3 years 8 months ago #263490 by cmorley
            yield INTERP_EXECUTE_FINISH

A little bit on it near the end of this section.
linuxcnc.org/docs/2.9/html/remap/remap.h...ntions_ngc_to_python

Please Log in to join the conversation.

More
3 years 8 months ago #263531 by chowderhead
Thank you! There is a lot on that page to digest, and I didn't see this one. I'll give it a try when I'm back in the shop.

On a related note, I'm running 2.10 on my home machine and 2.9 at the shop. They seem to yield different results with similar remaps. I'll confirm today and post the results here.

Please Log in to join the conversation.

More
3 years 8 months ago #263608 by chowderhead
Thanks for the help, works a charm!

I can confirm a difference between 2.9 and 2.10. The following simple remap:
Code:
def M34(self, **words):     self.execute('G91')     self.execute('G1 Z-0.1 F300')     self.execute('G90')

Initialized by:
Code:
REMAP= M34 modalgroup=10 python=M34

Completes without issue in 2.9, but produces the following in 2.10:
Code:
emc/task/emctask.cc 69: interp_error: remap_finished: got -13 - not in cblock.remappings! remap_finished: got -13 - not in cblock.remappings!

Please Log in to join the conversation.

More
3 years 8 months ago #263614 by cmorley
I suggest you add a issue to github so it doesn't get lost.

github.com/LinuxCNC/linuxcnc/issues

Please Log in to join the conversation.

Time to create page: 0.121 seconds
Powered by Kunena Forum