Machsupport Forum

Mach Discussion => Mach4 General Discussion => Topic started by: dbt3000files on January 26, 2019, 04:05:03 PM

Title: mcCntlGcodeExecute best practice
Post by: dbt3000files on January 26, 2019, 04:05:03 PM
Does anyone know if there is a way to check on the status of a gcode execution?  I have been using mc.mcCntlGcodeExecuteWait with no issues, but I want to be able to check the state of an input while the gcode is being run and then wait until it is done to move on to the next line of Lua. I am assuming that I can use mcCntlGcodeExecute to do this, but I can't figure out how to know when it is done.

Thanks,
David
Title: Re: mcCntlGcodeExecute best practice
Post by: joeaverage on January 26, 2019, 05:47:39 PM
Hi,
there is another API which is more suitable and recommended under most circumstances:

Code: [Select]
LUA Syntax:
rc = mc.mcCntlGcodeExecuteWait(
number mInst,
string commands)

Description:
Execute G code as a unit of work and wait until it is complete

Note also that it has a return code which can be tested for success.

Code: [Select]
Returns: Return Code Description
MERROR_NOERROR No Error.
MERROR_INVALID_INSTANCE The mInst parameter was out of range.
MERROR_NOT_NOW The operation could not be completed at this time.
MERROR_NOT_COMPILED The macro scripts could not be compiled.

Craig
Title: Re: mcCntlGcodeExecute best practice
Post by: joeaverage on January 26, 2019, 07:03:05 PM
Hi,
re-reading your post a little more closely and I'm thinking my previous rely is 'out to lunch'.

If I understand what you are asking is whether you can test a signal or other input WHILE a move is in progress?

If that is the case the GcodeExexcuteWait() will not work because the Gcode interpreter is hogging the CPU and there is
no way for Machs Core to do any other work.

If however you use GcodeExecute() then the function will return once it has issued instructions to the motion controller.
Thus Machs Core could presumably do something in the mean time. I'm not quite sure how it would work.
Maybe:
rc = mc.mcSignalWait(
      number mInst,
      number sigId,
      number waitMode,
      number timeoutSecs);

would work.

Craig
Title: Re: mcCntlGcodeExecute best practice
Post by: dbt3000files on January 28, 2019, 12:00:41 PM
Thanks Craig for the suggestions.
I think it looks like I need to use mc.mcCntlGetState
Found my answer here: https://www.machsupport.com/forum/index.php?topic=36018.0 (https://www.machsupport.com/forum/index.php?topic=36018.0)
Title: Re: mcCntlGcodeExecute best practice
Post by: gorf23 on January 29, 2019, 04:18:32 PM
I have used GcodeExecute() and then set a variable true or false  to run in the plc that will update the screen dro for the axis running works ok no gui lockup