Hermle/Heidenhain DNC System

Back to Home


A python application for improving the usability of our legacy CNC Machine

Our CNC milling machine at home is a Hermle UWF1000, with Heidenhain TNC355 control, circa 1995. It's obviously fairly old, and the method of getting programs onto the machine was fairly tedious. A computer can communicate with the machine via a serial port and an RS232 protocol, which is fairly typical of machines of the era. A server program running on the computer, made by Heidenhain would serve programs from a directory it monitored to the CNC machine when requested. However, the programs had to be identified only as numbers. This was annoying because it forced you to rename your compiled code to be some random number, loosing human readability and making it very hard to know which program was which.

To solve this issue I wrote a simple piece of code that looked at a second directory filled with human-readable programs, named descriptively, and would then copy those files to a numerically-named file in the Heidenhain TNC Server directory. A GUI would list all the programs, and display the mapping of the names to the numbers. Viewing that GUI, the operator can quickly look up what program number corresponds to the program they want, and enter that at the machine control. The program will monitor for any new files added to the directory, and will also delete old numbered files if the corresponding human-readable file is deleted, freeing up the number to be used for another program.

To solve this issue I wrote a simple piece of code that looked at a second directory filled with human-readable programs, named descriptively, and would then copy those files to a numerically-named file in the Heidenhain TNC Server directory. A simple tkinter GUI would list all the programs, and display the mapping of the names to the numbers. Viewing that GUI, the operator can quickly look up what program number corresponds to the program they want, and enter that at the machine control. The program will monitor for any new files added to the directory, and will also delete old numbered files if the corresponding human-readable file is deleted, freeing up the number to be used for another program.

Code for this program can be found at here