HeeksCNC

I just got my MPCNC up and running but I had a hard time getting CAM software that I both liked and could afford. I started with ESTLCam but the interface didn’t make sense to me and it seemed to crash on me often creating a big annoyance when the demo period timeout increased quickly due to the repeated crashes. Maybe worth the $50 in the long run, but my problems with it drove me to keep looking. Other options gave me difficulty as well. Either overly complicated, too expensive or just didn’t work for me (CamBam, Fusion, MasterCam, etc).

I ended up settling on HeeksCNC for now. The interface just seemed to click with me. But I had a problem getting usable gcode from it b/c there were no suitable post processors. The resulting code seemed close but it wasn’t right. I looked into it and tweaked an included post processor to support Marlin firmware.

If anyone’s interested, I created a file called marlin.py in C:\Program Files (x86)\HeeksCNC 1.1\HeeksCNC\nc and modified machines.xml in the same directory to add the marlin post processor. This works with the demo and the full software.

I realized it’s somewhat limited but IMHO well worth the $15!

Chris

marlin.py:

#marlin.py based on emc2b.py

import nc
import iso_modal
import math
import datetime
import time

now = datetime.datetime.now()

class Creator(iso_modal.Creator):
    def __init__(self):
        iso_modal.Creator.__init__(self)
        self.output_block_numbers = False
        self.output_tool_definitions = False
        self.output_g43_on_tool_change_line = True
        self.g0123_modal = False
        self.drill_modal = False
        self.up_z = 20

    def SPACE(self):
        if self.start_of_line == True:
            self.start_of_line = False
            return ''
        else:
            return ' '

    # Marlin doesn't support these M commands
    #  so override the defines to not use them
    def SPINDLE_CW(self): return('')
    def SPINDLE_CCW(self): return('')
    def COOLANT_OFF(self): return('')
    def COOLANT_MIST(self): return('')
    def COOLANT_FLOOD(self): return('')
    def INTERNAL_COOLANT_ON(self): return('')
    def INTERNAL_COOLANT_OFF(self): return('')

    def PROGRAM(self): return None
    def PROGRAM_END(self): return( 'T0' + self.SPACE() + 'M06' + self.SPACE() + 'M02')
        
############################################################################
## Begin Program 

    def program_begin(self, id, comment):
        if (self.useCrc == False):
            self.write( ('(Created with Marlin post processor ' + str(now.strftime("%Y/%m/%d %H:%M")) + ')' + '\n') )
        else:  
            self.write( ('(Created with emc2b Cutter Radius Compensation post processor ' + str(now.strftime("%Y/%m/%d %H:%M")) + ')' + '\n') )

# ADD CUSTOM START CODES HERE
        self.write('(--- Start Custom Startup Code ---)\n')
        self.rapid(0,0,15,0,0,0)  # Set the start point
        self.write('(--- End Custom Startup Code ---)\n')

        iso_modal.Creator.program_begin(self, id, comment)

nc.creator = Creator()

machines.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<Machine post="emc2b" reader="iso_read" suffix=".ngc" description="LinuxCNC"/>
<Machine post="siegkx1" reader="iso_read" suffix=".tap" description="Mach3 Machine Controller"/>
<Machine post="DeckelFP4Ma" reader="iso_read" suffix=".ngc" description="Deckel FP4Ma"/>
<Machine post="marlin" reader="iso_read" suffix=".ngc" description="RepRap Marlin"/>

1 Like

Nice, I didn’t even know where to start so I abandoned heekscnc really fast once I got to the post processor part. I used cambam until the trial expired after that.

This sounds very promising. I googled HeeksCNC and found some YouTube videos, I think I see your reasoning for the easier user experience.

Currently, I’m trying to bring my machine to life. Once running and stable, I may swing back and see what your doing and give it a try.

Congratulation on the solution.

Richard

Guys, I haven’t tried the gcode features in onShape yet, but I really like the ui for modeling in it. I have been a user of parametric, feature-based cad software for about 15 years now, and onShape fits right in with that.

It can create toolpaths, so I think a post file is all it would need.

Onshape has been pretty good for me as well, but I am a little afraid of their “app” structure. A few paid Apps can add up very quickly, I hope it works out well, I am afraid we just won’t know for a while to see if the developers stick around and the kind of pricing that shakes out of this whole thing.