EMC and EMC2 references

Someone created a wikipedia page for EMC over here: http://en.wikipedia.org/wiki/Enhanced_Machine_Controller

The wikipedia-police have immediately put it on the list of pages to be deleted ("unremarkable", "no third party references", "borderline advert", etc.). So I decided to collect some references. It is best to archive them here also, in case the wikipedia page does get deleted.

There should be a report by Rogier Blom called roughly "Design and development of a real time trajectory planner for the Enhanced Machine Controller", but I wasn't able to find that. It's probably the same document as this one (the pdf has chapter 4->): http://emc.cvs.sourceforge.net/viewvc/emc/emc/doc/segmentqueue.pdf?view=log

Please comment below and/or enhance the wikipedia article if you find more references!

  • Proctor, F. M., and Michaloski, J., "Enhanced Machine Controller Architecture Overview," NIST Internal Report 5331, December 1993. Available online at ftp://129.6.13.104/pub/NISTIR_5331.pdf
  • Albus, J.S., Lumia, R., “The Enhanced Machine Controller (EMC): An Open Architecture Controller for Machine Tools,” Journal of Manufacturing Review, Vol. 7, No. 3, pp. 278-280, September 1994.
  • Fred Proctor, John Michaloski, Will Shackleford, and Sandor Szabo, "Validation of Standard Interfaces for Machine Control", Intelligent Automation and Soft Computing: Trends in Research, Development, and Applications, Volume 2, TSI Press, Albuquerque, NM, 1996, http://www.isd.mel.nist.gov/documents/proctor/isram96/isram96.html
  • Leto et al., "CAD/CAM INTEGRATION FOR NURBS PATH INTERPOLATION ON PC BASED REAL-TIME NUMERICAL CONTROL", 8th INTERNATIONAL CONFERENCE ON ADVANCED MANUFACTURING SYSTEMS AND TECHNOLOGY JUNE 12-13, 2008 UNIVERSITY OF UDINE - ITALY, http://158.110.28.100/amst08/papers/art837759.pdf
  • Glavonjic et al., "Desktop 3-axis parallel kinematic milling machine", The International Journal of Advanced Manufacturing Technology Volume 46, Numbers 1-4, 51-60 (2009), http://dx.doi.org/10.1007/s00170-009-2070-3
  • Milutinovic et al., "Reconfigurable robotic machining system controlled and programmed in a machine tool manner", The International Journal of Advanced Manufacturing Technology, 2010, http://dx.doi.org/10.1007/s00170-010-2888-8

OpenCAMLib from HeeksCNC

I've tried using opencamlib through heekscnc. With a few minor modifications to the ocl_funcs.py script I got it working. Although ocl prints some debug information and a progress bar to the console when run standalone, I couldn't find that window in heekscnc. Even with this small example there are obvious issues with memory management (sometimes 8 Gb wasn't enough!) on either the heekscnc or ocl-side of things (or both!).

On Ubuntu 10.04LTS getting all the bits and pieces, compiling them and installing them was a breeze thanks to this install script. However the GUI feels very "sticky" with the mouse cursor not really going where I want it to go, and the keyboard focus being in surprising places when I want to edit properties. It must be possible to make a GUI that feels good to use with wxgtk, right?

I think currently the inputs and outputs of these two operations, "ZigZag" and "Waterline", are defined in at least three places: ocl itself, the python script ocl_funcs.py, and in the heekscnc c++ GUI code that displays the menus and buttons. Something like introspection or reflection or naked objects would be needed so that a GUI can query the libraries that are present on what operations they offer, what input they need, and what output they produce. If I get my head around some generic-enough GUI ideas I might try writing something myself also. Most probably based on Qt and VTK. In any case the cutting-simulation needs to be driven from a C++ GUI, for performance, I think.

PCB Milling

We have a 1994 LPKF Protomat S91 PCB mill in the lab for making prototype PCBs. Here it was used to cut a circular part (not a PCB) which was first drawn in CorelDraw, then saved in HPGL format, and then opened in BoardMaster which is the program that controls the mill through a quirky serial protocol. I think the original LPKF design has a solenoid for the up/down z-movement of the tool. The solenoid would become unreliable during a long run, because it was getting very hot, so on our mill it has been replaced with a more reliable pneumatic cylinder. The spindle is a Proxxon hand-tool, and tool changes are manual.


Equatorial wedge – base plate

I'm building an equatorial wedge which will transform my new alt/az goto-mount into an equatorial mount. This is the first part which attaches to the tripod. Two smaller side plates will be bolted to this plate and support a similarly shaped tilted plate to which the alt/az head attaches. The design is similar to the "mega wedge pro" (how about that for a product name!).


Radial tool projection

The basic operation when producing waterline-paths is to push the cutter along either the X or Y axis (red and green arrows) into contact with a triangle (cyan lines). That's done through three different functions, one each for the vertices, facet, and edges of the triangle. The vertex test (results shown as red dots) and the facet test (green dots) are straightforward to implement. The edge-test (blue dots) is more involved. The above figure is for a CylCutter where the edge-test is implemented through the vertex-test (thus red dots along the edges), but this figure for a BallCutter shows the colors better:

Blue dots show edge-contacts with the spherical part of the cutter, light-blue dots show edge-contacts with the cylindrical shaft of the cutter.

The vertex test requires only a radius(h) function that returns the radius of the cutter at height h. The facet test needs three parameters (n, nxy, c) for each cutter, which define where the cutter should be located relative to a point which lies on the facet. From the CC-point on the facet we go a distance n along the 3D unit-normal, then a distance nxy along a unit-normal in the XY-plane to find the cutter center. From the cutter center we go down along the z-axis by a distance c to find the CL-point.


Figuring out the (n,nxy,c) parameters for CylCutter and BallCutter is left as an exercise for the reader.

These points are then hooked up in the correct order to produce waterlines like this (CylCutter on the left, BallCutter on the right).

cylcutter_waterlines ballcutter_waterlines

The edge-test for CylCutter reduces to a 2D problem of line-line intersections, while the edge-test for BallCutter can be done by intersecting a cylinder/tube around the edge with a line. The filleted/toroidal/BullCutter edge-test is much harder. Here I've just implemented the special case where the edge is horizontal and the solution is easy to find analytically. The general case where the edge slopes up or down  requires an iterative solution to either a quartic or the offset-ellipse problem.