Import LinuxCNC source tree
This commit is contained in:
132
tests/interp_initcode/test-ui.py
Executable file
132
tests/interp_initcode/test-ui.py
Executable file
@@ -0,0 +1,132 @@
|
||||
#!/usr/bin/env python3
|
||||
import gcode
|
||||
import linuxcnc
|
||||
import linuxcnc_util
|
||||
from rs274.interpret import PrintCanon, StatMixin
|
||||
import preview_helpers
|
||||
import sys
|
||||
import os
|
||||
|
||||
|
||||
class PreviewCanon(PrintCanon, StatMixin):
|
||||
|
||||
# Stay on the per-event canon protocol. Named explicitly because the
|
||||
# catch-all __getattr__ below would otherwise answer gcode.parse's probe
|
||||
# with a callable and opt this canon into the move-batch protocol.
|
||||
use_move_batches = False
|
||||
|
||||
def __init__(self, stat, randomtc, parameter):
|
||||
StatMixin.__init__(self, stat, randomtc)
|
||||
self.parameter_file = parameter
|
||||
self.feed_rate = 0.0
|
||||
self.current_x = 0.0
|
||||
self.current_y = 0.0
|
||||
self.current_z = 0.0
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name.startswith("_"):
|
||||
raise AttributeError(name)
|
||||
print(f"[WARN] unimplemented canon: {name}()", file=sys.stderr)
|
||||
return lambda *args, **kwargs: None
|
||||
|
||||
def set_xy_rotation(self, *args):
|
||||
print("set_xy_rotation", args)
|
||||
|
||||
def set_g5x_offset(self, *args):
|
||||
print("set_g5x_offset", args)
|
||||
|
||||
def set_g92_offset(self, *args):
|
||||
print("set_g92_offset", args)
|
||||
|
||||
def tool_offset(self, *args):
|
||||
print("tool_offset", args)
|
||||
|
||||
def next_line(self, state):
|
||||
#print("next_line", state.sequence_number)
|
||||
self.state = state
|
||||
|
||||
def set_plane(self, plane):
|
||||
print("set plane", plane)
|
||||
|
||||
def set_feed_rate(self, arg):
|
||||
print("set feed rate", arg)
|
||||
|
||||
def comment(self, arg):
|
||||
print("#", arg)
|
||||
|
||||
def straight_traverse(self, *args):
|
||||
print("straight_traverse " , args)
|
||||
|
||||
def straight_feed(self, *args):
|
||||
print("straight_feed" , args)
|
||||
|
||||
def dwell(self, arg):
|
||||
if arg < .1:
|
||||
print("dwell %f ms" % (1000 * arg))
|
||||
else:
|
||||
print("dwell %f seconds" % arg)
|
||||
|
||||
def arc_feed(self, *args):
|
||||
print("arc_feed " , args)
|
||||
|
||||
def close(self, *args):
|
||||
pass
|
||||
|
||||
|
||||
# route output to log file now
|
||||
log_file = open("temp_log","w")
|
||||
sys.stdout = log_file
|
||||
|
||||
# connect
|
||||
c = linuxcnc.command()
|
||||
e = linuxcnc.error_channel()
|
||||
s = linuxcnc.stat()
|
||||
l = linuxcnc_util.LinuxCNC(command=c, status=s, error=e)
|
||||
|
||||
# parse inifile variables
|
||||
inifile = linuxcnc.ini("test.ini")
|
||||
random = inifile.getbool("EMCIO", "RANDOM_TOOLCHANGER", fallback=False)
|
||||
parameter = inifile.getstring("RS274NGC", "PARAMETER_FILE", fallback="test.var")
|
||||
|
||||
# setup preview interpreter
|
||||
filename = "test.ngc"
|
||||
canon = PreviewCanon(s, random, parameter)
|
||||
|
||||
# setup linuxcnc
|
||||
c.state(linuxcnc.STATE_ESTOP_RESET)
|
||||
c.state(linuxcnc.STATE_ON)
|
||||
c.mode(linuxcnc.MODE_MANUAL)
|
||||
c.home(-1)
|
||||
l.wait_for_home(joints=[1,1,1,1,0,0,0,0,0])
|
||||
|
||||
# check for startup codes (must match ini [RS274NGC] RS274NGC_STARTUP_CODE )
|
||||
s.poll()
|
||||
print("startup gcodes ", s.gcodes)
|
||||
|
||||
# change some states
|
||||
c.mode(linuxcnc.MODE_MDI)
|
||||
c.wait_complete()
|
||||
# move tool
|
||||
c.mdi("G0 x 1.23")
|
||||
c.wait_complete()
|
||||
# Set G55 with offset
|
||||
c.mdi("G55")
|
||||
c.wait_complete()
|
||||
c.mdi("G10 L2 P0 Z1")
|
||||
c.wait_complete()
|
||||
|
||||
# parse gcode test file
|
||||
try:
|
||||
initcodes = preview_helpers.create_unitcode_and_initcode(s, inifile)
|
||||
result, seq = gcode.parse(filename, canon, *initcodes)
|
||||
if result > gcode.MIN_ERROR:
|
||||
print(f"G-code error at line {seq}: error code {result}",file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
except Exception as e:
|
||||
print(e,file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
finally:
|
||||
log_file.close()
|
||||
canon.close()
|
||||
Reference in New Issue
Block a user