mirror of
https://git.mirrors.martin98.com/https://github.com/petaflot/pygcode
synced 2025-08-14 09:25:54 +08:00
-derps
MODAL_GROUP constant refactor
This commit is contained in:
parent
c7578de0d7
commit
e913c5a4ba
@ -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 =======================
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user