MODAL_GROUP constant refactor
This commit is contained in:
Peter Boin 2017-07-06 22:20:04 +10:00
parent c7578de0d7
commit e913c5a4ba
2 changed files with 34 additions and 34 deletions

View File

@ -65,9 +65,9 @@ from .words import Word
# User Defined (Group 10) M100-M199 # User Defined (Group 10) M100-M199
# #
MODAL_GROUP_NUM = { MODAL_GROUP_MAP = {
# "G" codes # "G" codes
'motion': 1 'motion': 1,
'plane_selection': 2, 'plane_selection': 2,
'distance': 3, 'distance': 3,
'arc_ijk_distance': 4, 'arc_ijk_distance': 4,
@ -78,7 +78,7 @@ MODAL_GROUP_NUM = {
'canned_cycles_return': 10, 'canned_cycles_return': 10,
'coordinate_system': 12, 'coordinate_system': 12,
'control_mode': 13, 'control_mode': 13,
'spindle_speed': 14, 'spindle_speed_mode': 14,
'lathe_diameter': 15, 'lathe_diameter': 15,
# "M" codes # "M" codes
@ -236,7 +236,7 @@ class GCode(object):
class GCodeMotion(GCode): class GCodeMotion(GCode):
param_letters = set('XYZABCUVW') param_letters = set('XYZABCUVW')
modal_group = MODAL_GROUP_NUM['motion'] modal_group = MODAL_GROUP_MAP['motion']
exec_order = 241 exec_order = 241
class GCodeRapidMove(GCodeMotion): class GCodeRapidMove(GCodeMotion):
@ -332,7 +332,7 @@ class GCodeCancelCannedCycle(GCodeMotion):
class GCodeCannedCycle(GCode): class GCodeCannedCycle(GCode):
param_letters = set('XYZUVW') param_letters = set('XYZUVW')
modal_group = MODAL_GROUP_NUM['motion'] modal_group = MODAL_GROUP_MAP['motion']
exec_order = 241 exec_order = 241
class GCodeDrillingCycle(GCodeCannedCycle): class GCodeDrillingCycle(GCodeCannedCycle):
@ -391,36 +391,36 @@ class GCodeDistanceMode(GCode):
class GCodeAbsoluteDistanceMode(GCodeDistanceMode): class GCodeAbsoluteDistanceMode(GCodeDistanceMode):
"""G90: Absolute Distance Mode""" """G90: Absolute Distance Mode"""
word_key = Word('G', 90) word_key = Word('G', 90)
modal_group = MODAL_GROUP_NUM['distance'] modal_group = MODAL_GROUP_MAP['distance']
class GCodeIncrementalDistanceMode(GCodeDistanceMode): class GCodeIncrementalDistanceMode(GCodeDistanceMode):
"""G91: Incremental Distance Mode""" """G91: Incremental Distance Mode"""
word_key = Word('G', 91) word_key = Word('G', 91)
modal_group = MODAL_GROUP_NUM['distance'] modal_group = MODAL_GROUP_MAP['distance']
class GCodeAbsoluteArcDistanceMode(GCodeDistanceMode): class GCodeAbsoluteArcDistanceMode(GCodeDistanceMode):
"""G90.1: Absolute Distance Mode for Arc IJK Parameters""" """G90.1: Absolute Distance Mode for Arc IJK Parameters"""
word_key = Word('G', 90.1) word_key = Word('G', 90.1)
modal_group = MODAL_GROUP_NUM['arc_ijk_distance'] modal_group = MODAL_GROUP_MAP['arc_ijk_distance']
class GCodeIncrementalArcDistanceMode(GCodeDistanceMode): class GCodeIncrementalArcDistanceMode(GCodeDistanceMode):
"""G91.1: Incremental Distance Mode for Arc IJK Parameters""" """G91.1: Incremental Distance Mode for Arc IJK Parameters"""
word_key = Word('G', 91.1) word_key = Word('G', 91.1)
modal_group = MODAL_GROUP_NUM['arc_ijk_distance'] modal_group = MODAL_GROUP_MAP['arc_ijk_distance']
class GCodeLatheDiameterMode(GCodeDistanceMode): class GCodeLatheDiameterMode(GCodeDistanceMode):
"""G7: Lathe Diameter Mode""" """G7: Lathe Diameter Mode"""
word_key = Word('G', 7) word_key = Word('G', 7)
modal_group = MODAL_GROUP_NUM['lathe_diameter'] modal_group = MODAL_GROUP_MAP['lathe_diameter']
class GCodeLatheRadiusMode(GCodeDistanceMode): class GCodeLatheRadiusMode(GCodeDistanceMode):
"""G8: Lathe Radius Mode""" """G8: Lathe Radius Mode"""
word_key = Word('G', 8) word_key = Word('G', 8)
modal_group = MODAL_GROUP_NUM['lathe_diameter'] modal_group = MODAL_GROUP_MAP['lathe_diameter']
# ======================= Feed Rate Mode ======================= # ======================= Feed Rate Mode =======================
@ -428,7 +428,7 @@ class GCodeLatheRadiusMode(GCodeDistanceMode):
# G93, G94, G95 Feed Rate Mode # G93, G94, G95 Feed Rate Mode
class GCodeFeedRateMode(GCode): class GCodeFeedRateMode(GCode):
modal_group = MODAL_GROUP_NUM['feed_rate_mode'] modal_group = MODAL_GROUP_MAP['feed_rate_mode']
exec_order = 30 exec_order = 30
class GCodeInverseTimeMode(GCodeFeedRateMode): class GCodeInverseTimeMode(GCodeFeedRateMode):
@ -460,20 +460,20 @@ class GCodeStartSpindleCW(GCodeSpindle):
"""M3: Start Spindle Clockwise""" """M3: Start Spindle Clockwise"""
#param_letters = set('S') # S is it's own gcode, makes no sense to be here #param_letters = set('S') # S is it's own gcode, makes no sense to be here
word_key = Word('M', 3) word_key = Word('M', 3)
modal_group = MODAL_GROUP_NUM['spindle'] modal_group = MODAL_GROUP_MAP['spindle']
class GCodeStartSpindleCCW(GCodeSpindle): class GCodeStartSpindleCCW(GCodeSpindle):
"""M4: Start Spindle Counter-Clockwise""" """M4: Start Spindle Counter-Clockwise"""
#param_letters = set('S') # S is it's own gcode, makes no sense to be here #param_letters = set('S') # S is it's own gcode, makes no sense to be here
word_key = Word('M', 4) word_key = Word('M', 4)
modal_group = MODAL_GROUP_NUM['spindle'] modal_group = MODAL_GROUP_MAP['spindle']
class GCodeStopSpindle(GCodeSpindle): class GCodeStopSpindle(GCodeSpindle):
"""M5: Stop Spindle""" """M5: Stop Spindle"""
#param_letters = set('S') # S is it's own gcode, makes no sense to be here #param_letters = set('S') # S is it's own gcode, makes no sense to be here
word_key = Word('M', 5) word_key = Word('M', 5)
modal_group = MODAL_GROUP_NUM['spindle'] modal_group = MODAL_GROUP_MAP['spindle']
class GCodeOrientSpindle(GCodeSpindle): class GCodeOrientSpindle(GCodeSpindle):
@ -485,14 +485,14 @@ class GCodeSpindleConstantSurfaceSpeedMode(GCodeSpindle):
"""G96: Spindle Constant Surface Speed""" """G96: Spindle Constant Surface Speed"""
param_letters = set('DS') param_letters = set('DS')
word_key = Word('G', 96) word_key = Word('G', 96)
modal_group = MODAL_GROUP_NUM['spindle_speed'] modal_group = MODAL_GROUP_MAP['spindle_speed_mode']
class GCodeSpindleRPMMode(GCodeSpindle): class GCodeSpindleRPMMode(GCodeSpindle):
"""G97: Spindle RPM Speed""" """G97: Spindle RPM Speed"""
param_letters = set('D') param_letters = set('D')
word_key = Word('G', 97) word_key = Word('G', 97)
modal_group = MODAL_GROUP_NUM['spindle_speed'] modal_group = MODAL_GROUP_MAP['spindle_speed_mode']
@ -501,7 +501,7 @@ class GCodeSpindleRPMMode(GCodeSpindle):
# M7, M8, M9 Coolant Control # M7, M8, M9 Coolant Control
class GCodeCoolant(GCode): class GCodeCoolant(GCode):
modal_group = MODAL_GROUP_NUM['coolant'] modal_group = MODAL_GROUP_MAP['coolant']
exec_order = 110 exec_order = 110
@ -528,7 +528,7 @@ class GCodeCoolantOff(GCodeCoolant):
# G49 Cancel Tool Length Compensation # G49 Cancel Tool Length Compensation
class GCodeToolLength(GCode): class GCodeToolLength(GCode):
modal_group = MODAL_GROUP_NUM['tool_length_offset'] modal_group = MODAL_GROUP_MAP['tool_length_offset']
exec_order = 180 exec_order = 180
@ -561,7 +561,7 @@ class GCodeCancelToolLengthOffset(GCodeToolLength):
# M60 Pallet Change Pause # M60 Pallet Change Pause
class GCodeProgramControl(GCode): class GCodeProgramControl(GCode):
modal_group = MODAL_GROUP_NUM['stopping'] modal_group = MODAL_GROUP_MAP['stopping']
exec_order = 250 exec_order = 250
class GCodePauseProgram(GCodeProgramControl): class GCodePauseProgram(GCodeProgramControl):
@ -594,7 +594,7 @@ class GCodePalletChangePause(GCodeProgramControl):
# G20, G21 Units # G20, G21 Units
class GCodeUnit(GCode): class GCodeUnit(GCode):
modal_group = MODAL_GROUP_NUM['units'] modal_group = MODAL_GROUP_MAP['units']
exec_order = 160 exec_order = 160
@ -614,7 +614,7 @@ class GCodeUseMillimeters(GCodeUnit):
# G17 - G19.1 Plane Select # G17 - G19.1 Plane Select
class GCodePlaneSelect(GCode): class GCodePlaneSelect(GCode):
modal_group = MODAL_GROUP_NUM['plane_selection'] modal_group = MODAL_GROUP_MAP['plane_selection']
exec_order = 150 exec_order = 150
@ -655,7 +655,7 @@ class GCodeSelectVWPlane(GCodePlaneSelect):
# G41.1, G42.1 D L Dynamic Cutter Compensation # G41.1, G42.1 D L Dynamic Cutter Compensation
class GCodeCutterRadiusComp(GCode): class GCodeCutterRadiusComp(GCode):
modal_group = MODAL_GROUP_NUM['cutter_diameter_comp'] modal_group = MODAL_GROUP_MAP['cutter_diameter_comp']
exec_order = 170 exec_order = 170
@ -694,7 +694,7 @@ class GCodeDynamicCutterCompRight(GCodeCutterRadiusComp):
# G64 P Q Path Blending # G64 P Q Path Blending
class GCodePathControlMode(GCode): class GCodePathControlMode(GCode):
modal_group = MODAL_GROUP_NUM['control_mode'] modal_group = MODAL_GROUP_MAP['control_mode']
exec_order = 200 exec_order = 200
@ -719,7 +719,7 @@ class GCodePathBlendingMode(GCodePathControlMode):
# G98 Canned Cycle Return Level # G98 Canned Cycle Return Level
class GCodeCannedReturnMode(GCode): class GCodeCannedReturnMode(GCode):
modal_group = MODAL_GROUP_NUM['canned_cycles_return'] modal_group = MODAL_GROUP_MAP['canned_cycles_return']
exec_order = 220 exec_order = 220
@ -749,7 +749,7 @@ class GCodeFeedRate(GCodeOtherModal):
@classmethod @classmethod
def word_matches(cls, w): def word_matches(cls, w):
return w.letter == 'F' return w.letter == 'F'
modal_group = MODAL_GROUP_NUM['feed_rate'] modal_group = MODAL_GROUP_MAP['feed_rate']
exec_order = 40 exec_order = 40
@ -759,7 +759,7 @@ class GCodeSpindleSpeed(GCodeOtherModal):
def word_matches(cls, w): def word_matches(cls, w):
return w.letter == 'S' return w.letter == 'S'
# Modal Group: (see description in GCodeFeedRate) # Modal Group: (see description in GCodeFeedRate)
modal_group = MODAL_GROUP_NUM['spindle_speed'] modal_group = MODAL_GROUP_MAP['spindle_speed']
exec_order = 50 exec_order = 50
@ -769,21 +769,21 @@ class GCodeSelectTool(GCodeOtherModal):
def word_matches(cls, w): def word_matches(cls, w):
return w.letter == 'T' return w.letter == 'T'
# Modal Group: (see description in GCodeFeedRate) # Modal Group: (see description in GCodeFeedRate)
modal_group = MODAL_GROUP_NUM['tool'] modal_group = MODAL_GROUP_MAP['tool']
exec_order = 60 exec_order = 60
class GCodeSpeedAndFeedOverrideOn(GCodeOtherModal): class GCodeSpeedAndFeedOverrideOn(GCodeOtherModal):
"""M48: Speed and Feed Override Control On""" """M48: Speed and Feed Override Control On"""
word_key = Word('M', 48) word_key = Word('M', 48)
modal_group = MODAL_GROUP_NUM['override_switches'] modal_group = MODAL_GROUP_MAP['override_switches']
exec_order = 120 exec_order = 120
class GCodeSpeedAndFeedOverrideOff(GCodeOtherModal): class GCodeSpeedAndFeedOverrideOff(GCodeOtherModal):
"""M49: Speed and Feed Override Control Off""" """M49: Speed and Feed Override Control Off"""
word_key = Word('M', 49) word_key = Word('M', 49)
modal_group = MODAL_GROUP_NUM['override_switches'] modal_group = MODAL_GROUP_MAP['override_switches']
exec_order = 120 exec_order = 120
@ -830,7 +830,7 @@ class GCodeSelectCoordinateSystem(GCodeOtherModal):
@classmethod @classmethod
def word_matches(cls, w): def word_matches(cls, w):
return (w.letter == 'G') and (w.value in [54, 55, 56, 57, 58, 59, 59.1, 59.2, 59.3]) return (w.letter == 'G') and (w.value in [54, 55, 56, 57, 58, 59, 59.1, 59.2, 59.3])
modal_group = MODAL_GROUP_NUM['coordinate_system'] modal_group = MODAL_GROUP_MAP['coordinate_system']
exec_order = 190 exec_order = 190
@ -997,7 +997,7 @@ class GCodeUserDefined(GCodeNonModal):
#def word_matches(cls, w): #def word_matches(cls, w):
# return (w.letter == 'M') and (101 <= w.value <= 199) # return (w.letter == 'M') and (101 <= w.value <= 199)
exec_order = 130 exec_order = 130
modal_group = MODAL_GROUP_NUM['user_defined'] modal_group = MODAL_GROUP_MAP['user_defined']
# ======================= Utilities ======================= # ======================= Utilities =======================

View File

@ -49,12 +49,12 @@ class TestGCodeModalGroups(unittest.TestCase):
# Table 6. M-Code Modal Groups # Table 6. M-Code Modal Groups
# MODAL GROUP MEANING MEMBER WORDS # MODAL GROUP MEANING MEMBER WORDS
table_rows += ''' table_rows += re.sub(r'\(Group (\d+)\)', r'(Group 10\1)', '''
Stopping (Group 4) M0, M1, M2, M30, M60 Stopping (Group 4) M0, M1, M2, M30, M60
Spindle (Group 7) M3, M4, M5 Spindle (Group 7) M3, M4, M5
Coolant (Group 8) M7, M8, M9 Coolant (Group 8) M7, M8, M9
Override Switches (Group 9) M48, M49 Override Switches (Group 9) M48, M49
''' ''') # groups += 100 (to distinguish "M" GCodes from "G" GCodes)
for row in table_rows.split('\n'): for row in table_rows.split('\n'):
match = re.search(r'^\s*(?P<title>.*)\s*\(Group (?P<group>\d+)\)\s*(?P<words>.*)$', row, re.I) match = re.search(r'^\s*(?P<title>.*)\s*\(Group (?P<group>\d+)\)\s*(?P<words>.*)$', row, re.I)