Unexpected Realtime Delay on task 0....

More
27 Sep 2021 00:32 #221669 by mundele
Building a PrintNC gantry style wood (and aluminum) router. I've got it homed and moving and etc.  fine tuning some resonance or "herky jerkiness" but making progress.  I've been nagged by and ignoring the error message in the title (unexpected realtime delay).  I'm running an Intel NUC that's got a quad-core pentium  Intel® Pentium® Processor N3700 (2M Cache, up to 2.40 GHz) I've :
  1. Disabled everything in the bios I could think of
  2. Tried the "isolcpus" grub parameter to use only one CPU
  3. Played with doubling the servo_period

Getting discouraged by that error.  I am running a Mesa 7i96 which I had hoped would kill need for better latency.   Yesterday I re-did config with PncConf... was helpful, my step timing was needing some adjustment and the tuner was helpful til I got to my tandem Y axis :).  My Z still has some issues but better.  

on that second PncConf run it set the servo period to 1098387 (which was my max latency in the latency test).  

BTW I have a Gen7 i5 NUC as well, had assumed it'd be worse since it's newer.  should I try it?

Any thoughts.

Please Log in or Create an account to join the conversation.

More
27 Sep 2021 00:56 - 27 Sep 2021 00:56 #221673 by PCW
Did you disable all speed switching and all CStates above 1 in the BIOS?

Also if the NUC has an Intel Ethernet chip, you must disable
IRQ coalescing. This is described in the hm2_eth manual page:

man hm2_eth
Last edit: 27 Sep 2021 00:56 by PCW.

Please Log in or Create an account to join the conversation.

More
27 Sep 2021 01:41 #221677 by mundele
I did set CState=1 in the grub config.. I didn't do anything to irq coalescing.

Please Log in or Create an account to join the conversation.

More
27 Sep 2021 01:53 #221678 by mundele
So i googled that (not at the linux machine to look at the MAN page) and the online copy of the man page says "Marvel chipset". Didn't know they had branched out from comics... Is that a typo and should it say Intel?

I've got a physical A/B switch (rotary switch) that I am using to switch between the Mesa card and access to my network. I have to use the WICD (?) debian network control to disconnect/reconnect each time. My Mesa card is on the 10.10 network and my local network is 192.168. I was seeing latency before adding the switch and I'm hoping since it's a physical piece of electrical hardware it won't add any latency issues.

I'll go back through the man page when I get back to the machine. Thank you so much for the help!!

Please Log in or Create an account to join the conversation.

More
27 Sep 2021 03:07 #221681 by PCW
Not sure if Marvell driver has the IRQ coalescing option or not

Pinging the Mesa card will give you an idea how the Ethernet is performing

As far as network access goes, I would add a USB/Ethernet dongle
so you don't need to switch back and forth. You will need to install
the network manager (to replace the very broken WICD which cannot
successfully setup dual Ethernet interfaces)

Please Log in or Create an account to join the conversation.

More
27 Sep 2021 04:21 #221683 by mundele
I had bought a dongle and never got it working. Maybe that was my issue. Will try that tomorrow.

Please Log in or Create an account to join the conversation.

More
28 Sep 2021 01:00 #221723 by mundele
Tried two separate dongles and could never get them working. In the process i uninstalled WICD and installed network-manager. Much better. I was able to script nmcli to swap networks via a shell script. Still using the switchbox.

In the process I removed that /etc/network/interfaces section that held the IRQ change.. Still seems to be fast ping-wise and latency wise although I'm still getting the error

My Z acts funky too. maybe my step rate is wrong or ? it does the herky jerky thing (X and Y are much better now) and often will overshoot the max endstop. I get Z Following Errors a lot too.

here's the INI:
[EMC]
MACHINE = printnc
DEBUG = 0
VERSION = 1.1

[DISPLAY]
DISPLAY = gmoccapy

POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 2.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = .1
PROGRAM_PREFIX = /home/matthew/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm 1in
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 6.000000
MAX_LINEAR_VELOCITY = 25.000000
MIN_LINEAR_VELOCITY = 0.500000
DEFAULT_ANGULAR_VELOCITY = 12.000000
MAX_ANGULAR_VELOCITY = 180.000000
MIN_ANGULAR_VELOCITY = 1.666667
EDITOR = gedit
GEOMETRY = xyz

[MACROS]
MACRO = mjt_test

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var
SUBROUTINE_PATH = macros

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
SERVO_PERIOD = 1000000

[HMOT]
# **** This is for info only ****
CARD0=hm2_7i96.0

[HAL]
HALUI = halui
HALFILE = printnc.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal

[HALUI]

[KINS]
JOINTS = 4
KINEMATICS = trivkins coordinates=XYYZ

[TRAJ]
# Below numbers set the sliders, are machine units per minute (GMOCCAPY). Others use Machine Units per Second. Sheesh
COORDINATES = X Y Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 18.33
MAX_LINEAR_VELOCITY = 184
POSITION_FILE = position.txt

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
TOOL_CHANGE_QUILL_UP = 1

#NOTE:
# Joint Velocity and Accel take effect before homing, Axis after. Both in mm/sec (or mm/sec squared). Had 750 prior.
# MIN/MAX AXIS limits are the limits to range of motion after homing, JOINT values of same are limits before homing. exceeding aborts motion
# 400
[AXIS_X]
MAX_VELOCITY = 184
MAX_ACCELERATION = 800
MIN_LIMIT = -5
MAX_LIMIT = 987


[JOINT_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 184
MAX_ACCELERATION = 800
MIN_LIMIT = -5
MAX_LIMIT = 987

# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 229.17
STEPGEN_MAXACCEL = 1000
P = 910.42592456
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
DIRSETUP = 10000
DIRHOLD = 10000
STEPLEN = 3500
STEPSPACE = 3500
STEP_SCALE = 100
BACKLASH = 0.0

HOME_OFFSET = -5.000000
HOME_SEARCH_VEL = -20.000000
HOME_LATCH_VEL = -5.00000
HOME_FINAL_VEL = 20.000000
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 1
#******************************************

#****************************************** 400
[AXIS_Y]
MAX_VELOCITY = 184
MAX_ACCELERATION = 800
MIN_LIMIT = -5
MAX_LIMIT = 597

[JOINT_1]
TYPE = LINEAR
HOME = 0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 184
MAX_ACCELERATION = 800
MIN_LIMIT = -5
MAX_LIMIT = 597

# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 229.17
STEPGEN_MAXACCEL = 1000
P = 910.42592456
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
DIRSETUP = 10000
DIRHOLD = 10000
STEPLEN = 3500
STEPSPACE = 3500
STEP_SCALE = 100
BACKLASH = 0.0

HOME_OFFSET = -5.000000
HOME_SEARCH_VEL = -20.00000
HOME_LATCH_VEL = -3.00000
HOME_FINAL_VEL = 50.000000
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = -2


[JOINT_2]
TYPE = LINEAR
HOME = 0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 184
MAX_ACCELERATION = 800
MIN_LIMIT = -5
MAX_LIMIT = 597

# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 229.17
STEPGEN_MAXACCEL = 1000
P = 910.42592456
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
DIRSETUP = 10000
DIRHOLD = 10000
STEPLEN = 3500
STEPSPACE = 3500
STEP_SCALE = 100
BACKLASH = 0.0

HOME_OFFSET = -5.000000
HOME_SEARCH_VEL = -20.00000
HOME_LATCH_VEL = -3.00000
HOME_FINAL_VEL = 50.000000
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = -2
#******************************************

#******************************************
[AXIS_Z]
MAX_VELOCITY = 74
MAX_ACCELERATION = 320
MIN_LIMIT = -130
MAX_LIMIT = 10

[JOINT_3]
TYPE = LINEAR
HOME = 0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 74
MAX_ACCELERATION = 320
MIN_LIMIT = -130
MAX_LIMIT = 10

# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 91.67
STEPGEN_MAXACCEL = 400
P = 910.42592456
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
DIRSETUP = 10000
DIRHOLD = 10000
STEPLEN = 3500
STEPSPACE = 3500
STEP_SCALE = 100.0

BACKLASH = 0.0

HOME_OFFSET = 10.000000
HOME_SEARCH_VEL = 10
HOME_LATCH_VEL = 5
HOME_FINAL_VEL = -20
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 0
#******************************************

[SPINDLE_0]
P = 0
I = 0
D = 0
FF0 = 1
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 2000


and Here's HAL:
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_eth board_ip="10.10.10.10" config=" num_encoders=1 num_pwmgens=0 num_stepgens=5 sserial_port_0=00xxxx"
setp hm2_7i96.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.y2,pid.z,pid.s


# mjt debounce -- Using default config from some random webpage "using debounce"
# cfg 2 means 1 debounce group with 2 filters. (one for each channel)
# delay is how many thread cycles the input has to be in the right state to "stick". < 2 takes no effect. Trying 100 for now...
# Must also change all signals to map into/out of debounce.0.0 and etc. rather than use the pin directly.

#loadrt debounce cfg=2
#setp debounce.0.delay 200
#addf debounce.0 servo-thread

#net min-home-y-raw => debounce.0.0.in
#net min-home-y2-raw => debounce.0.1.in
#net min-home-y <= debounce.0.0.out
#net min-home-y2 <= debounce.0.1.out


addf hm2_7i96.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.y2.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf hm2_7i96.0.write servo-thread

# external output signals


# external input signals

# --- MIN-HOME-X --- Added max
net min-home-x <= hm2_7i96.0.gpio.000.in_not
net max-home-x <= hm2_7i96.0.gpio.001.in_not

# --- MIN-HOME-Y ---
# debounced...
net min-home-y <= hm2_7i96.0.gpio.002.in_not
#net min-home-y-raw <= hm2_7i96.0.gpio.002.in_not

# --- MIN-HOME-Y2 ---
# debounced...
net min-home-y2 <= hm2_7i96.0.gpio.003.in_not
#net min-home-y2-raw <= hm2_7i96.0.gpio.003.in_not

# --- MAX-HOME-Z ---
net max-home-z <= hm2_7i96.0.gpio.004.in_not


#*******************
# AXIS X JOINT 0
#*******************

setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.x.maxerror 0.012700

net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output

# Step Gen signals/setup

setp hm2_7i96.0.stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp hm2_7i96.0.stepgen.00.dirhold [JOINT_0]DIRHOLD
setp hm2_7i96.0.stepgen.00.steplen [JOINT_0]STEPLEN
setp hm2_7i96.0.stepgen.00.stepspace [JOINT_0]STEPSPACE
setp hm2_7i96.0.stepgen.00.position-scale [JOINT_0]STEP_SCALE
setp hm2_7i96.0.stepgen.00.step_type 0
setp hm2_7i96.0.stepgen.00.control-type 1
setp hm2_7i96.0.stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp hm2_7i96.0.stepgen.00.maxvel [JOINT_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd <= joint.0.motor-pos-cmd
net x-vel-cmd <= joint.0.vel-cmd
net x-output <= hm2_7i96.0.stepgen.00.velocity-cmd
net x-pos-fb <= hm2_7i96.0.stepgen.00.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => hm2_7i96.0.stepgen.00.enable

# ---setup home / limit switch signals---

net min-home-x => joint.0.home-sw-in
net min-home-x => joint.0.neg-lim-sw-in
net x-pos-limit => joint.0.pos-lim-sw-in

#*******************
# AXIS Y JOINT 1
#*******************

setp pid.y.Pgain [JOINT_1]P
setp pid.y.Igain [JOINT_1]I
setp pid.y.Dgain [JOINT_1]D
setp pid.y.bias [JOINT_1]BIAS
setp pid.y.FF0 [JOINT_1]FF0
setp pid.y.FF1 [JOINT_1]FF1
setp pid.y.FF2 [JOINT_1]FF2
setp pid.y.deadband [JOINT_1]DEADBAND
setp pid.y.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.y.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.y.maxerror 0.012700

net y-index-enable <=> pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-pos-fb => pid.y.feedback
net y-output <= pid.y.output

# Step Gen signals/setup

setp hm2_7i96.0.stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp hm2_7i96.0.stepgen.01.dirhold [JOINT_1]DIRHOLD
setp hm2_7i96.0.stepgen.01.steplen [JOINT_1]STEPLEN
setp hm2_7i96.0.stepgen.01.stepspace [JOINT_1]STEPSPACE
setp hm2_7i96.0.stepgen.01.position-scale [JOINT_1]STEP_SCALE
setp hm2_7i96.0.stepgen.01.step_type 0
setp hm2_7i96.0.stepgen.01.control-type 1
setp hm2_7i96.0.stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp hm2_7i96.0.stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net y-pos-cmd <= joint.1.motor-pos-cmd
net y-vel-cmd <= joint.1.vel-cmd
net y-output <= hm2_7i96.0.stepgen.01.velocity-cmd
net y-pos-fb <= hm2_7i96.0.stepgen.01.position-fb
net y-pos-fb => joint.1.motor-pos-fb
net y-enable <= joint.1.amp-enable-out
net y-enable => hm2_7i96.0.stepgen.01.enable

# ---setup home / limit switch signals---

net min-home-y => joint.1.home-sw-in
net min-home-y => joint.1.neg-lim-sw-in
net y-pos-limit => joint.1.pos-lim-sw-in

# ENTIRE block below copied/pasted from Y to Y2 and Joint 1 to 2
#*******************
# AXIS Y2 JOINT 2
#*******************

setp pid.y2.Pgain [JOINT_2]P
setp pid.y2.Igain [JOINT_2]I
setp pid.y2.Dgain [JOINT_2]D
setp pid.y2.bias [JOINT_2]BIAS
setp pid.y2.FF0 [JOINT_2]FF0
setp pid.y2.FF1 [JOINT_2]FF1
setp pid.y2.FF2 [JOINT_2]FF2
setp pid.y2.deadband [JOINT_2]DEADBAND
setp pid.y2.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.y2.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.y2.maxerror 0.012700

net y2-index-enable <=> pid.y2.index-enable
net y2-enable => pid.y2.enable
net y2-pos-cmd => pid.y2.command
net y2-pos-fb => pid.y2.feedback
net y2-output <= pid.y2.output

# Step Gen signals/setup

setp hm2_7i96.0.stepgen.02.dirsetup [JOINT_2]DIRSETUP
setp hm2_7i96.0.stepgen.02.dirhold [JOINT_2]DIRHOLD
setp hm2_7i96.0.stepgen.02.steplen [JOINT_2]STEPLEN
setp hm2_7i96.0.stepgen.02.stepspace [JOINT_2]STEPSPACE
setp hm2_7i96.0.stepgen.02.position-scale [JOINT_2]STEP_SCALE
setp hm2_7i96.0.stepgen.02.step_type 0
setp hm2_7i96.0.stepgen.02.control-type 1
setp hm2_7i96.0.stepgen.02.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp hm2_7i96.0.stepgen.02.maxvel [JOINT_2]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net y2-pos-cmd <= joint.2.motor-pos-cmd
net y2-vel-cmd <= joint.2.vel-cmd
net y2-output <= hm2_7i96.0.stepgen.02.velocity-cmd
net y2-pos-fb <= hm2_7i96.0.stepgen.02.position-fb
net y2-pos-fb => joint.2.motor-pos-fb
net y2-enable <= joint.2.amp-enable-out
net y2-enable => hm2_7i96.0.stepgen.02.enable

# ---setup home / limit switch signals---

net min-home-y2 => joint.2.home-sw-in
net min-home-y2 => joint.2.neg-lim-sw-in
net y2-pos-limit => joint.2.pos-lim-sw-in

# ALL Below updated to Joint 3 for Z
#*******************
# AXIS Z JOINT 3
#*******************

setp pid.z.Pgain [JOINT_3]P
setp pid.z.Igain [JOINT_3]I
setp pid.z.Dgain [JOINT_3]D
setp pid.z.bias [JOINT_3]BIAS
setp pid.z.FF0 [JOINT_3]FF0
setp pid.z.FF1 [JOINT_3]FF1
setp pid.z.FF2 [JOINT_3]FF2
setp pid.z.deadband [JOINT_3]DEADBAND
setp pid.z.maxoutput [JOINT_3]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.012700

net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output

# Step Gen signals/setup

setp hm2_7i96.0.stepgen.03.dirsetup [JOINT_3]DIRSETUP
setp hm2_7i96.0.stepgen.03.dirhold [JOINT_3]DIRHOLD
setp hm2_7i96.0.stepgen.03.steplen [JOINT_3]STEPLEN
setp hm2_7i96.0.stepgen.03.stepspace [JOINT_3]STEPSPACE
setp hm2_7i96.0.stepgen.03.position-scale [JOINT_3]STEP_SCALE
setp hm2_7i96.0.stepgen.03.step_type 0
setp hm2_7i96.0.stepgen.03.control-type 1
setp hm2_7i96.0.stepgen.03.maxaccel [JOINT_3]STEPGEN_MAXACCEL
setp hm2_7i96.0.stepgen.03.maxvel [JOINT_3]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net z-pos-cmd <= joint.3.motor-pos-cmd
net z-vel-cmd <= joint.3.vel-cmd
net z-output <= hm2_7i96.0.stepgen.03.velocity-cmd
net z-pos-fb <= hm2_7i96.0.stepgen.03.position-fb
net z-pos-fb => joint.3.motor-pos-fb
net z-enable <= joint.3.amp-enable-out
net z-enable => hm2_7i96.0.stepgen.03.enable

# ---setup home / limit switch signals---

net max-home-z => joint.3.home-sw-in
net z-neg-limit => joint.3.neg-lim-sw-in
net max-home-z => joint.3.pos-lim-sw-in

#*******************
# SPINDLE
#*******************

setp pid.s.Pgain [SPINDLE_0]P
setp pid.s.Igain [SPINDLE_0]I
setp pid.s.Dgain [SPINDLE_0]D
setp pid.s.bias [SPINDLE_0]BIAS
setp pid.s.FF0 [SPINDLE_0]FF0
setp pid.s.FF1 [SPINDLE_0]FF1
setp pid.s.FF2 [SPINDLE_0]FF2
setp pid.s.deadband [SPINDLE_0]DEADBAND
setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
setp pid.s.error-previous-target true

net spindle-index-enable <=> pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm => pid.s.command
net spindle-vel-fb-rpm => pid.s.feedback
net spindle-output <= pid.s.output

# ---setup spindle control signals---

net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-vel-cmd-rpm <= spindle.0.speed-out
net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-enable <= spindle.0.on
net spindle-cw <= spindle.0.forward
net spindle-ccw <= spindle.0.reverse
net spindle-brake <= spindle.0.brake
net spindle-revs => spindle.0.revs
net spindle-at-speed => spindle.0.at-speed
net spindle-vel-fb-rps => spindle.0.speed-in
net spindle-index-enable <=> spindle.0.index-enable

# ---Setup spindle at speed signals---

sets spindle-at-speed true


#******************************
# connect miscellaneous signals
#******************************

# ---HALUI signals---

net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-y halui.axis.y.select
net jog-y-pos halui.axis.y.plus
net jog-y-neg halui.axis.y.minus
net jog-y-analog halui.axis.y.analog
net y-is-homed halui.joint.1.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.2.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net spindle-manual-cw halui.spindle.0.forward
net spindle-manual-ccw halui.spindle.0.reverse
net spindle-manual-stop halui.spindle.0.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi

# ---coolant signals---

net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood

# ---probe signal---

net probe-in => motion.probe-input

# ---motion control signals---

net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled

# ---digital in / out signals---

# ---estop signals---

net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in

# ---manual tool change signals---

loadusr -W hal_manualtoolchange
net tool-change-request iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-change-confirmed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

Please Log in or Create an account to join the conversation.

More
28 Sep 2021 01:05 #221724 by PCW
What is latency with:

latency-histogram --nobase --sbinsize 1000

Please Log in or Create an account to join the conversation.

More
28 Sep 2021 13:01 - 28 Sep 2021 13:02 #221748 by mundele
Not really sure what I’m looking at but here y go. One with glxgears, one without.

i.imgur.com/nlgPKPC.jpg

i.imgur.com/8EnHZwQ.jpg
 
Last edit: 28 Sep 2021 13:02 by mundele. Reason: Img link

Please Log in or Create an account to join the conversation.

More
28 Sep 2021 15:33 #221751 by PCW
Those ave very good numbers but I suspect the test did not run long enough to get realistic numbers.

If you still get real time errors, you can try doubling the servo thread period (to 2000000)
if you do this you should also change all the PID "P" values to 500

Please Log in or Create an account to join the conversation.

Moderators: cmorley
Time to create page: 0.106 seconds
Powered by Kunena Forum