We appreciate the feedback. This has definitely been a process, and a lot of work. I like the panels you laid out
We are working on a GUI and would love to collaborate, or just have more than one available if that's the way you want to go. We are trying to make things as "real" as possible. To that end, we are following Thomas Kramer's RS274NGC v3 standard for Gcode that can be found here: http://www.isd.mel.nist.gov/documents/kramer/RS274NGC_3.pdf We are also following "CNC Programming Handbook, Third Edition" by Peter Smid. This is as close to a reference manual as exists for CNC control, and is considered the gold standard for CNC machines by many in the field. You can find it on Amazon new and used. The book has the conventions for naming, control layout and behaviors, and other aspects of making realistic controls. Some other info that might be useful may be found on the project wiki under: http://www.synthetos.com/wiki/index.php?title=Projects:TinyG-Developer-Info:
With that in mind, here are some comments (rather lengthy - I'll try to break it up). These are based on the latest version on the github, version 0.92 (Crocs)
- TinyG handles 6 axes; X, Y, Z, A, B, C. The 0.9x versions allow mapping motors to axes to support common (and uncommon) machine configurations, e.g. XYZA, XYZC, XZC, and dual gantry machines like the lumenlabs (XYYZ). While the board supports 4 motors, the firmware design allows multiple boards to be slaved together for more than 4 axis control. Displays should take these mappings and all 6 axes into account. A common XYZA like you have is a good starting point.
- As of 0.92 the firmware can return a running status report. I typically set it to respond every 50ms when running, and at the end of each gcode block. This is designed to update the display. It returns a line in JSON format like below. Units are in prevailing mode. In the example mm=1, so units are in mm and mm/min. If ABC axes were used it would also return an "abc": tuple, returning in degrees.
tinyg[mm] ok> g0 x10
tinyg[mm] ok> {"ln":204, "xyz":[0.017,0.000,0.000], "vel":28.88, "mm":1}
{"ln":204, "xyz":[0.136,0.000,0.000], "vel":121.68, "mm":1}
{"ln":204, "xyz":[0.648,0.000,0.000], "vel":537.52, "mm":1}
{"ln":204, "xyz":[1.745,0.000,0.000], "vel":796.72, "mm":1}
{"ln":204, "xyz":[3.200,0.000,0.000], "vel":991.92, "mm":1}
{"ln":204, "xyz":[4.486,0.000,0.000], "vel":800.00, "mm":1}
{"ln":204, "xyz":[5.771,0.000,0.000], "vel":800.00, "mm":1}
{"ln":204, "xyz":[7.056,0.000,0.000], "vel":798.56, "mm":1}
{"ln":204, "xyz":[8.277,0.000,0.000], "vel":715.36, "mm":1}
{"ln":204, "xyz":[9.253,0.000,0.000], "vel":504.16, "mm":1}
{"ln":204, "xyz":[9.801,0.000,0.000], "vel":219.04, "mm":1}
{"ln":204, "xyz":[9.983,0.000,0.000], "vel":46.24, "mm":1}
{"ln":204, "xyz":[10.000,0.000,0.000], "vel": 0.16, "mm":1}
- Some comments on the buttons, and some naming conventions from Smid:
If "Stop" is a command to pause program execution it's CNC name is "Feedhold". Not very intuitive, but accurate.
"Resume" is "Cycle Start". This starts the program as well as resumes after feedholds. Perhaps this is also the Start Process button
TinyG currently does not do flood. We can add this in if people need it.
Not sure what Set Outputs and Read inputs does
You will want a Zero button to set the current position to 0,0,0
- General items
We are maintaining close contact with the grbl project and want any GUI we do to be able to work with both grbl and TinyG. This involves some compatibility measures that are too lengthy to go into here.
What language / framework are you using or planning and what are you cross-platform goals? We are aiming for full cross-platfom support. many current GUIs suffer from very difficult installations due to this. Serial libs are different, UI is different, etc. This also deserves further discussion.
Thanks for the work on this. Looks great.
- Alden