Import LinuxCNC source tree
This commit is contained in:
1
configs/sim/axis/gladevcp/.gitignore
vendored
Normal file
1
configs/sim/axis/gladevcp/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.save
|
||||
1
configs/sim/axis/gladevcp/README
Normal file
1
configs/sim/axis/gladevcp/README
Normal file
@@ -0,0 +1 @@
|
||||
gladevcp -- glade based gui demos
|
||||
125
configs/sim/axis/gladevcp/gladevcp_panel.ini
Normal file
125
configs/sim/axis/gladevcp/gladevcp_panel.ini
Normal file
@@ -0,0 +1,125 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = LinuxCNC-PANEL-GLADEVCP
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
|
||||
[DISPLAY]
|
||||
GLADEVCP= -u hitcounter.py manual-example.ui
|
||||
DISPLAY = axis
|
||||
CYCLE_TIME = 0.100
|
||||
HELP_FILE = doc/help.txt
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
MAX_SPINDLE_OVERRIDE = 1.0
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
DEFAULT_LINEAR_VELOCITY = .25
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 5
|
||||
#EDITOR = geany
|
||||
TOOL_EDITOR = tooledit
|
||||
INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in
|
||||
|
||||
[FILTER]
|
||||
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
|
||||
PROGRAM_EXTENSION = .py Python Script
|
||||
png = image-to-gcode
|
||||
gif = image-to-gcode
|
||||
jpg = image-to-gcode
|
||||
py = python3
|
||||
|
||||
[RS274NGC]
|
||||
PARAMETER_FILE = sim.var
|
||||
SUBROUTINE_PATH = ../../nc_files/gladevcp_lib
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
COMM_TIMEOUT = 1.0
|
||||
SERVO_PERIOD = 1000000
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.001
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE= manual-example.hal
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = X Y Z
|
||||
HOME = 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 1.2
|
||||
POSITION_FILE = position.txt
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
NO_FORCE_HOMING = 1
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = sim.tbl
|
||||
TOOL_CHANGE_POSITION = 0 0 0
|
||||
TOOL_CHANGE_QUILL_UP = 1
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 3
|
||||
|
||||
[AXIS_X]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Y]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Z]
|
||||
HOME = 0.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
HOME_OFFSET = 1.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 0
|
||||
125
configs/sim/axis/gladevcp/gladevcp_panel_tester.ini
Normal file
125
configs/sim/axis/gladevcp/gladevcp_panel_tester.ini
Normal file
@@ -0,0 +1,125 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = LinuxCNC-PANEL-GLADEVCP
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
|
||||
[DISPLAY]
|
||||
GLADEVCP= -u test_handler.py test.ui
|
||||
DISPLAY = axis
|
||||
CYCLE_TIME = 0.100
|
||||
HELP_FILE = doc/help.txt
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
MAX_SPINDLE_OVERRIDE = 1.0
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
DEFAULT_LINEAR_VELOCITY = .25
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 5
|
||||
#EDITOR = geany
|
||||
TOOL_EDITOR = tooledit
|
||||
INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in
|
||||
|
||||
[FILTER]
|
||||
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
|
||||
PROGRAM_EXTENSION = .py Python Script
|
||||
png = image-to-gcode
|
||||
gif = image-to-gcode
|
||||
jpg = image-to-gcode
|
||||
py = python3
|
||||
|
||||
[RS274NGC]
|
||||
PARAMETER_FILE = sim.var
|
||||
SUBROUTINE_PATH = ../../nc_files/gladevcp_lib
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
COMM_TIMEOUT = 1.0
|
||||
SERVO_PERIOD = 1000000
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.001
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
#POSTGUI_HALFILE= manual-example.hal
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = X Y Z
|
||||
HOME = 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 1.2
|
||||
POSITION_FILE = position.txt
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
NO_FORCE_HOMING = 1
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = sim.tbl
|
||||
TOOL_CHANGE_POSITION = 0 0 0
|
||||
TOOL_CHANGE_QUILL_UP = 1
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 3
|
||||
|
||||
[AXIS_X]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Y]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Z]
|
||||
HOME = 0.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
HOME_OFFSET = 1.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 0
|
||||
3
configs/sim/axis/gladevcp/gladevcp_panel_tester.txt
Normal file
3
configs/sim/axis/gladevcp/gladevcp_panel_tester.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
gladevcp_panel_tester:
|
||||
shows how to use VCP_action_python for small code
|
||||
execution.
|
||||
129
configs/sim/axis/gladevcp/gladevcp_tab.ini
Normal file
129
configs/sim/axis/gladevcp/gladevcp_tab.ini
Normal file
@@ -0,0 +1,129 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = LinuxCNC-TAB-GLADEVCP
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
|
||||
[DISPLAY]
|
||||
# add GladeVCP panel as a tab next to Preview/DRO:
|
||||
EMBED_TAB_NAME= GladeVCP demo
|
||||
EMBED_TAB_COMMAND= halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -u ./hitcounter.py -x {XID} ./manual-example.ui
|
||||
|
||||
DISPLAY = axis
|
||||
CYCLE_TIME = 0.100
|
||||
HELP_FILE = doc/help.txt
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
MAX_SPINDLE_OVERRIDE = 1.0
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
DEFAULT_LINEAR_VELOCITY = .25
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 5
|
||||
#EDITOR = geany
|
||||
TOOL_EDITOR = tooledit
|
||||
INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in
|
||||
|
||||
[FILTER]
|
||||
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
|
||||
PROGRAM_EXTENSION = .py Python Script
|
||||
png = image-to-gcode
|
||||
gif = image-to-gcode
|
||||
jpg = image-to-gcode
|
||||
py = python3
|
||||
|
||||
[RS274NGC]
|
||||
PARAMETER_FILE = sim.var
|
||||
# gladevcp Demo specific Oword subs live here
|
||||
SUBROUTINE_PATH = ../../nc_files/gladevcp_lib
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
COMM_TIMEOUT = 1.0
|
||||
SERVO_PERIOD = 1000000
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.001
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
POSTGUI_HALFILE = manual-example.hal
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = X Y Z
|
||||
HOME = 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 1.2
|
||||
POSITION_FILE = position.txt
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
NO_FORCE_HOMING = 1
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = sim.tbl
|
||||
TOOL_CHANGE_POSITION = 0 0 0
|
||||
TOOL_CHANGE_QUILL_UP = 1
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 3
|
||||
|
||||
[AXIS_X]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Y]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Z]
|
||||
HOME = 0.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
HOME_OFFSET = 1.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 0
|
||||
1
configs/sim/axis/gladevcp/hitcounter.py
Symbolic link
1
configs/sim/axis/gladevcp/hitcounter.py
Symbolic link
@@ -0,0 +1 @@
|
||||
../../hitcounter.py
|
||||
1
configs/sim/axis/gladevcp/manual-example.hal
Symbolic link
1
configs/sim/axis/gladevcp/manual-example.hal
Symbolic link
@@ -0,0 +1 @@
|
||||
../../manual-example.hal
|
||||
1
configs/sim/axis/gladevcp/manual-example.ui
Symbolic link
1
configs/sim/axis/gladevcp/manual-example.ui
Symbolic link
@@ -0,0 +1 @@
|
||||
../../manual-example.ui
|
||||
27
configs/sim/axis/gladevcp/meter_scale.py
Normal file
27
configs/sim/axis/gladevcp/meter_scale.py
Normal file
@@ -0,0 +1,27 @@
|
||||
import linuxcnc
|
||||
import os
|
||||
import hal
|
||||
import hal_glib
|
||||
|
||||
class HandlerClass:
|
||||
|
||||
def _on_max_value_change(self,hal_pin,data=None):
|
||||
self.meter.max = float(hal_pin.get())
|
||||
self.meter.queue_draw() # force a widget redraw
|
||||
|
||||
def __init__(self, halcomp,builder,useropts):
|
||||
self.builder = builder
|
||||
|
||||
# hal pin with change callback.
|
||||
# When the pin's value changes the callback is executed.
|
||||
self.max_value = hal_glib.GPin(halcomp.newpin('max-value', hal.HAL_FLOAT, hal.HAL_IN))
|
||||
self.max_value.connect('value-changed', self._on_max_value_change)
|
||||
|
||||
inifile = linuxcnc.ini(os.getenv("INI_FILE_NAME"))
|
||||
mmax = inifile.getreal("METER", "MAX", fallback=100.0)
|
||||
self.meter = self.builder.get_object('meter')
|
||||
self.max_value.set(mmax)
|
||||
|
||||
|
||||
def get_handlers(halcomp,builder,useropts):
|
||||
return [HandlerClass(halcomp,builder,useropts)]
|
||||
47
configs/sim/axis/gladevcp/meter_scale.ui
Normal file
47
configs/sim/axis/gladevcp/meter_scale.ui
Normal file
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.40.0 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.0"/>
|
||||
<requires lib="gladevcp" version="0.0"/>
|
||||
<object class="GtkWindow" id="window1">
|
||||
<property name="can-focus">False</property>
|
||||
<property name="default-width">200</property>
|
||||
<property name="default-height">150</property>
|
||||
<child>
|
||||
<!-- n-columns=3 n-rows=2 -->
|
||||
<object class="HAL_Table" id="hal_table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="HAL_Meter" id="meter">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="bg-color">#ffffffffffff</property>
|
||||
<property name="z0-color">#0000ffff0000</property>
|
||||
<property name="z1-color">#ffffffff0000</property>
|
||||
<property name="z2-color">#ffff00000000</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
10
configs/sim/axis/gladevcp/probe.hal
Normal file
10
configs/sim/axis/gladevcp/probe.hal
Normal file
@@ -0,0 +1,10 @@
|
||||
# permanently enable buttons
|
||||
#setp probe.probebox 1
|
||||
#setp probe.modebox 1
|
||||
|
||||
#better: only enable buttons when program is idle
|
||||
net enable-buttons halui.program.is-idle => probe.modebox probe.probebox
|
||||
|
||||
# connect this for a simulated environment - a real machine has probably a
|
||||
# a probe connected
|
||||
# net probe-contact probe.probe_contact => motion.probe-input
|
||||
129
configs/sim/axis/gladevcp/probe.ini
Normal file
129
configs/sim/axis/gladevcp/probe.ini
Normal file
@@ -0,0 +1,129 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = gladevcp_probe
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
|
||||
[DISPLAY]
|
||||
DISPLAY = axis
|
||||
CYCLE_TIME = 0.100
|
||||
HELP_FILE = doc/help.txt
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
MAX_SPINDLE_OVERRIDE = 1.0
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
DEFAULT_LINEAR_VELOCITY = .25
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 5
|
||||
#EDITOR = geany
|
||||
TOOL_EDITOR = tooledit
|
||||
INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in
|
||||
|
||||
[FILTER]
|
||||
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
|
||||
PROGRAM_EXTENSION = .py Python Script
|
||||
png = image-to-gcode
|
||||
gif = image-to-gcode
|
||||
jpg = image-to-gcode
|
||||
py = python3
|
||||
|
||||
[RS274NGC]
|
||||
# '.' plus the gladevcp Demo specific Oword subs dir. These must be a single
|
||||
# colon-separated SUBROUTINE_PATH: LinuxCNC reads only the first occurrence of
|
||||
# an INI key, so a second SUBROUTINE_PATH line is silently ignored.
|
||||
SUBROUTINE_PATH = .:../../nc_files/gladevcp_lib
|
||||
PARAMETER_FILE = sim.var
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
COMM_TIMEOUT = 1.0
|
||||
SERVO_PERIOD = 1000000
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.001
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = X Y Z
|
||||
HOME = 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 1.2
|
||||
POSITION_FILE = position.txt
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
NO_FORCE_HOMING = 1
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = sim.tbl
|
||||
TOOL_CHANGE_POSITION = 0 0 0
|
||||
TOOL_CHANGE_QUILL_UP = 1
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 3
|
||||
|
||||
[AXIS_X]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Y]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Z]
|
||||
HOME = 0.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
HOME_OFFSET = 1.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[APPLICATIONS]
|
||||
APP = probe_gui.sh
|
||||
57
configs/sim/axis/gladevcp/probe.ngc
Normal file
57
configs/sim/axis/gladevcp/probe.ngc
Normal file
@@ -0,0 +1,57 @@
|
||||
; caveat - this changes feed and abs/relative mode
|
||||
|
||||
O<probe> SUB
|
||||
|
||||
(print, _Probe_Axis= #<_Probe_Axis>)
|
||||
(print, _Probe_Speed = #<_Probe_Speed>)
|
||||
(print, _Probe_Retract = #<_Probe_Retract>)
|
||||
(print, _Probe_Distance = #<_Probe_Distance>)
|
||||
(print, _Probe_Diameter = #<_Probe_Diameter>)
|
||||
(print, _Probe_System = #<_Probe_System>)
|
||||
|
||||
|
||||
O<xaxis> if [#<_Probe_Axis> eq 0]
|
||||
|
||||
G91 G38.3 X#<_Probe_Distance> F#<_Probe_Speed>
|
||||
O<xresult> if [#5070]
|
||||
(MSG, probe succeeded)
|
||||
G10 L20 P#<_Probe_System> X#<_Probe_Diameter>
|
||||
G90 G0 X#<_Probe_Retract>
|
||||
O<xresult> else
|
||||
(MSG,probe failed)
|
||||
G91 G0 X[0 - #<_Probe_Distance>]
|
||||
O<xresult> endif
|
||||
G90
|
||||
O<xaxis> endif
|
||||
|
||||
O<yaxis> if [#<_Probe_Axis> eq 1]
|
||||
|
||||
G91 G38.3 y#<_Probe_Distance> F#<_Probe_Speed>
|
||||
O<yresult> if [#5070]
|
||||
(MSG, probe succeeded)
|
||||
G10 L20 P#<_Probe_System> y#<_Probe_Diameter>
|
||||
G90 G0 y#<_Probe_Retract>
|
||||
O<yresult> else
|
||||
(MSG,probe failed)
|
||||
G91 G0 y[0 - #<_Probe_Distance>]
|
||||
O<yresult> endif
|
||||
G90
|
||||
O<yaxis> endif
|
||||
|
||||
O<zaxis> if [#<_Probe_Axis> eq 2]
|
||||
|
||||
G91 G38.3 z#<_Probe_Distance> F#<_Probe_Speed>
|
||||
O<zresult> if [#5070]
|
||||
(MSG, probe succeeded)
|
||||
G10 L20 P#<_Probe_System> z#<_Probe_Diameter>
|
||||
G90 G0 z#<_Probe_Retract>
|
||||
O<zresult> else
|
||||
(MSG,probe failed)
|
||||
G91 G0 z[0 - #<_Probe_Distance>]
|
||||
O<zresult> endif
|
||||
G90
|
||||
O<zaxis> endif
|
||||
|
||||
O<probe> endsub
|
||||
|
||||
M2
|
||||
204
configs/sim/axis/gladevcp/probe.py
Normal file
204
configs/sim/axis/gladevcp/probe.py
Normal file
@@ -0,0 +1,204 @@
|
||||
#!/usr/bin/env python3
|
||||
# vim: sts=4 sw=4 et
|
||||
# This is a component of Linuxcnc
|
||||
# probe.py Copyright 2010 Michael Haberler
|
||||
#
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.''''''
|
||||
'''
|
||||
gladevcp probe demo example
|
||||
Michael Haberler 11/2010
|
||||
|
||||
'''
|
||||
|
||||
import os,sys
|
||||
from gladevcp.persistence import IniFile,widget_defaults,set_debug,select_widgets
|
||||
import hal
|
||||
import hal_glib
|
||||
import gtk
|
||||
import glib
|
||||
|
||||
import linuxcnc
|
||||
|
||||
debug = 0
|
||||
|
||||
|
||||
class EmcInterface(object):
|
||||
|
||||
def __init__(self):
|
||||
try:
|
||||
self.s = linuxcnc.stat()
|
||||
self.c = linuxcnc.command()
|
||||
except Exception as msg:
|
||||
print("can not initialize EmcInterface: %s - LinuxCNC not running?" %(msg))
|
||||
|
||||
def running(self,do_poll=True):
|
||||
if do_poll: self.s.poll()
|
||||
return self.s.task_mode == linuxcnc.MODE_AUTO and self.s.interp_state != linuxcnc.INTERP_IDLE
|
||||
|
||||
def manual_ok(self,do_poll=True):
|
||||
if do_poll: self.s.poll()
|
||||
if self.s.task_state != linuxcnc.STATE_ON: return False
|
||||
return self.s.interp_state == linuxcnc.INTERP_IDLE
|
||||
|
||||
|
||||
def ensure_mode(self,m, *p):
|
||||
'''
|
||||
If LinuxCNC is not already in one of the modes given, switch it to the first mode
|
||||
example:
|
||||
ensure_mode(linuxcnc.MODE_MDI)
|
||||
ensure_mode(linuxcnc.MODE_AUTO, linuxcnc.MODE_MDI)
|
||||
'''
|
||||
self.s.poll()
|
||||
if self.s.task_mode == m or self.s.task_mode in p: return True
|
||||
if self.running(do_poll=False): return False
|
||||
self.c.mode(m)
|
||||
self.c.wait_complete()
|
||||
return True
|
||||
|
||||
def active_codes(self):
|
||||
self.s.poll()
|
||||
return self.s.gcodes
|
||||
|
||||
def get_current_system(self):
|
||||
for i in self.active_codes():
|
||||
if i >= 540 and i <= 590:
|
||||
return i/10 - 53
|
||||
elif i >= 590 and i <= 593:
|
||||
return i - 584
|
||||
return 1
|
||||
|
||||
|
||||
def mdi_command(self,command, wait=True):
|
||||
#ensure_mode(emself.c.MODE_MDI)
|
||||
self.c.mdi(command)
|
||||
if wait: self.c.wait_complete()
|
||||
|
||||
def emc_status(self):
|
||||
'''
|
||||
return tuple (task mode, task state, exec state, interp state) as strings
|
||||
'''
|
||||
self.s.poll()
|
||||
task_mode = ['invalid', 'MANUAL', 'AUTO', 'MDI'][self.s.task_mode]
|
||||
task_state = ['invalid', 'ESTOP', 'ESTOP_RESET', 'OFF', 'ON'][self.s.task_state]
|
||||
exec_state = ['invalid', 'ERROR', 'DONE',
|
||||
'WAITING_FOR_MOTION',
|
||||
'WAITING_FOR_MOTION_QUEUE',
|
||||
'WAITING_FOR_IO',
|
||||
'WAITING_FOR_PAUSE',
|
||||
'WAITING_FOR_MOTION_AND_IO',
|
||||
'WAITING_FOR_DELAY',
|
||||
'WAITING_FOR_SYSTEM_CMD' ][self.s.exec_state]
|
||||
interp_state = ['invalid', 'IDLE', 'READING', 'PAUSED', 'WAITING'][self.s.interp_state]
|
||||
return (task_mode, task_state, exec_state, interp_state)
|
||||
|
||||
|
||||
|
||||
class HandlerClass:
|
||||
|
||||
def on_manual_mode(self,widget,data=None):
|
||||
if self.e.ensure_mode(linuxcnc.MODE_MANUAL):
|
||||
print("switched to manual mode")
|
||||
else:
|
||||
print("can not switch to manual in this state")
|
||||
|
||||
def on_mdi_mode(self,widget,data=None):
|
||||
if self.e.ensure_mode(linuxcnc.MODE_MDI):
|
||||
print("switched to MDI mode")
|
||||
else:
|
||||
print("can not switch to MDI in this state")
|
||||
|
||||
def _query_emc_status(self,data=None):
|
||||
(task_mode, task_state, exec_state, interp_state) = self.e.emc_status()
|
||||
self.builder.get_object('task_mode').set_label("Task mode: " + task_mode)
|
||||
self.builder.get_object('task_state').set_label("Task state: " + task_state)
|
||||
self.builder.get_object('exec_state').set_label("Exec state: " + exec_state)
|
||||
self.builder.get_object('interp_state').set_label("Interp state: " + interp_state)
|
||||
return True
|
||||
|
||||
def on_probe(self,widget,data=None):
|
||||
label = widget.get_label()
|
||||
axis = ord(label[0].lower()) - ord('x')
|
||||
direction = 1.0
|
||||
if label[1] == '-':
|
||||
direction = -1.0
|
||||
self.e.s.poll()
|
||||
self.start_feed = self.e.s.settings[1]
|
||||
# determine system we are touching off - 1...g54 etc
|
||||
self.current_system = self.e.get_current_system()
|
||||
# remember current abs or rel mode - g91
|
||||
self.start_relative = (910 in self.e.active_codes())
|
||||
|
||||
self.previous_mode = self.e.s.task_mode
|
||||
if self.e.s.task_state != linuxcnc.STATE_ON:
|
||||
print("machine not turned on")
|
||||
return
|
||||
if not self.e.s.homed[axis]:
|
||||
print("%s axis not homed" %(chr(axis + ord('X'))))
|
||||
return
|
||||
if self.e.running(do_poll=False):
|
||||
print("can not do that now - interpreter running")
|
||||
return
|
||||
|
||||
self.e.ensure_mode(linuxcnc.MODE_MDI)
|
||||
self.e.mdi_command("#<_Probe_System> = %d " % (self.current_system ),wait=False)
|
||||
self.e.mdi_command("#<_Probe_Axis> = %d " % (axis),wait=False)
|
||||
self.e.mdi_command("#<_Probe_Speed> = %s " % (self.builder.get_object('probe_feed').get_value()),wait=False)
|
||||
self.e.mdi_command("#<_Probe_Diameter> = %s " % (self.builder.get_object('probe_diameter').get_value() ),wait=False)
|
||||
self.e.mdi_command("#<_Probe_Distance> = %s " % (self.builder.get_object('probe_travel').get_value() * direction),wait=False)
|
||||
self.e.mdi_command("#<_Probe_Retract> = %s " % (self.builder.get_object('retract').get_value() * direction * -1.0),wait=False)
|
||||
self.e.mdi_command("O<probe> call",wait=False)
|
||||
|
||||
self.e.mdi_command('F%f' % (self.start_feed),wait=False)
|
||||
self.e.mdi_command('G91' if self.start_relative else 'G90',wait=False)
|
||||
# self.e.ensure_mode(self.previous_mode)
|
||||
|
||||
|
||||
def on_destroy(self,obj,data=None):
|
||||
self.ini.save_state(self)
|
||||
|
||||
def on_restore_defaults(self,button,data=None):
|
||||
'''
|
||||
example callback for 'Reset to defaults' button
|
||||
currently unused
|
||||
'''
|
||||
self.ini.create_default_ini()
|
||||
self.ini.restore_state(self)
|
||||
|
||||
|
||||
def __init__(self, halcomp,builder,useropts):
|
||||
self.halcomp = halcomp
|
||||
self.builder = builder
|
||||
|
||||
self.ini_filename = __name__ + '.save'
|
||||
self.defaults = { IniFile.vars: dict(),
|
||||
IniFile.widgets : widget_defaults(select_widgets(self.builder.get_objects(), hal_only=False,output_only = True))
|
||||
}
|
||||
self.ini = IniFile(self.ini_filename,self.defaults,self.builder)
|
||||
self.ini.restore_state(self)
|
||||
|
||||
self.e = EmcInterface()
|
||||
|
||||
glib.timeout_add_seconds(1, self._query_emc_status)
|
||||
|
||||
def get_handlers(halcomp,builder,useropts):
|
||||
|
||||
global debug
|
||||
for cmd in useropts:
|
||||
exec(cmd, globals())
|
||||
|
||||
set_debug(debug)
|
||||
|
||||
return [HandlerClass(halcomp,builder,useropts)]
|
||||
26
configs/sim/axis/gladevcp/probe.txt
Normal file
26
configs/sim/axis/gladevcp/probe.txt
Normal file
@@ -0,0 +1,26 @@
|
||||
Probe: a linuxcnc interaction example
|
||||
|
||||
Files:
|
||||
probe.ini config file
|
||||
probe.ui gladevcp file
|
||||
probe.hal gladevcp file
|
||||
probe.py gladevcp file
|
||||
probe.ngc gcode subroutine
|
||||
probe.tcl start gladevcp and simulate_probe
|
||||
probe.txt (this)
|
||||
|
||||
probe.save generated by probing
|
||||
|
||||
Usage:
|
||||
F1 (cancel Estop)
|
||||
F2 (machine On)
|
||||
Ctrl-Home (Home all axes)
|
||||
|
||||
Set Parameters in separate probe gui
|
||||
Set Probe in motion (X+ for example)
|
||||
Activate probe with simulate_probe gui
|
||||
|
||||
-----------------------
|
||||
Note: to get a lot of debug output what gladevcp and probe.py are doing:
|
||||
modify to use:
|
||||
gladevcp -d -d -u probe.py -U debug=3 -H probe.hal probe.ui
|
||||
450
configs/sim/axis/gladevcp/probe.ui
Normal file
450
configs/sim/axis/gladevcp/probe.ui
Normal file
@@ -0,0 +1,450 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.40.0 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.16"/>
|
||||
<requires lib="gladevcp" version="0.0"/>
|
||||
<object class="GtkAdjustment" id="probediaadj">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">1.6699999999999999</property>
|
||||
<property name="step-increment">0.01</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="probefeedadj">
|
||||
<property name="upper">100</property>
|
||||
<property name="value">30</property>
|
||||
<property name="step-increment">5</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="probetraveladj">
|
||||
<property name="lower">-100</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="value">-50</property>
|
||||
<property name="step-increment">10</property>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="retract_by_adj">
|
||||
<property name="lower">-50</property>
|
||||
<property name="upper">200</property>
|
||||
<property name="value">10</property>
|
||||
<property name="step-increment">1</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="window1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<signal name="destroy" handler="on_destroy" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkFrame" id="move">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label-xalign">0</property>
|
||||
<property name="shadow-type">none</property>
|
||||
<child>
|
||||
<object class="HAL_HBox" id="modebox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="set_manual">
|
||||
<property name="label" translatable="yes">Manual mode</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="pressed" handler="on_manual_mode" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="set_mdi">
|
||||
<property name="label" translatable="yes">MDI mode</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="pressed" handler="on_mdi_mode" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes"><b>EMC</b></property>
|
||||
<property name="use-markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame" id="EMC Status">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label-xalign">0</property>
|
||||
<property name="shadow-type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="left-padding">12</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="task_mode">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="task_state">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="exec_state">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="interp_state">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes"><b>EMC Status</b></property>
|
||||
<property name="use-markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame" id="probing">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label-xalign">0</property>
|
||||
<property name="shadow-type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="left-padding">12</property>
|
||||
<child>
|
||||
<!-- n-columns=4 n-rows=2 -->
|
||||
<object class="HAL_Table" id="probebox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="HAL_Button" id="x_plus">
|
||||
<property name="label" translatable="yes">X+</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="pressed" handler="on_probe" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_Button" id="y_plus">
|
||||
<property name="label" translatable="yes">Y+</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="pressed" handler="on_probe" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_Button" id="z_plus">
|
||||
<property name="label" translatable="yes">Z+</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="pressed" handler="on_probe" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_Button" id="x_minus">
|
||||
<property name="label" translatable="yes">X-</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="pressed" handler="on_probe" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">3</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_Button" id="y_minus">
|
||||
<property name="label" translatable="yes">Y-</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="pressed" handler="on_probe" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_Button" id="z_minus">
|
||||
<property name="label" translatable="yes">Z-</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<signal name="pressed" handler="on_probe" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes"><b>Probing</b></property>
|
||||
<property name="use-markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame" id="parameters">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label-xalign">0</property>
|
||||
<property name="shadow-type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="left-padding">12</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="n-rows">4</property>
|
||||
<property name="n-columns">2</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label10">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Probe feed</property>
|
||||
<property name="xalign">0.4399999976158142</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top-attach">1</property>
|
||||
<property name="bottom-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label11">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Probe diameter</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top-attach">2</property>
|
||||
<property name="bottom-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label12">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Z retract by</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top-attach">3</property>
|
||||
<property name="bottom-attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Probe travel</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_SpinButton" id="probe_travel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="invisible-char">●</property>
|
||||
<property name="adjustment">probetraveladj</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="right-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_SpinButton" id="probe_feed">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="invisible-char">●</property>
|
||||
<property name="adjustment">probefeedadj</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="right-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
<property name="bottom-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_SpinButton" id="probe_diameter">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="invisible-char">●</property>
|
||||
<property name="adjustment">probediaadj</property>
|
||||
<property name="digits">2</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="right-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
<property name="bottom-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HAL_SpinButton" id="retract">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="invisible-char">●</property>
|
||||
<property name="adjustment">retract_by_adj</property>
|
||||
<property name="digits">1</property>
|
||||
<property name="numeric">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="right-attach">2</property>
|
||||
<property name="top-attach">3</property>
|
||||
<property name="bottom-attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes"><b>Parameters</b></property>
|
||||
<property name="use-markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
27
configs/sim/axis/gladevcp/probe_es.txt
Normal file
27
configs/sim/axis/gladevcp/probe_es.txt
Normal file
@@ -0,0 +1,27 @@
|
||||
Probe: un ejemplo de interacción con linuxcnc
|
||||
|
||||
Ficheros:
|
||||
probe.ini fichero de configuracion
|
||||
probe.ui fichero gladevcp
|
||||
probe.hal fichero gladevcp
|
||||
probe.py fichero gladevcp
|
||||
probe.ngc subrutina gcode
|
||||
probe.tcl arranca gladevcp and simulate_probe
|
||||
probe.txt (esto)
|
||||
|
||||
probe.save generado por probe
|
||||
|
||||
Uso:
|
||||
F1 (cancelar Estop)
|
||||
F2 (Máquina On)
|
||||
Ctrl-Inicio (Home todos)
|
||||
|
||||
Establecer parámetros en gui probe separada
|
||||
Poner probe en motion (X+ por ejemplo)
|
||||
Activar probe con gui simulate_probe
|
||||
|
||||
-----------------------
|
||||
Nota: para obtener una gran cantidad de resultados de depuración sobre
|
||||
lo que están haciendo gladevcp y probe.py:
|
||||
|
||||
gladevcp -d -d -u probe.py -U debug=3 -H probe.hal probe.ui
|
||||
4
configs/sim/axis/gladevcp/probe_gui.sh
Executable file
4
configs/sim/axis/gladevcp/probe_gui.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
gladevcp -d -d -u probe.py -U debug=3 -H probe.hal probe.ui &
|
||||
simulate_probe
|
||||
131
configs/sim/axis/gladevcp/set-param-from-ini.ini
Normal file
131
configs/sim/axis/gladevcp/set-param-from-ini.ini
Normal file
@@ -0,0 +1,131 @@
|
||||
[EMC]
|
||||
VERSION = 1.1
|
||||
MACHINE = set-param-from-ini
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
|
||||
[DISPLAY]
|
||||
DISPLAY = axis
|
||||
CYCLE_TIME = 0.100
|
||||
HELP_FILE = doc/help.txt
|
||||
POSITION_OFFSET = RELATIVE
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
MAX_SPINDLE_OVERRIDE = 1.0
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
DEFAULT_LINEAR_VELOCITY = .25
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 5
|
||||
#EDITOR = geany
|
||||
TOOL_EDITOR = tooledit
|
||||
INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in
|
||||
|
||||
[FILTER]
|
||||
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
|
||||
PROGRAM_EXTENSION = .py Python Script
|
||||
png = image-to-gcode
|
||||
gif = image-to-gcode
|
||||
jpg = image-to-gcode
|
||||
py = python3
|
||||
|
||||
[RS274NGC]
|
||||
PARAMETER_FILE = sim.var
|
||||
# gladevcp Demo specific Oword subs live here
|
||||
SUBROUTINE_PATH = ../../nc_files/gladevcp_lib
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
COMM_TIMEOUT = 1.0
|
||||
SERVO_PERIOD = 1000000
|
||||
|
||||
[TASK]
|
||||
TASK = milltask
|
||||
CYCLE_TIME = 0.001
|
||||
|
||||
[HAL]
|
||||
HALUI = halui
|
||||
HALFILE = LIB:basic_sim.tcl
|
||||
|
||||
[TRAJ]
|
||||
COORDINATES = X Y Z
|
||||
HOME = 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 1.2
|
||||
POSITION_FILE = position.txt
|
||||
MAX_LINEAR_VELOCITY = 1.2
|
||||
NO_FORCE_HOMING = 1
|
||||
|
||||
[EMCIO]
|
||||
TOOL_TABLE = sim.tbl
|
||||
TOOL_CHANGE_POSITION = 0 0 0
|
||||
TOOL_CHANGE_QUILL_UP = 1
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 3
|
||||
|
||||
[AXIS_X]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Y]
|
||||
HOME = 0.000
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -40.0
|
||||
MAX_LIMIT = 40.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 1
|
||||
|
||||
[AXIS_Z]
|
||||
HOME = 0.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 4
|
||||
MAX_ACCELERATION = 100.0
|
||||
MIN_LIMIT = -8.0
|
||||
MAX_LIMIT = 0.0001
|
||||
HOME_OFFSET = 1.0
|
||||
HOME_SEARCH_VEL = 20.0
|
||||
HOME_LATCH_VEL = 20.0
|
||||
HOME_SEQUENCE = 0
|
||||
|
||||
[APPLICATIONS]
|
||||
# demo to exercise meter pins
|
||||
APP = set-param-from-ini.sh
|
||||
|
||||
[METER]
|
||||
MAX = 200
|
||||
15
configs/sim/axis/gladevcp/set-param-from-ini.sh
Executable file
15
configs/sim/axis/gladevcp/set-param-from-ini.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd "$(dirname "$0")" || { echo "E: Could not change directory to '$(dirname "$0")'"; exit 1; }
|
||||
|
||||
gladevcp -u ./meter_scale.py ./meter_scale.ui &
|
||||
|
||||
# wait for gladevcp startup
|
||||
sleep 3
|
||||
# start sim_pin to exercise pins
|
||||
sim_pin \
|
||||
meter_scale.hal_table1/mode=toggle \
|
||||
meter_scale.max-value \
|
||||
meter_scale.meter \
|
||||
|
||||
exit 0
|
||||
8
configs/sim/axis/gladevcp/set-param-from-ini.txt
Normal file
8
configs/sim/axis/gladevcp/set-param-from-ini.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
set-param-from-ini: setting HAL widgets programmatically
|
||||
|
||||
Files:
|
||||
set-param-from-ini.ini ini file with [METER]MAX
|
||||
set-param-from-ini.txt (this)
|
||||
set-param-from-ini.tcl starts gladevcp and sim_pin
|
||||
meter_scale.py gladevcp file
|
||||
meter_scale.ui gladevcp file
|
||||
8
configs/sim/axis/gladevcp/set-param-from-ini_es.txt
Normal file
8
configs/sim/axis/gladevcp/set-param-from-ini_es.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
set-param-from-ini: establecer widgets HAL por programacion
|
||||
|
||||
Ficheros:
|
||||
set-param-from-ini.ini fichero ini con [METER]MAX
|
||||
set-param-from-ini.txt (esto)
|
||||
set-param-from-ini.tcl arrancar gladevcp y sim_pin
|
||||
meter_scale.py fichero gladevcp
|
||||
meter_scale.ui fichero gladevcp
|
||||
1
configs/sim/axis/gladevcp/sim.tbl
Symbolic link
1
configs/sim/axis/gladevcp/sim.tbl
Symbolic link
@@ -0,0 +1 @@
|
||||
../../sim.tbl
|
||||
73
configs/sim/axis/gladevcp/test.ui
Normal file
73
configs/sim/axis/gladevcp/test.ui
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.22.2 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.20"/>
|
||||
<requires lib="gladevcp" version="0.0"/>
|
||||
<object class="EMC_Action_Python" id="print_message">
|
||||
<property name="command">print(ACTION.SET_DISPLAY_MESSAGE('GLADE defined button Pressed'))</property>
|
||||
<property name="is_homed">False</property>
|
||||
<property name="is_idle">False</property>
|
||||
<property name="is_on">False</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="window1">
|
||||
<property name="can_focus">False</property>
|
||||
<child type="titlebar">
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkGrid" id="grid1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button1">
|
||||
<property name="label" translatable="yes">button python command</property>
|
||||
<property name="related_action">print_message</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="action_name">print_message</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button2">
|
||||
<property name="label" translatable="yes">button handler call
|
||||
</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<signal name="clicked" handler="on_button_press" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
39
configs/sim/axis/gladevcp/test_handler.py
Normal file
39
configs/sim/axis/gladevcp/test_handler.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import hal
|
||||
|
||||
# Import core libraries
|
||||
from gladevcp.core import Info, Action
|
||||
|
||||
# Instantiate libraries
|
||||
INFO = Info()
|
||||
ACTION = Action()
|
||||
|
||||
def get_handlers(halcomp,builder,useropts):
|
||||
return [HandlerClass(halcomp,builder,useropts)]
|
||||
|
||||
class HandlerClass:
|
||||
'''
|
||||
class with gladevcp callback handlers
|
||||
'''
|
||||
|
||||
# general button callback function with some sample code
|
||||
def on_button_press(self, widget, data=None):
|
||||
print(widget, data)
|
||||
print('Max Feed Override INI setting:',INFO.MAX_FEED_OVERRIDE)
|
||||
ACTION.SET_DISPLAY_MESSAGE('Handler defined button Pressed')
|
||||
|
||||
def __init__(self, halcomp,builder,useropts):
|
||||
'''
|
||||
Handler classes are instantiated in the following state:
|
||||
- the widget tree is created, but not yet realized (no toplevel window.show() executed yet)
|
||||
- the halcomp HAL component is set up and the widhget tree's HAL pins have already been added to it
|
||||
- it is safe to add more hal pins because halcomp.ready() has not yet been called at this point.
|
||||
|
||||
after all handlers are instantiated in command line and get_handlers() order, callbacks will be
|
||||
connected with connect_signals()/signal_autoconnect()
|
||||
|
||||
The builder may be either of libglade or GtkBuilder type depending on the glade file format.
|
||||
'''
|
||||
|
||||
self.halcomp = halcomp
|
||||
self.builder = builder
|
||||
|
||||
Reference in New Issue
Block a user