Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
pyMKcam
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
machinery
pyMKcam
Commits
76a6b0a9
Commit
76a6b0a9
authored
Feb 12, 2017
by
Franco (nextime) Lanza
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MK4duo Gcode support
parent
f299ea66
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
32 deletions
+37
-32
MK4duo.py
pymkcam/Exporters/GCode/MK4duo.py
+37
-32
No files found.
pymkcam/Exporters/GCode/MK4duo.py
View file @
76a6b0a9
...
...
@@ -25,11 +25,17 @@ from pymkcam.Toolpath import CORNER_STYLE_EXACT_PATH, CORNER_STYLE_EXACT_STOP, \
CORNER_STYLE_OPTIMIZE_SPEED
,
CORNER_STYLE_OPTIMIZE_TOLERANCE
DEFAULT_HEADER
=
((
"G40"
,
"disable tool radius compensation"
),
(
"G49"
,
"disable tool length compensation"
),
(
"G80"
,
"cancel modal motion"
),
(
"G54"
,
"select coordinate system 1"
),
(
"G90"
,
"disable incremental moves"
))
DEFAULT_HEADER
=
(
(
"M82"
,
"select absolute coordinate system"
),
)
DEFAULT_FOOTER
=
(
(
"G0 Z5.00000 F200"
,
"safe Z position"
),
(
"M5"
,
"stop spindle"
),
(
"M18"
,
"unlock all steppers"
),
(
"M2"
,
"program ends"
)
)
DEFAULT_DIGITS
=
6
...
...
@@ -42,29 +48,31 @@ def _render_number(number):
class
MK4duo
(
pymkcam
.
Exporters
.
GCode
.
BaseGenerator
):
sspeed
=
"10000"
feed
=
"300"
fast
=
"3000"
def
add_header
(
self
):
for
command
,
comment
in
DEFAULT_HEADER
:
self
.
add_command
(
command
,
comment
=
comment
)
# TODO: use a "unit" filter
if
True
:
self
.
add_command
(
"G21"
,
"metric"
)
else
:
self
.
add_command
(
"G20"
,
"imperial"
)
def
add_footer
(
self
):
self
.
add_command
(
"M2"
,
"end program"
)
for
command
,
comment
in
DEFAULT_FOOTER
:
self
.
add_command
(
command
,
comment
=
comment
)
def
add_comment
(
self
,
comment
):
self
.
add_command
(
";
%
s"
%
comment
)
def
add_command
(
self
,
command
,
comment
=
None
):
self
.
destination
.
write
(
command
)
if
comment
:
self
.
destination
.
write
(
"
\t
"
)
self
.
add_comment
(
comment
)
else
:
self
.
destination
.
write
(
os
.
linesep
)
self
.
destination
.
write
(
command
)
self
.
destination
.
write
(
os
.
linesep
)
def
add_move
(
self
,
coordinates
,
is_rapid
=
False
):
components
=
[]
...
...
@@ -72,52 +80,49 @@ class MK4duo(pymkcam.Exporters.GCode.BaseGenerator):
# True: the last move was G0
# False: the last move was G1
# None: some non-move happened before
if
self
.
_get_cache
(
"rapid_move"
,
None
)
!=
is_rapid
:
components
.
append
(
"G0"
if
is_rapid
else
"G1"
)
else
:
# improve gcode style
components
.
append
(
" "
)
components
.
append
(
"G0"
if
is_rapid
else
"G1"
)
axes
=
[
axis
for
axis
in
"XYZABCUVW"
]
previous
=
self
.
_get_cache
(
"position"
,
[
None
]
*
len
(
coordinates
))
for
(
axis
,
value
,
last
)
in
zip
(
axes
,
coordinates
,
previous
):
if
(
last
is
None
)
or
(
last
!=
value
):
components
.
append
(
"
%
s
%.6
f"
%
(
axis
,
value
))
command
=
" "
.
join
(
components
)
if
command
.
strip
():
self
.
add_command
(
command
)
if
len
(
components
)
>
1
:
if
self
.
_get_cache
(
"rapid_move"
,
None
)
!=
is_rapid
:
components
.
append
(
"F
%
s"
%
(
self
.
fast
if
is_rapid
else
self
.
feed
))
command
=
" "
.
join
(
components
)
if
command
.
strip
():
self
.
add_command
(
command
)
def
command_feedrate
(
self
,
feedrate
):
self
.
add_command
(
"F
%
s"
%
_render_number
(
feedrate
),
"set feedrate"
)
self
.
feed
=
_render_number
(
feedrate
)
def
command_select_tool
(
self
,
tool_id
):
self
.
add_command
(
"T
%
d
M6
"
%
tool_id
,
"select tool"
)
self
.
add_command
(
"T
%
d"
%
tool_id
,
"select tool"
)
def
command_spindle_speed
(
self
,
speed
):
self
.
add_command
(
"S
%
s"
%
_render_number
(
speed
),
"set spindle speed"
)
self
.
sspeed
=
_render_number
(
speed
)
def
command_spindle_enabled
(
self
,
state
):
if
state
:
self
.
add_command
(
"M3
"
,
"start spindle"
)
self
.
add_command
(
"M3
S
%
s"
%
self
.
sspeed
,
"start spindle"
)
else
:
self
.
add_command
(
"M5"
,
"stop spindle"
)
def
command_delay
(
self
,
seconds
):
self
.
add_command
(
"G04
P
%
d"
%
seconds
,
"wait for
%
d seconds"
%
seconds
)
self
.
add_command
(
"G04
S
%
d"
%
seconds
,
"wait for
%
d seconds"
%
seconds
)
def
command_corner_style
(
self
,
(
path_mode
,
motion_tolerance
,
naive_tolerance
)):
if
path_mode
==
CORNER_STYLE_EXACT_PATH
:
self
.
add_comm
and
(
"G61"
,
"exact path mode
"
)
self
.
add_comm
ent
(
"G61 exact path mode was requested but not implemented
"
)
elif
path_mode
==
CORNER_STYLE_EXACT_STOP
:
self
.
add_comm
and
(
"G61.1"
,
"exact stop mode
"
)
self
.
add_comm
ent
(
"G61.1 exact stop mode was requested but not implemented
"
)
elif
path_mode
==
CORNER_STYLE_OPTIMIZE_SPEED
:
self
.
add_comm
and
(
"G64"
,
"continuous mode with maximum spe
ed"
)
self
.
add_comm
ent
(
"G64 continuous mode with maximum speed was requested but not implement
ed"
)
else
:
if
not
naive_tolerance
:
self
.
add_command
(
"G64 P
%
f"
%
motion_tolerance
,
"continuous mode with tolerance"
)
self
.
add_comment
(
"G64 P
%
f continuous mode with tolerance was requested but not implemented"
%
motion_tolerance
)
else
:
self
.
add_command
(
"G64 P
%
f Q
%
f"
%
\
(
motion_tolerance
,
naive_tolerance
),
"continuous mode with tolerance and cleanup"
)
self
.
add_command
(
"G64 P
%
f Q
%
f continuous mode with tolerance and cleanup was requested but not implemented"
%
\
(
motion_tolerance
,
naive_tolerance
))
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment