Skip to content

Instantly share code, notes, and snippets.

@TurBoss
Created December 21, 2016 16:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TurBoss/a9a073735846fa85efc36cc434ca7c1e to your computer and use it in GitHub Desktop.
Save TurBoss/a9a073735846fa85efc36cc434ca7c1e to your computer and use it in GitHub Desktop.
A Heidenhain 530 postprocesor for heekscnc blendercam and freecad
################################################################################
# heiden.py
#
# Post for heidenhain
#
# TurBoss 01/07/2016
#
################################################################################
from . import nc
from . import iso
import math
from .format import Format
from .format import *
class Creator(iso.Creator):
def __init__(self):
iso.Creator.__init__(self)
self.program_id = 0
self.n = 0
self.t = 0
self.fmt = Format()
self.absolute_flag = True
self.x = 0.0
self.y = 0.0
self.z = 0.0
self.shift_x = 0.0
self.shift_y = 0.0
self.shift_z = 0.0
############################################################################
## Codes
def SPACE(self): return(' ')
def NEW_LINE(self): return('\n')
def BLOCK(self): return('%i')
def COMMENT(self,comment): return( (';%s' % comment ) )
def BEGIN_PGM(self): return('BEGIN PGM %i')
def END_PGM(self): return('END PGM %i')
def TOOL(self): return('TOOL CALL %i Z')
def METRIC(self): return('MM')
def RAPID(self): return('L')
def FEED(self): return('L')
def ARC_CC(self): return('CC')
def ARC_C(self): return('C')
def ARC_CW(self): return('DR-')
def ARC_CCW(self): return('DR+')
def X(self): return('X')
def Y(self): return('Y')
def Z(self): return('Z')
############################################################################
## Internals
def write_blocknum(self):
self.write(self.BLOCK() % self.n)
self.n += 1
def write_spindle(self):
self.s.write(self)
self.write(self.NEW_LINE())
############################################################################
## Programs
def program_begin(self, id, name=''):
self.program_id = id
self.write_blocknum()
self.write(self.SPACE())
self.write(self.BEGIN_PGM() % self.program_id)
self.write(self.SPACE())
self.write(self.METRIC())
self.write(self.NEW_LINE())
def program_end(self):
self.write_blocknum()
self.write(self.SPACE())
self.write(self.END_PGM() % self.program_id)
self.write(self.SPACE())
self.write(self.METRIC())
self.write(self.NEW_LINE())
############################################################################
## Settings
def absolute(self):
pass
def metric(self):
pass
def set_plane(self, plane):
pass
############################################################################
## Tools
def tool_change(self, id):
self.t = id
self.write_blocknum()
self.write(self.SPACE())
self.write(self.TOOL() % self.t)
############################################################################
## Moves
def rapid(self, x=None, y=None, z=None, a=None, b=None, c=None ):
self.write_blocknum()
self.write(self.SPACE())
self.write(self.RAPID())
self.write_preps()
if (x != None):
dx = x - self.x
if (self.absolute_flag ):
self.write(self.SPACE() + self.X() + (self.fmt.string(x + self.shift_x)))
else:
self.write(self.SPACE() + self.X() + (self.fmt.string(dx)))
self.x = x
if (y != None):
dy = y - self.y
if (self.absolute_flag ):
self.write(self.SPACE() + self.Y() + (self.fmt.string(y + self.shift_y)))
else:
self.write(self.SPACE() + self.Y() + (self.fmt.string(dy)))
self.y = y
if (z != None):
dz = z - self.z
if (self.absolute_flag ):
self.write(self.SPACE() + self.Z() + (self.fmt.string(z + self.shift_z)))
else:
self.write(self.SPACE() + self.Z() + (self.fmt.string(dz)))
self.z = z
self.write_spindle()
self.write_misc()
def feed(self, x=None, y=None, z=None, a=None, b=None, c=None):
if self.same_xyz(x, y, z): return
self.write_blocknum()
self.write(self.SPACE())
self.write(self.FEED())
dx = dy = dz = 0
if (x != None):
dx = x - self.x
if (self.absolute_flag ):
self.write(self.SPACE() + self.X() + (self.fmt.string(x + self.shift_x)))
else:
self.write(self.SPACE() + self.X() + (self.fmt.string(dx)))
self.x = x
if (y != None):
dy = y - self.y
if (self.absolute_flag ):
self.write(self.SPACE() + self.Y() + (self.fmt.string(y + self.shift_y)))
else:
self.write(self.SPACE() + self.Y() + (self.fmt.string(dy)))
self.y = y
if (z != None):
dz = z - self.z
if (self.absolute_flag ):
self.write(self.SPACE() + self.Z() + (self.fmt.string(z + self.shift_z)))
else:
self.write(self.SPACE() + self.Z() + (self.fmt.string(dz)))
self.z = z
self.write_feedrate()
self.write_spindle()
self.write_misc()
############################################################################
## Misc
def comment(self, text):
self.write((self.COMMENT(text) + '\n'))
nc.creator = Creator()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment