Import LinuxCNC source tree

This commit is contained in:
Wang Dequan
2026-08-20 06:17:39 +08:00
commit 2c814634c3
9429 changed files with 10556013 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
The sim configuration is a set of files
that shows a demo of some of the pyvcp_widgets
note:
The bar widget changes color at certain value ranges.
The value of spinboxs and dials can be changed using HAL signals.
The multilabel will change text depending on the HAL signal.

View File

@@ -0,0 +1,40 @@
# #########################################
# Example hal file showing some linkages
# of pyvcp_widgets
# top row of scales and spinboxes
net scale2spin1 pyvcp.scale0-f => pyvcp.spinbox.0.param_pin => pyvcp.number0
net scale2spin3 pyvcp.scale1-f => pyvcp.spinbox.1.param_pin => pyvcp.number1
net scale2spin5 pyvcp.scale2-f => pyvcp.spinbox.2.param_pin => pyvcp.number2
# second row of dials and scales
net dial2scale0 pyvcp.scale.3.param_pin <= pyvcp.dial0
net dial2scale2 pyvcp.scale.4.param_pin <= pyvcp.dial1
net dial2scale4 pyvcp.scale.5.param_pin <= pyvcp.dial2
# third row of label and led activating radio buttons
net 1pressed pyvcp.multilabel.0.legend0 <= pyvcp.radio0.one
net 2pressed pyvcp.multilabel.0.legend1 <= pyvcp.radio0.two
net 3pressed pyvcp.multilabel.0.legend2 <= pyvcp.radio0.three
net 4pressed pyvcp.multilabel.1.legend0 <= pyvcp.radio1.four
net 5pressed pyvcp.multilabel.1.legend1 <= pyvcp.radio1.five
net 6pressed pyvcp.multilabel.1.legend2 <= pyvcp.radio1.six
net cb0active pyvcp.checkbutton0 => pyvcp.led0
net cb1active pyvcp.checkbutton1 => pyvcp.led1
net cb2active pyvcp.checkbutton2 => pyvcp.led2
net cb3active pyvcp.checkbutton3 => pyvcp.led3
net cb4active pyvcp.checkbutton4 => pyvcp.led4
net cb5active pyvcp.checkbutton5 => pyvcp.led5
# fourth row checkboxes with checkbox0 toggled by push button
net toggle0 pyvcp.checkbutton0.changepin <= pyvcp.toggle-button0
net toggle1 pyvcp.checkbutton5.changepin <= pyvcp.toggle-button1
# sixth row 3 colour bar activated by slider
net bar1 pyvcp.my-bar <= pyvcp.my-hscale-f

View File

@@ -0,0 +1,9 @@
# #########################################
# Example hal file showing some linkages
# of pyvcp_widgets
# second row of dials and scales
net dial2scale0 pyvcp.scale.0.param_pin <= pyvcp.dial0
net dial2scale1 pyvcp.scale.1.param_pin <= pyvcp.dial1
net dial2scale2 pyvcp.scale.2.param_pin <= pyvcp.dial2
net dial2scale3 pyvcp.scale.3.param_pin <= pyvcp.dial3

View File

@@ -0,0 +1,226 @@
# EMC controller parameters for a simulated machine.
# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.
# General section -------------------------------------------------------------
[EMC]
# Version of this INI file
VERSION = 1.1
# Name of machine, for use with display, etc.
MACHINE = Pyvcp_demo1
# Name of NML file to use, default is emc.nml
#NML_FILE = emc.nml
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
# DEBUG = 0x7FFFFFFF
DEBUG = 0
# Sections for display options ------------------------------------------------
[DISPLAY]
DISPLAY = axis
PYVCP = pyvcp_bottom_panel.xml
# places the pyvcp panel at the bottom of the Axis window
PYVCP_POSITION = BOTTOM
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = doc/help.txt
# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE
# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL
# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
MAX_SPINDLE_OVERRIDE = 1.0
# Prefix to be used
PROGRAM_PREFIX = /media/imac/linuxcnc/nc_files
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
#EDITOR = geany
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm
#INCREMENTS = 1 mm, .01 in, .1mm, 1 mil, .1 mil, 1/8000 in
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script
PROGRAM_EXTENSION = .nc, .NC
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
dxf = image-to-gcode
py = python3
nc = /usr/bin/axis
# Task controller section -----------------------------------------------------
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = sim_mm.var
# Motion control section ------------------------------------------------------
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# BASE_PERIOD is unused in this configuration but specified in core_sim.hal
BASE_PERIOD = 0
# Servo task period, in nano-seconds
SERVO_PERIOD = 1000000
# Hardware Abstraction Layer section --------------------------------------------------
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.001
# Part program interpreter section --------------------------------------------
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = core_sim.hal
HALFILE = axis_manualtoolchange.hal
HALFILE = simulated_home.hal
#HALFILE = gamepad.hal
# list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta
# Single file that is executed after the GUI has started. Only supported by
# AXIS at this time (only AXIS creates a HAL component of its own)
POSTGUI_HALFILE = pyvcp_bottom_panel.hal
HALUI = halui
[HALUI]
# add halui MDI commands here (max 64)
# Trajectory planner section --------------------------------------------------
[TRAJ]
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 30.48
MAX_LINEAR_VELOCITY = 53.34
DEFAULT_LINEAR_ACCELERATION = 508
MAX_LINEAR_ACCELERATION = 508
POSITION_FILE = position_mm.txt
# Axes sections ---------------------------------------------------------------
# First axis
[EMCIO]
# tool table file
TOOL_TABLE = sim_mm.tbl
TOOL_CHANGE_POSITION = 0 0 50.8
#RANDOM_TOOLCHANGER = 1
[KINS]
KINEMATICS = trivkins
JOINTS = 3
[AXIS_X]
MIN_LIMIT = -254
MAX_LIMIT = 254
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -254
MAX_LIMIT = 254
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 0
# Second axis
[AXIS_Y]
MIN_LIMIT = -254
MAX_LIMIT = 254
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -254
MAX_LIMIT = 254
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
#HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
# Third axis
[AXIS_Z]
MIN_LIMIT = -150
MAX_LIMIT = 101.6
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -150
MAX_LIMIT = 101.6
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
#HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
# section for main IO controller parameters -----------------------------------

View File

@@ -0,0 +1,136 @@
<?xml version='1.0' encoding='UTF-8'?>
<pyvcp>
<hbox>
<labelframe>
<bd>2</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>100</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>100</max_>
<text>"Dial 0"</text>
<initval>5</initval>
<resolution>1</resolution>
<halpin>"dial0"</halpin>
<dialcolor>"yellow"</dialcolor>
<edgecolor>"green"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<scale>
<width>"15"</width>
<halpin>"scale0"</halpin>
<resolution>1</resolution>
<orient>VERTICAL</orient>
<initval>20</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
<label>
<text>" "</text>
</label>
<labelframe>
<bd>2</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>100</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>100</max_>
<text>"Dial 1"</text>
<initval>10</initval>
<resolution>0.1</resolution>
<halpin>"dial1"</halpin>
<dialcolor>"green"</dialcolor>
<edgecolor>"red"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<scale>
<width>"15"</width>
<halpin>"scale1"</halpin>
<resolution>0.1</resolution>
<orient>VERTICAL</orient>
<initval>10</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
<label>
<text>" "</text>
</label>
<labelframe>
<bd>2</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>100</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>100</max_>
<text>"Dial 2"</text>
<initval>15</initval>
<resolution>0.01</resolution>
<halpin>"dial2"</halpin>
<dialcolor>"yellow"</dialcolor>
<edgecolor>"green"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<scale>
<width>"15"</width>
<halpin>"scale2"</halpin>
<resolution>0.01</resolution>
<orient>VERTICAL</orient>
<initval>1</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
<label>
<text>" "</text>
</label>
<labelframe>
<bd>2</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>100</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>100</max_>
<text>"Dial 3"</text>
<initval>20</initval>
<resolution>0.001</resolution>
<halpin>"dial3"</halpin>
<dialcolor>"green"</dialcolor>
<edgecolor>"red"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<scale>
<width>"15"</width>
<halpin>"scale3"</halpin>
<resolution>0.001</resolution>
<orient>VERTICAL</orient>
<initval>10</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
</hbox>
</pyvcp>

View File

@@ -0,0 +1,223 @@
# EMC controller parameters for a simulated machine.
# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.
# General section -------------------------------------------------------------
[EMC]
# Version of this INI file
VERSION = 1.1
# Name of machine, for use with display, etc.
MACHINE = Pyvcp_demo1
# Name of NML file to use, default is emc.nml
#NML_FILE = emc.nml
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
# DEBUG = 0x7FFFFFFF
DEBUG = 0
# Sections for display options ------------------------------------------------
[DISPLAY]
DISPLAY = axis
PYVCP = pyvcp_demo1.xml
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = doc/help.txt
# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE
# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL
# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
MAX_SPINDLE_OVERRIDE = 1.0
# Prefix to be used
PROGRAM_PREFIX = /root/emc2/ngc/
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
#EDITOR = geany
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm
#INCREMENTS = 1 mm, .01 in, .1mm, 1 mil, .1 mil, 1/8000 in
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script
PROGRAM_EXTENSION = .nc, .NC
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
dxf = image-to-gcode
py = python3
nc = /usr/bin/axis
# Task controller section -----------------------------------------------------
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = sim_mm.var
# Motion control section ------------------------------------------------------
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# BASE_PERIOD is unused in this configuration but specified in core_sim.hal
BASE_PERIOD = 0
# Servo task period, in nano-seconds
SERVO_PERIOD = 1000000
# Hardware Abstraction Layer section --------------------------------------------------
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.001
# Part program interpreter section --------------------------------------------
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = core_sim.hal
HALFILE = axis_manualtoolchange.hal
HALFILE = simulated_home.hal
#HALFILE = gamepad.hal
# list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta
# Single file that is executed after the GUI has started. Only supported by
# AXIS at this time (only AXIS creates a HAL component of its own)
POSTGUI_HALFILE = custom.hal
HALUI = halui
[HALUI]
# add halui MDI commands here (max 64)
# Trajectory planner section --------------------------------------------------
[TRAJ]
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 30.48
MAX_LINEAR_VELOCITY = 53.34
DEFAULT_LINEAR_ACCELERATION = 508
MAX_LINEAR_ACCELERATION = 508
POSITION_FILE = position_mm.txt
# Axes sections ---------------------------------------------------------------
# First axis
[EMCIO]
# tool table file
TOOL_TABLE = sim_mm.tbl
TOOL_CHANGE_POSITION = 0 0 50.8
#RANDOM_TOOLCHANGER = 1
[KINS]
KINEMATICS = trivkins
JOINTS = 3
[AXIS_X]
MIN_LIMIT = -254
MAX_LIMIT = 254
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -254
MAX_LIMIT = 254
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 0
# Second axis
[AXIS_Y]
MIN_LIMIT = -254
MAX_LIMIT = 254
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -254
MAX_LIMIT = 254
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
#HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
# Third axis
[AXIS_Z]
MIN_LIMIT = -150
MAX_LIMIT = 101.6
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -150
MAX_LIMIT = 101.6
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
#HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
# section for main IO controller parameters -----------------------------------

View File

@@ -0,0 +1,474 @@
<?xml version='1.0' encoding='UTF-8'?>
<pyvcp>
<labelframe text="Spinboxes linked to scales/number displays, shows initval and param_pin usage">
<font>("Helvetica",10)</font>
<bd>3</bd>
<relief>SUNKEN</relief>
<hbox>
<!-- stack of 3 spinboxes -->
<vbox>
<hbox>
<spinbox>
<halpin>"spinbox0"</halpin>
<min_>-12</min_>
<max_>33</max_>
<initval>10</initval>
<resolution>0.1</resolution>
<format>"2.3f"</format>
<font>("Arial",16)</font>
<param_pin>1</param_pin>
</spinbox>
</hbox>
<hbox>
<spinbox>
<halpin>"spinbox1"</halpin>
<min_>-12</min_>
<max_>33</max_>
<initval>20</initval>
<resolution>0.1</resolution>
<format>"2.3f"</format>
<font>("Arial",16)</font>
<param_pin>1</param_pin>
</spinbox>
</hbox>
<hbox>
<spinbox>
<halpin>"spinbox2"</halpin>
<min_>-12</min_>
<max_>33</max_>
<initval>30</initval>
<resolution>0.1</resolution>
<format>"2.3f"</format>
<font>("Arial",16)</font>
<param_pin>1</param_pin>
</spinbox>
</hbox>
</vbox>
<!-- stack of 3 horizontal scales in same hbox -->
<vbox>
<hbox>
<scale>
<font>("Helvetica",16)</font>
<width>"30"</width>
<halpin>"scale0"</halpin>
<resolution>1</resolution>
<orient>HORIZONTAL</orient>
<initval>5</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
<hbox>
<scale>
<font>("Helvetica",16)</font>
<width>"30"</width>
<halpin>"scale1"</halpin>
<resolution>1</resolution>
<orient>HORIZONTAL</orient>
<initval>15</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
<hbox>
<scale>
<font>("Helvetica",16)</font>
<width>"30"</width>
<halpin>"scale2"</halpin>
<resolution>1</resolution>
<orient>HORIZONTAL</orient>
<initval>25</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</vbox>
<!-- stack of 3 number displays in same hbox -->
<vbox>
<hbox>
<number>
<halpin>"number0"</halpin>
<font>("Helvetica",16)</font>
<format>"+4.4f"</format>
</number>
</hbox>
<hbox>
<number>
<halpin>"number1"</halpin>
<font>("Helvetica",16)</font>
<format>"+4.4f"</format>
</number>
</hbox>
<hbox>
<number>
<halpin>"number2"</halpin>
<font>("Helvetica",16)</font>
<format>"+4.4f"</format>
</number>
</hbox>
</vbox>
</hbox>
</labelframe>
<!-- new hbox with 3 dials -->
<labelframe text="Dials linked to scales, showing initval and param_pin usage">
<font>("Helvetica",10)</font>
<bd>3</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>150</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>100</max_>
<text>"Dial0"</text>
<initval>10</initval>
<resolution>0.01</resolution>
<halpin>"dial0"</halpin>
<dialcolor>"yellow"</dialcolor>
<edgecolor>"green"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<dial>
<size>150</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>100</max_>
<text>"Dial1"</text>
<initval>12</initval>
<resolution>0.1</resolution>
<halpin>"dial1"</halpin>
<dialcolor>"green"</dialcolor>
<edgecolor>"red"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<dial>
<size>150</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>100</max_>
<text>"Dial2"</text>
<initval>5</initval>
<resolution>1</resolution>
<halpin>"dial2"</halpin>
<dialcolor>"yellow"</dialcolor>
<edgecolor>"green"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
</hbox>
<!-- new hbox with 3 scales, spaced to sit under dials -->
<hbox>
<scale>
<font>("Helvetica",16)</font>
<width>"25"</width>
<halpin>"scale3"</halpin>
<resolution>0.01</resolution>
<orient>VERTICAL</orient>
<initval>1</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
<!-- label used as a spacer -->
<label>
<text>" "</text>
</label>
<scale>
<font>("Helvetica",16)</font>
<width>"25"</width>
<halpin>"scale4"</halpin>
<resolution>0.1</resolution>
<orient>VERTICAL</orient>
<initval>10</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
<!-- label used as a spacer -->
<label>
<text>" "</text>
</label>
<scale>
<font>("Helvetica",16)</font>
<width>"25"</width>
<halpin>"scale5"</halpin>
<resolution>1</resolution>
<orient>VERTICAL</orient>
<initval>20</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
<!-- new hbox with 3 dials -->
<labelframe text="Radio buttons linked to multi_labels showing legend selection">
<font>("Helvetica",10)</font>
<bd>3</bd>
<relief>FLAT</relief>
<hbox>
<hbox>
<vbox>
<radiobutton>
<choices>["one","two","three"]</choices>
<halpin>"radio0"</halpin>
<initval>0</initval>
</radiobutton>
</vbox>
<vbox>
<radiobutton>
<choices>["four","five","six"]</choices>
<halpin>"radio1"</halpin>
<initval>1</initval>
</radiobutton>
</vbox>
</hbox>
<hbox>
<vbox>
<multilabel>
<legends>["Radio1-Selected","Now Radio2-Selected","And Now Radio3-Selected"]</legends>
<font>("Helvetica", 10)</font>
<disable_pin>True</disable_pin>
<initval>0</initval>
</multilabel>
<multilabel>
<legends>["Radio4-Selected","Now Radio5-Selected","And Now Radio6-Selected"]</legends>
<font>("Helvetica", 10)</font>
<disable_pin>True</disable_pin>
<initval>1</initval>
</multilabel>
</vbox>
</hbox>
</hbox>
</labelframe>
<labelframe text="Checkbuttons showing initval setting / led operation and remote toggling of value">
<font>("Helvetica",10)</font>
<bd>3</bd>
<relief>GROOVE</relief>
<hbox>
<hbox>
<vbox>
<checkbutton>
<halpin>"checkbutton0"</halpin>
<text>"Button 0"</text>
<initval>1</initval>
</checkbutton>
<checkbutton>
<halpin>"checkbutton1"</halpin>
<text>"Button 1"</text>
<initval>0</initval>
</checkbutton>
<checkbutton>
<halpin>"checkbutton2"</halpin>
<text>"Button 2"</text>
<initval>0</initval>
</checkbutton>
</vbox>
</hbox>
<hbox>
<vbox>
<checkbutton>
<halpin>"checkbutton3"</halpin>
<text>"Button 3"</text>
<initval>0</initval>
</checkbutton>
<checkbutton>
<halpin>"checkbutton4"</halpin>
<text>"Button 4"</text>
<initval>1</initval>
</checkbutton>
<checkbutton>
<halpin>"checkbutton5"</halpin>
<text>"Button 5"</text>
<initval>0</initval>
</checkbutton>
</vbox>
</hbox>
<!-- hbox of labels used as a spacer -->
<hbox>
<vbox>
<label>
<text>" "</text>
</label>
<label>
<text>" "</text>
</label>
<label>
<text>" "</text>
</label>
</vbox>
</hbox>
<hbox>
<vbox>
<button>
<halpin>"toggle-button0"</halpin>
<text>"Toggle Checkbox 0"</text>
</button>
<!-- label used as a spacer -->
<label>
<text>" "</text>
</label>
<button>
<halpin>"toggle-button1"</halpin>
<text>"Toggle Checkbox 5"</text>
</button>
</vbox>
</hbox>
<!-- hbox of labels used as a spacer -->
<hbox>
<vbox>
<label>
<text>" "</text>
</label>
<label>
<text>" "</text>
</label>
<label>
<text>" "</text>
</label>
</vbox>
</hbox>
<hbox>
<vbox>
<led>
<halpin>"led0"</halpin>
<size>30</size>
<on_color>"green"</on_color>
<off_color>"red"</off_color>
</led>
<led>
<halpin>"led1"</halpin>
<size>30</size>
<on_color>"green"</on_color>
<off_color>"red"</off_color>
</led>
<led>
<halpin>"led2"</halpin>
<size>30</size>
<on_color>"green"</on_color>
<off_color>"red"</off_color>
</led>
</vbox>
</hbox>
<hbox>
<vbox>
<led>
<halpin>"led3"</halpin>
<size>30</size>
<on_color>"green"</on_color>
<off_color>"red"</off_color>
</led>
<led>
<halpin>"led4"</halpin>
<size>30</size>
<on_color>"green"</on_color>
<off_color>"red"</off_color>
</led>
<led>
<halpin>"led5"</halpin>
<size>30</size>
<on_color>"green"</on_color>
<off_color>"red"</off_color>
</led>
</vbox>
</hbox>
</hbox>
</labelframe>
<labelframe text="Bar with ranges of different colours activated by scale / labels">
<font>("Helvetica",10)</font>
<bd>3</bd>
<relief>RIDGE</relief>
<hbox>
<hbox>
<bar>
<halpin>"my-bar"</halpin>
<min_>0</min_>
<max_>150</max_>
<bgcolor>"grey"</bgcolor>
<range1>(0,100,"green")</range1>
<range2>(101,129,"orange")</range2>
<range3>(130,150,"red")</range3>
<fillcolor>"green"</fillcolor>
</bar>
</hbox>
<hbox>
<scale>
<font>("Helvetica",16)</font>
<width>"25"</width>
<halpin>"my-hscale"</halpin>
<resolution>1</resolution>
<orient>HORIZONTAL</orient>
<initval>0</initval>
<min_>0</min_>
<max_>150</max_>
</scale>
</hbox>
<!-- hbox of labels used as a spacer -->
<hbox>
<vbox>
<label>
<text>" "</text>
</label>
<label>
<text>" "</text>
</label>
<label>
<text>" "</text>
</label>
</vbox>
</hbox>
<hbox>
<vbox>
<label>
<relief>FLAT</relief>
<text>"I am a borderless label"</text>
</label>
<label>
<bd>3</bd>
<relief>RAISED</relief>
<text>"I am a raised label"</text>
</label>
<label>
<bd>3</bd>
<relief>SUNKEN</relief>
<text>"I am a sunken label"</text>
</label>
</vbox>
</hbox>
</hbox>
</labelframe>
</pyvcp>

View File

@@ -0,0 +1,8 @@
# #########################################
# Example hal file showing some linkages
# of pyvcp_widgets
#net dials1scale0 dials1.scale.0.param_pin <= dials1.dial0
#net dials1scale1 dials1.scale.1.param_pin <= dials1.dial1
#net dials2scale0 dials2.scale.0.param_pin <= dials2.dial0
#net dials2scale1 dials2.scale.1.param_pin <= dials2.dial1

View File

@@ -0,0 +1,227 @@
# EMC controller parameters for a simulated machine.
# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.
# General section -------------------------------------------------------------
[EMC]
# Version of this INI file
VERSION = 1.1
# Name of machine, for use with display, etc.
MACHINE = Pyvcp_demo1
# Name of NML file to use, default is emc.nml
#NML_FILE = emc.nml
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
# DEBUG = 0x7FFFFFFF
DEBUG = 0
# Sections for display options ------------------------------------------------
[DISPLAY]
DISPLAY = axis
# embed two PyVCP panels as tabs
EMBED_TAB_NAME = Dials1
EMBED_TAB_COMMAND = pyvcp pyvcp_embed_tab_1.xml
EMBED_TAB_NAME = Dials2
EMBED_TAB_COMMAND = pyvcp pyvcp_embed_tab_2.xml
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = doc/help.txt
# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE
# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL
# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
MAX_SPINDLE_OVERRIDE = 1.0
# Prefix to be used
PROGRAM_PREFIX = /media/imac/linuxcnc/nc_files
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
#EDITOR = geany
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm
#INCREMENTS = 1 mm, .01 in, .1mm, 1 mil, .1 mil, 1/8000 in
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script
PROGRAM_EXTENSION = .nc, .NC
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
dxf = image-to-gcode
py = python3
nc = /usr/bin/axis
# Task controller section -----------------------------------------------------
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = sim_mm.var
# Motion control section ------------------------------------------------------
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# BASE_PERIOD is unused in this configuration but specified in core_sim.hal
BASE_PERIOD = 0
# Servo task period, in nano-seconds
SERVO_PERIOD = 1000000
# Hardware Abstraction Layer section --------------------------------------------------
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.001
# Part program interpreter section --------------------------------------------
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = core_sim.hal
HALFILE = axis_manualtoolchange.hal
HALFILE = simulated_home.hal
#HALFILE = gamepad.hal
# list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta
# Single file that is executed after the GUI has started. Only supported by
# AXIS at this time (only AXIS creates a HAL component of its own)
POSTGUI_HALFILE = pyvcp_embed_tab.hal
HALUI = halui
[HALUI]
# add halui MDI commands here (max 64)
# Trajectory planner section --------------------------------------------------
[TRAJ]
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 30.48
MAX_LINEAR_VELOCITY = 53.34
DEFAULT_LINEAR_ACCELERATION = 508
MAX_LINEAR_ACCELERATION = 508
POSITION_FILE = position_mm.txt
# Axes sections ---------------------------------------------------------------
# First axis
[EMCIO]
# tool table file
TOOL_TABLE = sim_mm.tbl
TOOL_CHANGE_POSITION = 0 0 50.8
#RANDOM_TOOLCHANGER = 1
[KINS]
KINEMATICS = trivkins
JOINTS = 3
[AXIS_X]
MIN_LIMIT = -254
MAX_LIMIT = 254
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -254
MAX_LIMIT = 254
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 0
# Second axis
[AXIS_Y]
MIN_LIMIT = -254
MAX_LIMIT = 254
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -254
MAX_LIMIT = 254
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
#HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
# Third axis
[AXIS_Z]
MIN_LIMIT = -150
MAX_LIMIT = 101.6
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 30.48
MAX_ACCELERATION = 508
BACKLASH = 0.000
INPUT_SCALE = 157.48
OUTPUT_SCALE = 1.000
MIN_LIMIT = -150
MAX_LIMIT = 101.6
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
#HOME_USE_INDEX = NO
#HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
# section for main IO controller parameters -----------------------------------

View File

@@ -0,0 +1,77 @@
<?xml version='1.0' encoding='UTF-8'?>
<pyvcp>
<vbox>
<label>
<text>"Embedded Tab #1"</text>
<font>("Helvetica",14)</font>
<pady>8</pady>
</label>
<hbox>
<labelframe>
<bd>2</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>100</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>100</max_>
<text>"Dial 0"</text>
<initval>50</initval>
<resolution>1</resolution>
<halpin>"dial0"</halpin>
<dialcolor>"red"</dialcolor>
<edgecolor>"yellow"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<scale>
<width>"15"</width>
<halpin>"scale0"</halpin>
<resolution>1</resolution>
<orient>VERTICAL</orient>
<initval>50</initval>
<min_>0</min_>
<max_>100</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
<label>
<text>" "</text>
</label>
<labelframe>
<bd>2</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>100</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>10</max_>
<text>"Dial 1"</text>
<initval>5</initval>
<resolution>0.1</resolution>
<halpin>"dial1"</halpin>
<dialcolor>"green"</dialcolor>
<edgecolor>"cyan"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<scale>
<width>"15"</width>
<halpin>"scale1"</halpin>
<resolution>0.1</resolution>
<orient>VERTICAL</orient>
<initval>5</initval>
<min_>0</min_>
<max_>10</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
</hbox>
</vbox>
</pyvcp>

View File

@@ -0,0 +1,77 @@
<?xml version='1.0' encoding='UTF-8'?>
<pyvcp>
<vbox>
<label>
<text>"Embedded Tab #2"</text>
<font>("Helvetica",16)</font>
<pady>8</pady>
</label>
<hbox>
<labelframe>
<bd>2</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>100</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>1</max_>
<text>"Dial 2"</text>
<initval>0.5</initval>
<resolution>0.01</resolution>
<halpin>"dial0"</halpin>
<dialcolor>"cyan"</dialcolor>
<edgecolor>"magenta"</edgecolor>
<dotcolor>"black"</dotcolor>
<param_pin>1</param_pin>
</dial>
<scale>
<width>"15"</width>
<halpin>"scale0"</halpin>
<resolution>0.01</resolution>
<orient>VERTICAL</orient>
<initval>.5</initval>
<min_>0</min_>
<max_>1</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
<label>
<text>" "</text>
</label>
<labelframe>
<bd>2</bd>
<relief>RAISED</relief>
<hbox>
<dial>
<size>100</size>
<cpr>100</cpr>
<min_>0</min_>
<max_>0.1</max_>
<text>"Dial 3"</text>
<initval>0.05</initval>
<resolution>0.001</resolution>
<halpin>"dial1"</halpin>
<dialcolor>"yellow"</dialcolor>
<edgecolor>"red"</edgecolor>
<dotcolor>"blue"</dotcolor>
<param_pin>1</param_pin>
</dial>
<scale>
<width>"15"</width>
<halpin>"scale1"</halpin>
<resolution>0.001</resolution>
<orient>VERTICAL</orient>
<initval>0.05</initval>
<min_>0</min_>
<max_>0.1</max_>
<param_pin>1</param_pin>
</scale>
</hbox>
</labelframe>
</hbox>
</vbox>
</pyvcp>

View File

@@ -0,0 +1 @@
../sim_mm.tbl