You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
REGEX_CODE=re.compile(r'^\s*\d+(\.\d)?') # float, but can't be negative
25
24
26
-
# Value cleaning functions
27
-
def_clean_codestr(value):
28
-
ifvalue<10:
29
-
return"0%g"%value
30
-
return"%g"%value
25
+
defCLASS_NUMBER(value):
26
+
ifisinstance(value, (int, float)):
27
+
returnvalue
28
+
if'.'invalue:
29
+
returnfloat(value)
30
+
returnint(value)
31
31
32
+
# Value cleaning functions
32
33
CLEAN_NONE=lambdav: v
33
34
34
-
defCLEAN_FLOAT(v):
35
+
defCLEAN_NUMBER(v):
36
+
ifisinstance(v, int):
37
+
returnstr(v)
35
38
fstr="{0:g}".format(round(v, 3))
36
39
if'.'notinfstr:
37
40
returnfstr+'.'
38
41
returnfstr
39
-
CLEAN_CODE=_clean_codestr
42
+
CLEAN_CODE=lambdav: '{:02}'.format(v)
40
43
CLEAN_INT=lambdav: "%g"%v
41
44
42
45
WORD_MAP= {
@@ -45,74 +48,74 @@ def CLEAN_FLOAT(v):
45
48
46
49
# Rotational Axes
47
50
'A': WordType(
48
-
cls=float,
49
-
value_regex=REGEX_FLOAT,
51
+
cls=CLASS_NUMBER,
52
+
value_regex=REGEX_NUMBER,
50
53
description="Absolute or incremental position of A axis (rotational axis around X axis)",
51
-
clean_value=CLEAN_FLOAT,
54
+
clean_value=CLEAN_NUMBER,
52
55
),
53
56
'B': WordType(
54
-
cls=float,
55
-
value_regex=REGEX_FLOAT,
57
+
cls=CLASS_NUMBER,
58
+
value_regex=REGEX_NUMBER,
56
59
description="Absolute or incremental position of B axis (rotational axis around Y axis)",
57
-
clean_value=CLEAN_FLOAT,
60
+
clean_value=CLEAN_NUMBER,
58
61
),
59
62
'C': WordType(
60
-
cls=float,
61
-
value_regex=REGEX_FLOAT,
63
+
cls=CLASS_NUMBER,
64
+
value_regex=REGEX_NUMBER,
62
65
description="Absolute or incremental position of C axis (rotational axis around Z axis)",
63
-
clean_value=CLEAN_FLOAT,
66
+
clean_value=CLEAN_NUMBER,
64
67
),
65
68
'D': WordType(
66
-
cls=float,
67
-
value_regex=REGEX_FLOAT,
69
+
cls=CLASS_NUMBER,
70
+
value_regex=REGEX_NUMBER,
68
71
description="Defines diameter or radial offset used for cutter compensation. D is used for depth of cut on lathes. It is used for aperture selection and commands on photoplotters.",
69
-
clean_value=CLEAN_FLOAT,
72
+
clean_value=CLEAN_NUMBER,
70
73
),
71
74
# Feed Rates
72
75
'E': WordType(
73
-
cls=float,
74
-
value_regex=REGEX_FLOAT,
76
+
cls=CLASS_NUMBER,
77
+
value_regex=REGEX_NUMBER,
75
78
description="Precision feedrate for threading on lathes",
76
-
clean_value=CLEAN_FLOAT,
79
+
clean_value=CLEAN_NUMBER,
77
80
),
78
81
'F': WordType(
79
-
cls=float,
80
-
value_regex=REGEX_FLOAT,
82
+
cls=CLASS_NUMBER,
83
+
value_regex=REGEX_NUMBER,
81
84
description="Feedrate",
82
-
clean_value=CLEAN_FLOAT,
85
+
clean_value=CLEAN_NUMBER,
83
86
),
84
87
# G-Codes
85
88
'G': WordType(
86
-
cls=float,
89
+
cls=CLASS_NUMBER,
87
90
value_regex=REGEX_CODE,
88
91
description="Address for preparatory commands",
89
-
clean_value=CLEAN_CODE,
92
+
clean_value=CLEAN_NONE,
90
93
),
91
94
# Tool Offsets
92
95
'H': WordType(
93
-
cls=float,
94
-
value_regex=REGEX_FLOAT,
96
+
cls=CLASS_NUMBER,
97
+
value_regex=REGEX_NUMBER,
95
98
description="Defines tool length offset; Incremental axis corresponding to C axis (e.g., on a turn-mill)",
96
-
clean_value=CLEAN_FLOAT,
99
+
clean_value=CLEAN_NUMBER,
97
100
),
98
101
# Arc radius center coords
99
102
'I': WordType(
100
-
cls=float,
101
-
value_regex=REGEX_FLOAT,
103
+
cls=CLASS_NUMBER,
104
+
value_regex=REGEX_NUMBER,
102
105
description="Defines arc center in X axis for G02 or G03 arc commands. Also used as a parameter within some fixed cycles.",
103
-
clean_value=CLEAN_FLOAT,
106
+
clean_value=CLEAN_NUMBER,
104
107
),
105
108
'J': WordType(
106
-
cls=float,
107
-
value_regex=REGEX_FLOAT,
109
+
cls=CLASS_NUMBER,
110
+
value_regex=REGEX_NUMBER,
108
111
description="Defines arc center in Y axis for G02 or G03 arc commands. Also used as a parameter within some fixed cycles.",
109
-
clean_value=CLEAN_FLOAT,
112
+
clean_value=CLEAN_NUMBER,
110
113
),
111
114
'K': WordType(
112
-
cls=float,
113
-
value_regex=REGEX_FLOAT,
115
+
cls=CLASS_NUMBER,
116
+
value_regex=REGEX_NUMBER,
114
117
description="Defines arc center in Z axis for G02 or G03 arc commands. Also used as a parameter within some fixed cycles, equal to L address.",
115
-
clean_value=CLEAN_FLOAT,
118
+
clean_value=CLEAN_NUMBER,
116
119
),
117
120
# Loop Count
118
121
'L': WordType(
@@ -123,10 +126,10 @@ def CLEAN_FLOAT(v):
123
126
),
124
127
# Miscellaneous Function
125
128
'M': WordType(
126
-
cls=float,
129
+
cls=CLASS_NUMBER,
127
130
value_regex=REGEX_CODE,
128
131
description="Miscellaneous function",
129
-
clean_value=CLEAN_CODE,
132
+
clean_value=CLEAN_NONE,
130
133
),
131
134
# Line Number
132
135
'N': WordType(
@@ -144,31 +147,31 @@ def CLEAN_FLOAT(v):
144
147
),
145
148
# Parameter (arbitrary parameter)
146
149
'P': WordType(
147
-
cls=float, # parameter is often an integer, but can be a float
148
-
value_regex=REGEX_FLOAT,
150
+
cls=CLASS_NUMBER, # parameter is often an integer, but can be a float
151
+
value_regex=REGEX_NUMBER,
149
152
description="Serves as parameter address for various G and M codes",
150
-
clean_value=CLEAN_FLOAT,
153
+
clean_value=CLEAN_NUMBER,
151
154
),
152
155
# Peck increment
153
156
'Q': WordType(
154
-
cls=float,
155
-
value_regex=REGEX_FLOAT,
157
+
cls=CLASS_NUMBER,
158
+
value_regex=REGEX_NUMBER,
156
159
description="Depth to increase on each peck; Peck increment in canned cycles",
157
-
clean_value=CLEAN_FLOAT,
160
+
clean_value=CLEAN_NUMBER,
158
161
),
159
162
# Arc Radius
160
163
'R': WordType(
161
-
cls=float,
162
-
value_regex=REGEX_FLOAT,
164
+
cls=CLASS_NUMBER,
165
+
value_regex=REGEX_NUMBER,
163
166
description="Defines size of arc radius, or defines retract height in milling canned cycles",
164
-
clean_value=CLEAN_FLOAT,
167
+
clean_value=CLEAN_NUMBER,
165
168
),
166
169
# Spindle speed
167
170
'S': WordType(
168
-
cls=float,
169
-
value_regex=REGEX_FLOAT,
171
+
cls=CLASS_NUMBER,
172
+
value_regex=REGEX_NUMBER,
170
173
description="Defines speed, either spindle speed or surface speed depending on mode",
171
-
clean_value=CLEAN_FLOAT,
174
+
clean_value=CLEAN_NUMBER,
172
175
),
173
176
# Tool Selecton
174
177
'T': WordType(
@@ -179,41 +182,41 @@ def CLEAN_FLOAT(v):
179
182
),
180
183
# Incremental axes
181
184
'U': WordType(
182
-
cls=float,
183
-
value_regex=REGEX_FLOAT,
185
+
cls=CLASS_NUMBER,
186
+
value_regex=REGEX_NUMBER,
184
187
description="Incremental axis corresponding to X axis (typically only lathe group A controls) Also defines dwell time on some machines (instead of 'P' or 'X').",
185
-
clean_value=CLEAN_FLOAT,
188
+
clean_value=CLEAN_NUMBER,
186
189
),
187
190
'V': WordType(
188
-
cls=float,
189
-
value_regex=REGEX_FLOAT,
191
+
cls=CLASS_NUMBER,
192
+
value_regex=REGEX_NUMBER,
190
193
description="Incremental axis corresponding to Y axis",
191
-
clean_value=CLEAN_FLOAT,
194
+
clean_value=CLEAN_NUMBER,
192
195
),
193
196
'W': WordType(
194
-
cls=float,
195
-
value_regex=REGEX_FLOAT,
197
+
cls=CLASS_NUMBER,
198
+
value_regex=REGEX_NUMBER,
196
199
description="Incremental axis corresponding to Z axis (typically only lathe group A controls)",
197
-
clean_value=CLEAN_FLOAT,
200
+
clean_value=CLEAN_NUMBER,
198
201
),
199
202
# Linear Axes
200
203
'X': WordType(
201
-
cls=float,
202
-
value_regex=REGEX_FLOAT,
204
+
cls=CLASS_NUMBER,
205
+
value_regex=REGEX_NUMBER,
203
206
description="Absolute or incremental position of X axis.",
204
-
clean_value=CLEAN_FLOAT,
207
+
clean_value=CLEAN_NUMBER,
205
208
),
206
209
'Y': WordType(
207
-
cls=float,
208
-
value_regex=REGEX_FLOAT,
210
+
cls=CLASS_NUMBER,
211
+
value_regex=REGEX_NUMBER,
209
212
description="Absolute or incremental position of Y axis.",
210
-
clean_value=CLEAN_FLOAT,
213
+
clean_value=CLEAN_NUMBER,
211
214
),
212
215
'Z': WordType(
213
-
cls=float,
214
-
value_regex=REGEX_FLOAT,
216
+
cls=CLASS_NUMBER,
217
+
value_regex=REGEX_NUMBER,
215
218
description="Absolute or incremental position of Z axis.",
0 commit comments