This commit is contained in:
Thaddeus-Maximus
2026-04-03 15:58:58 -05:00
commit f3953d66ae
1516 changed files with 586639 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,6 @@
La configuración sim es un conjunto de archivos
que dan una demostración de algunos de los widgets de pyvcp
Nota:
El widget de barra cambia de color en ciertos rangos de valores.
El valor de los spinboxs y los diales se puede cambiar usando señales HAL.
El multilabel cambiará el texto según la señal HAL.

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 @@
/usr/share/linuxcnc/hallib

View File

@@ -0,0 +1,16 @@
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000
0.00000000000000000

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,235 @@
# 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 = /home/linuxcnc/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]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# 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
#HOME_IS_SHARED = 1
# 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
#HOME_IS_SHARED = 1
# 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,232 @@
# 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 = /home/linuxcnc/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 = 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]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# 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
#HOME_IS_SHARED = 1
# 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
#HOME_IS_SHARED = 1
# 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,236 @@
# 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 = /home/linuxcnc/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]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# 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
#HOME_IS_SHARED = 1
# 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
#HOME_IS_SHARED = 1
# 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,24 @@
T1 P1 Z0.511 D3 ;3mm end mill
T2 P4 Z0.1 D1.5 ;1.5mm end mill
T3 P3 Z1.273 D5 ;5mm tap drill
T4 P2 Z10 D16 ;16 mm schaftfräser
T5 P5 Z25 D25 ;25'er fräser
T6 P6 Z6 D6 ;tool 6
T7 P7 Z7 D7 ;7
T8 P8 Z8 D8 ;8
T9 P9 Z9 D9 ;9
T10 P10 Z10 D10 ;10
T11 P11 Z11 D11 ;11
T12 P12 Z12 D12 ;12
T13 P13 Z13 D13 ;13
T14 P14 Z14 D14 ;14
T15 P15 Z15 D15 ;15
T16 P16 Z16 D16 ;16
T17 P17 Z17 D17 ;17
T18 P18 Z18 D18 ;18
T19 P19 Z19 D19 ;19
T20 P20 Z20 D20 ;20
T21 P21 Z21 D21 ;21
T22 P22 Z22 D22 ;22
T23 P23 Z23 D23 ;23
T24 P24 Z24 D24 ;24

View File

@@ -0,0 +1,119 @@
5161 0.000000
5162 0.000000
5163 0.000000
5164 0.000000
5165 0.000000
5166 0.000000
5167 0.000000
5168 0.000000
5169 0.000000
5181 0.000000
5182 0.000000
5183 0.000000
5184 0.000000
5185 0.000000
5186 0.000000
5187 0.000000
5188 0.000000
5189 0.000000
5210 0.000000
5211 0.000000
5212 0.000000
5213 0.000000
5214 0.000000
5215 0.000000
5216 0.000000
5217 0.000000
5218 0.000000
5219 0.000000
5220 1.000000
5221 0.000000
5222 0.000000
5223 0.000000
5224 0.000000
5225 0.000000
5226 0.000000
5227 0.000000
5228 0.000000
5229 0.000000
5230 0.000000
5241 0.000000
5242 0.000000
5243 0.000000
5244 0.000000
5245 0.000000
5246 0.000000
5247 0.000000
5248 0.000000
5249 0.000000
5250 0.000000
5261 0.000000
5262 0.000000
5263 0.000000
5264 0.000000
5265 0.000000
5266 0.000000
5267 0.000000
5268 0.000000
5269 0.000000
5270 0.000000
5281 0.000000
5282 0.000000
5283 0.000000
5284 0.000000
5285 0.000000
5286 0.000000
5287 0.000000
5288 0.000000
5289 0.000000
5290 0.000000
5301 0.000000
5302 0.000000
5303 0.000000
5304 0.000000
5305 0.000000
5306 0.000000
5307 0.000000
5308 0.000000
5309 0.000000
5310 0.000000
5321 0.000000
5322 0.000000
5323 0.000000
5324 0.000000
5325 0.000000
5326 0.000000
5327 0.000000
5328 0.000000
5329 0.000000
5330 0.000000
5341 0.000000
5342 0.000000
5343 0.000000
5344 0.000000
5345 0.000000
5346 0.000000
5347 0.000000
5348 0.000000
5349 0.000000
5350 0.000000
5361 0.000000
5362 0.000000
5363 0.000000
5364 0.000000
5365 0.000000
5366 0.000000
5367 0.000000
5368 0.000000
5369 0.000000
5370 0.000000
5381 0.000000
5382 0.000000
5383 0.000000
5384 0.000000
5385 0.000000
5386 0.000000
5387 0.000000
5388 0.000000
5389 0.000000
5390 0.000000

View File

@@ -0,0 +1,119 @@
5161 0.000000
5162 0.000000
5163 0.000000
5164 0.000000
5165 0.000000
5166 0.000000
5167 0.000000
5168 0.000000
5169 0.000000
5181 0.000000
5182 0.000000
5183 0.000000
5184 0.000000
5185 0.000000
5186 0.000000
5187 0.000000
5188 0.000000
5189 0.000000
5210 0.000000
5211 0.000000
5212 0.000000
5213 0.000000
5214 0.000000
5215 0.000000
5216 0.000000
5217 0.000000
5218 0.000000
5219 0.000000
5220 1.000000
5221 0.000000
5222 0.000000
5223 0.000000
5224 0.000000
5225 0.000000
5226 0.000000
5227 0.000000
5228 0.000000
5229 0.000000
5230 0.000000
5241 0.000000
5242 0.000000
5243 0.000000
5244 0.000000
5245 0.000000
5246 0.000000
5247 0.000000
5248 0.000000
5249 0.000000
5250 0.000000
5261 0.000000
5262 0.000000
5263 0.000000
5264 0.000000
5265 0.000000
5266 0.000000
5267 0.000000
5268 0.000000
5269 0.000000
5270 0.000000
5281 0.000000
5282 0.000000
5283 0.000000
5284 0.000000
5285 0.000000
5286 0.000000
5287 0.000000
5288 0.000000
5289 0.000000
5290 0.000000
5301 0.000000
5302 0.000000
5303 0.000000
5304 0.000000
5305 0.000000
5306 0.000000
5307 0.000000
5308 0.000000
5309 0.000000
5310 0.000000
5321 0.000000
5322 0.000000
5323 0.000000
5324 0.000000
5325 0.000000
5326 0.000000
5327 0.000000
5328 0.000000
5329 0.000000
5330 0.000000
5341 0.000000
5342 0.000000
5343 0.000000
5344 0.000000
5345 0.000000
5346 0.000000
5347 0.000000
5348 0.000000
5349 0.000000
5350 0.000000
5361 0.000000
5362 0.000000
5363 0.000000
5364 0.000000
5365 0.000000
5366 0.000000
5367 0.000000
5368 0.000000
5369 0.000000
5370 0.000000
5381 0.000000
5382 0.000000
5383 0.000000
5384 0.000000
5385 0.000000
5386 0.000000
5387 0.000000
5388 0.000000
5389 0.000000
5390 0.000000