CS-Lab Support Forum for CNC Community
Help to run this brand-new forum and stay with us.
Ask your questions, we are here to help!
SimCNC V3.6 beta2 : trying the auto-leveling feature.
Quote from Christophe Mineau on 10 February 2026, 07:37Hi,
Wanting to explore the new Auto level feature present in V3.6 Beta 2, I installed a new SimCNC setup on Raspi5 (standard raspi distro).
So far I have reached the same level of reliability I had with my previous V3.4 version running on an old Ubuntu PC, so I'm grateful for that new version, thanks CS-lab!Now I am starting to explore this auto-leveling feature.
I start by building up the grid, and for doing so I wanted to use Anton's work shown in another thread of this forum, with some personal adaptations to make a grid convenient for the auto-leveling function as explained in the release notes.But so far, I am having a problem running the gcode in charge of surface scanning the 10 x 10 grid.
I am following Anton's idea for the scanning part, so I have a new screen providing the grid parameters, which generates a gcode program in charge of moving XY to the points and scanning each point using an m42 macro, which code is here (Antons's Work)
https://github.com/Antonowitch/cnc-surface-scan/blob/main/M42.pyBut the problem I have is that the program starts working, scans a few points and then I get an exception :
___EXCEPTION.SimCncException: 'Action is not in idle state'Here is the full stack :
Traceback (most recent call last):
File "/opt/simCNC/profiles/6040Z/scripts/___INIT.py", line 30, in <module>
exec(open(fileName, encoding='utf-8').read())
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<string>", line 49, in <module>
File "/opt/simCNC/profiles/6040Z/scripts/___DEVICE.py", line 248, in executeProbing
return self.comm.sendAndWait( "executeProbing:" + coordMode.name + ':' + str(position[0])+';'+str(position[1])+';'+str(position[2])+';'+str(position[3])+';'+str(position[4])+';'+str(position[5]) + ':' + str(probeIndex) + ':' + str(velocity) ) == "True"
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/simCNC/profiles/6040Z/scripts/___COMM.py", line 189, in sendAndWait
raise SimCncException(":".join(res[1:]))
___EXCEPTION.SimCncException: 'Action is not in idle state'What does this exception mean ?
Should I understand we cannot use executeProbing from within a running gcode ?
Should I perform the full grid scanning in a python script without using gcode ?Thanks in advance, tell me if you need more details.
Hi,
Wanting to explore the new Auto level feature present in V3.6 Beta 2, I installed a new SimCNC setup on Raspi5 (standard raspi distro).
So far I have reached the same level of reliability I had with my previous V3.4 version running on an old Ubuntu PC, so I'm grateful for that new version, thanks CS-lab!
Now I am starting to explore this auto-leveling feature.
I start by building up the grid, and for doing so I wanted to use Anton's work shown in another thread of this forum, with some personal adaptations to make a grid convenient for the auto-leveling function as explained in the release notes.
But so far, I am having a problem running the gcode in charge of surface scanning the 10 x 10 grid.
I am following Anton's idea for the scanning part, so I have a new screen providing the grid parameters, which generates a gcode program in charge of moving XY to the points and scanning each point using an m42 macro, which code is here (Antons's Work)
https://github.com/Antonowitch/cnc-surface-scan/blob/main/M42.py
But the problem I have is that the program starts working, scans a few points and then I get an exception :
___EXCEPTION.SimCncException: 'Action is not in idle state'
Here is the full stack :
Traceback (most recent call last):
File "/opt/simCNC/profiles/6040Z/scripts/___INIT.py", line 30, in <module>
exec(open(fileName, encoding='utf-8').read())
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<string>", line 49, in <module>
File "/opt/simCNC/profiles/6040Z/scripts/___DEVICE.py", line 248, in executeProbing
return self.comm.sendAndWait( "executeProbing:" + coordMode.name + ':' + str(position[0])+';'+str(position[1])+';'+str(position[2])+';'+str(position[3])+';'+str(position[4])+';'+str(position[5]) + ':' + str(probeIndex) + ':' + str(velocity) ) == "True"
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/simCNC/profiles/6040Z/scripts/___COMM.py", line 189, in sendAndWait
raise SimCncException(":".join(res[1:]))
___EXCEPTION.SimCncException: 'Action is not in idle state'
What does this exception mean ?
Should I understand we cannot use executeProbing from within a running gcode ?
Should I perform the full grid scanning in a python script without using gcode ?
Thanks in advance, tell me if you need more details.
Quote from Christophe Mineau on 17 March 2026, 11:40So no opinion on my question above ?
why is it not possible to perform a grid scan from the Gcode using Mxx macros ?Meanwhile, I implemented my grid scan fully from a python script and it worked OK.
So I could experiment for real the autoleveling feature and I must say it works very well , both on small surfaces and also on larger ones (well the definition of large depends on you machine, mine is only 600x400mm working area) .
My SimCNC app runs on Raspberry Pi 5, I must also say it's for me the best platform I have tried so far (compared to Windows/Mach3 / Windows /SimCNC , Ubuntu SimCNC)
So no opinion on my question above ?
why is it not possible to perform a grid scan from the Gcode using Mxx macros ?
Meanwhile, I implemented my grid scan fully from a python script and it worked OK.
So I could experiment for real the autoleveling feature and I must say it works very well , both on small surfaces and also on larger ones (well the definition of large depends on you machine, mine is only 600x400mm working area) .
My SimCNC app runs on Raspberry Pi 5, I must also say it's for me the best platform I have tried so far (compared to Windows/Mach3 / Windows /SimCNC , Ubuntu SimCNC)
Quote from CS-Lab Support on 19 May 2026, 13:48It is hard to say based on the error message alone. It looks like theexecuteProbingcommand in the M42 macro failed because the controller was not in theIdlestate (for example, it may have been executing another command or Python action, or it could have been in theESTOPstate).It is good to hear that you managed to solve the issue by implementing all probing logic inside a single macro. Thank you as well for the feedback regarding the Raspberry Pi port of simCNC.If you could share how exactly you invoked M42 previously, so that we can try to reproduce the issue, it would help us improve the software in the future 👍
executeProbing command in the M42 macro failed because the controller was not in the Idle state (for example, it may have been executing another command or Python action, or it could have been in the ESTOP state).




















