PID problem after new installation

More
25 Feb 2020 14:21 #158457 by Moglis
I have made an fresh installation to linuxcnc 2.7.15 on debian wheezy.The old version was the 2.7.14 . After the installation my machine has big following error and i found difficulty with the pid tuning. All the parameters are taken from the old version in which i did not have following errors or problem with the pid configuration. Does anyone know what could be wrong?

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

More
25 Feb 2020 14:42 #158460 by PCW
There was a bugfix in the PID component that can cause this issue.
(the bugfix exposes hal file errors related to the PIDs command derivative pin)

Can you post your hal and ini files?

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

More
25 Feb 2020 14:56 #158461 by Moglis
# Generated by PNCconf at Tue Feb 25 08:55:44 2020
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

loadrt trivkins

loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES

loadrt hostmot2

loadrt hm2_pci config=" num_encoders=3 num_pwmgens=0 num_stepgens=0 sserial_port_0=000xxx"

setp hm2_5i25.0.watchdog.timeout_ns 50000000

loadrt hal_parport cfg="0 out"
loadrt pid names=pid.x,pid.y,pid.z,pid.s

addf parport.0.read servo-thread
addf hm2_5i25.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.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf parport.0.write servo-thread
addf hm2_5i25.0.write servo-thread

########################################################
E-STOP LATCH
loadrt estop_latch
addf estop-latch.0 servo-thread

########################################################
E-STOP SIGNALS

net estop-loopout iocontrol.0.emc-enable-in <= estop-latch.0.ok-out
net estop-loopin iocontrol.0.user-enable-out => estop-latch.0.ok-in
net estop-reset iocontrol.0.user-request-enable => estop-latch.0.reset
net EstopExt => estop-latch.0.fault-in

########################################################
EXTERNAL E-STOP
net EstopExt <= hm2_5i25.0.7i77.0.0.input-00-not

######################################################
INPUT JOGS
net jog-x-pos <= hm2_5i25.0.7i77.0.0.input-02 # JOG X+
net jog-x-neg <= hm2_5i25.0.7i77.0.0.input-03 # JOG X-

net jog-y-pos <= hm2_5i25.0.7i77.0.0.input-04 # JOG Y+
net jog-y-neg <= hm2_5i25.0.7i77.0.0.input-05 # JOG Y-

net jog-z-pos <= hm2_5i25.0.7i77.0.0.input-06 # JOG Z+
net jog-z-neg <= hm2_5i25.0.7i77.0.0.input-07 # JOG Z-

########################################################
INPUT LIMIT SWITCHES SIGNALS

net min-x <= hm2_5i25.0.7i77.0.0.input-08 # MIN-X
net max-x <= hm2_5i25.0.7i77.0.0.input-09 # MAX-X
net home-x <= hm2_5i25.0.7i77.0.0.input-24 # HOME-X

net min-y <= hm2_5i25.0.7i77.0.0.input-10 # MIN-Y
net max-y <= hm2_5i25.0.7i77.0.0.input-11 # MAX-Y
net home-y <= hm2_5i25.0.7i77.0.0.input-25 # HOME-Y

net min-z <= hm2_5i25.0.7i77.0.0.input-12 # MIN-Z
net max-z <= hm2_5i25.0.7i77.0.0.input-13 # MAX-Z
net home-z <= hm2_5i25.0.7i77.0.0.input-26 # HOME-Z
########################################################
INPUT DRIVE SIGNALS

net DriveReadyX <= hm2_5i25.0.7i77.0.0.input-16 # drive-x ready
net DriveFaultX <= hm2_5i25.0.7i77.0.0.input-17-not # drive-x fault

net DriveReadyY <= hm2_5i25.0.7i77.0.0.input-18 # drive-y ready
net DriveFaultY <= hm2_5i25.0.7i77.0.0.input-19-not # drive-y fault

net DriveReadyZ <= hm2_5i25.0.7i77.0.0.input-20 # drive-z ready
net DriveFaultZ <= hm2_5i25.0.7i77.0.0.input-21-not # drive-z fault

net probe <= hm2_5i25.0.7i77.0.0.input-01 # probe Z signal
net probe-protection <= hm2_5i25.0.7i77.0.0.input-15 # probe Z protection
net probe => motion.probe-input

########################################################
OUTPUT SIGNALS

net ClearFaultX => hm2_5i25.0.7i77.0.0.output-08 # clear X drive faults
net ClearFaultY => hm2_5i25.0.7i77.0.0.output-09 # clear Y drive faults
net ClearFaultZ => hm2_5i25.0.7i77.0.0.output-10 # clear Z drive faults
########################################################
MACHINE-IS-ENABLED

net machine-is-enabled => hm2_5i25.0.7i77.0.0.output-07
net machine-is-enabled => hm2_5i25.0.7i77.0.1.analogena

########################################################
MOTION CONTROL SIGNALS

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



#*******************
# AXIS X
#*******************

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

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

####################### ---PWM Generator signals/setup---

setp hm2_5i25.0.7i77.0.1.analogout0-scalemax [AXIS_0]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout0-minlim [AXIS_0]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout0-maxlim [AXIS_0]OUTPUT_MAX_LIMIT

net x-output => hm2_5i25.0.7i77.0.1.analogout0
net x-pos-cmd axis.0.motor-pos-cmd
net x-enable axis.0.amp-enable-out

#net x-enable hm2_5i25.0.7i77.0.1.analogena

######################## ---Encoder feedback signals/setup---

setp hm2_5i25.0.encoder.00.counter-mode 0
setp hm2_5i25.0.encoder.00.filter 1
setp hm2_5i25.0.encoder.00.index-invert 0
setp hm2_5i25.0.encoder.00.index-mask 0
setp hm2_5i25.0.encoder.00.index-mask-invert 0
setp hm2_5i25.0.encoder.00.scale [AXIS_0]ENCODER_SCALE

net x-pos-fb <= hm2_5i25.0.encoder.00.position
net x-vel-fb <= hm2_5i25.0.encoder.00.velocity
net x-pos-fb => axis.0.motor-pos-fb
net x-index-enable axis.0.index-enable <=> hm2_5i25.0.encoder.00.index-enable
net x-pos-rawcounts <= hm2_5i25.0.encoder.00.rawcounts

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

net home-x => axis.0.home-sw-in
net min-x => axis.0.neg-lim-sw-in
net max-x => axis.0.pos-lim-sw-in

#*******************
# AXIS Y
#*******************

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

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

#################### ---PWM Generator signals/setup---

setp hm2_5i25.0.7i77.0.1.analogout1-scalemax [AXIS_1]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout1-minlim [AXIS_1]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout1-maxlim [AXIS_1]OUTPUT_MAX_LIMIT

net y-output => hm2_5i25.0.7i77.0.1.analogout1
net y-pos-cmd axis.1.motor-pos-cmd
net y-enable axis.1.amp-enable-out

##################### ---Encoder feedback signals/setup---

setp hm2_5i25.0.encoder.01.counter-mode 0
setp hm2_5i25.0.encoder.01.filter 1
setp hm2_5i25.0.encoder.01.index-invert 0
setp hm2_5i25.0.encoder.01.index-mask 0
setp hm2_5i25.0.encoder.01.index-mask-invert 0
setp hm2_5i25.0.encoder.01.scale [AXIS_1]ENCODER_SCALE

net y-pos-fb <= hm2_5i25.0.encoder.01.position
net y-vel-fb <= hm2_5i25.0.encoder.01.velocity
net y-pos-fb => axis.1.motor-pos-fb
net y-index-enable axis.1.index-enable <=> hm2_5i25.0.encoder.01.index-enable
net y-pos-rawcounts <= hm2_5i25.0.encoder.01.rawcounts

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

net home-y => axis.1.home-sw-in
net min-y => axis.1.neg-lim-sw-in
net max-y => axis.1.pos-lim-sw-in

#*******************
# AXIS Z
#*******************

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

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

###################### ---PWM Generator signals/setup---

setp hm2_5i25.0.7i77.0.1.analogout2-scalemax [AXIS_2]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout2-minlim [AXIS_2]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout2-maxlim [AXIS_2]OUTPUT_MAX_LIMIT

net z-output => hm2_5i25.0.7i77.0.1.analogout2
net z-pos-cmd axis.2.motor-pos-cmd
net z-enable axis.2.amp-enable-out

##################### ---Encoder feedback signals/setup---

setp hm2_5i25.0.encoder.02.counter-mode 0
setp hm2_5i25.0.encoder.02.filter 1
setp hm2_5i25.0.encoder.02.index-invert 0
setp hm2_5i25.0.encoder.02.index-mask 0
setp hm2_5i25.0.encoder.02.index-mask-invert 0
setp hm2_5i25.0.encoder.02.scale [AXIS_2]ENCODER_SCALE

net z-pos-fb <= hm2_5i25.0.encoder.02.position
net z-vel-fb <= hm2_5i25.0.encoder.02.velocity
net z-pos-fb => axis.2.motor-pos-fb
net z-index-enable axis.2.index-enable <=> hm2_5i25.0.encoder.02.index-enable
net z-pos-rawcounts <= hm2_5i25.0.encoder.02.rawcounts

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

net home-z => axis.2.home-sw-in
net min-z => axis.2.neg-lim-sw-in
net max-z => axis.2.pos-lim-sw-in

#*******************
# SPINDLE S
#*******************

loadrt scale count=1
addf scale.0 servo-thread
setp scale.0.gain 1
net spindle-speed-scale motion.spindle-speed-out => scale.0.in
net spindle-speed-DAC scale.0.out => hm2_5i25.0.7i77.0.1.analogout5

####################---PID gains

setp pid.s.Pgain [SPINDLE_9]P
setp pid.s.Igain [SPINDLE_9]I
setp pid.s.Dgain [SPINDLE_9]D
setp pid.s.bias [SPINDLE_9]BIAS
setp pid.s.FF0 [SPINDLE_9]FF0
setp pid.s.FF1 [SPINDLE_9]FF1
setp pid.s.FF2 [SPINDLE_9]FF2
setp pid.s.deadband [SPINDLE_9]DEADBAND
setp pid.s.maxoutput [SPINDLE_9]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

#################### ---PWM Generator signals/setup---

setp hm2_5i25.0.7i77.0.1.analogout5-scalemax [SPINDLE_9]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout5-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout5-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT

#net spindle-output => hm2_5i25.0.7i77.0.1.analogout5
net spindle-enable => hm2_5i25.0.7i77.0.1.spinena

################### ---setup spindle control signals---

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

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

sets spindle-at-speed true


############################################################# ---HALUI signals---

net joint-select-a halui.joint.0.select
net x-is-homed halui.joint.0.is-homed
net jog-x-pos halui.jog.0.plus
net jog-x-neg halui.jog.0.minus
net jog-x-analog halui.jog.0.analog
net joint-select-b halui.joint.1.select
net y-is-homed halui.joint.1.is-homed
net jog-y-pos halui.jog.1.plus
net jog-y-neg halui.jog.1.minus
net jog-y-analog halui.jog.1.analog
net joint-select-c halui.joint.2.select
net z-is-homed halui.joint.2.is-homed
net jog-z-pos halui.jog.2.plus
net jog-z-neg halui.jog.2.minus
net jog-z-analog halui.jog.2.analog
net jog-selected-pos halui.jog.selected.plus
net jog-selected-neg halui.jog.selected.minus
net spindle-manual-cw halui.spindle.forward
net spindle-manual-ccw halui.spindle.reverse
net spindle-manual-stop halui.spindle.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.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


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

# ---estop signals---

#net estop-out <= iocontrol.0.user-enable-out
#net estop-ext => 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
25 Feb 2020 14:57 #158462 by Moglis
# Generated by PNCconf at Tue Feb 25 08:55:44 2020
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

[EMC]
MACHINE = AEGLE_machine
DEBUG = 0

[DISPLAY]
DISPLAY = gmoccapy
EDITOR = gedit
GEOMETRY = xyz

POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL

MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000

INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
#PREFERENCE_FILE_PATH = gmoccapy/preferences
GRIDS =1mm 5mm 10mm 20mm 50mm 100mm

INCREMENTS = 20mm 10mm 5mm 1mm .5mm .1mm .05mm .01mm

DEFAULT_LINEAR_VELOCITY = 100
MAX_LINEAR_VELOCITY = 100
MIN_LINEAR_VELOCITY = 1

#DEFAULT_ANGULAR_VELOCITY = 12.000000
#MAX_ANGULAR_VELOCITY = 180.000000
#MIN_ANGULAR_VELOCITY = 1.666667


[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
FEATURES = 12
ON_ABORT_COMMAND =O <on_abort> call
REMAP=M6 modalgroup=6 prolog=change_prolog ngc=change epilog=change_epilog
SUBROUTINE_PATH=/home/cnc/linuxcnc/configs/AEGLE_machine/macros

[TOOLSENSOR]
X=0
Y=0
Z=-10
MAXPROBE=-15

[CHANGE_POSITION]
X=0
Y=0
Z=0

[PYTHON]
PATH_PREPEND=python
TOPLEVEL=python/toplevel.py

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

[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i25

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

[HALUI]

[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 100
MAX_VELOCITY = 100

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

#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR

FERROR = 10
MIN_FERROR = 5

MAX_VELOCITY = 208.333333333
MAX_ACCELERATION = 800.0

P = 155
I = 1.12
D = 0.35
FF0 = 0
FF1 = 1.32
FF2 = 0.002
BIAS = 0
DEADBAND = 0.000015
MAX_OUTPUT = 208.3333

ENCODER_SCALE = 2000
OUTPUT_SCALE = 208.3333
OUTPUT_MIN_LIMIT = -208.3333
OUTPUT_MAX_LIMIT = 208.3333

MIN_LIMIT = -1386.0
MAX_LIMIT = 3.0

HOME = 0.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 50
HOME_LATCH_VEL = 0.2
#HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1

#********************
# Axis Y
#********************
[AXIS_1]
TYPE = LINEAR

FERROR = 10
MIN_FERROR = 5

MAX_VELOCITY = 208.3333
MAX_ACCELERATION = 800.0

P = 248
I = 1.08
D = 0.06
FF0 = 0
FF1 = 0.97
FF2 = 0.0033
BIAS = 0
DEADBAND = 0.000015
MAX_OUTPUT = 208.3333

ENCODER_SCALE = 2000
OUTPUT_SCALE = 208.3333
OUTPUT_MIN_LIMIT = -208.3333
OUTPUT_MAX_LIMIT = 208.3333

MIN_LIMIT = -1065.0
MAX_LIMIT = 25.0

HOME = 0.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 50
HOME_LATCH_VEL = 0.2
#HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1

#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR

FERROR = 10
MIN_FERROR = 5

MAX_VELOCITY = 333.333333333
MAX_ACCELERATION = 1000

P = 110
I = 0.19
D = 0.0056
FF0 = 0
FF1 = 0.98
FF2 = 0.0052
BIAS = 0
DEADBAND = 0.000015
MAX_OUTPUT = 333.3333

ENCODER_SCALE = 1000
OUTPUT_SCALE = 333.3333
OUTPUT_MIN_LIMIT = -333.3333
OUTPUT_MAX_LIMIT = 333.3333

MIN_LIMIT = -165.0
MAX_LIMIT = 10.0

HOME = 0.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 15
HOME_LATCH_VEL = 0.2
#HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0

#********************
# Spindle
#********************
[SPINDLE_9]
P = 0
I = 0
D = 0
FF0 = 1
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 0
OUTPUT_SCALE = 24000
OUTPUT_MIN_LIMIT = 0
OUTPUT_MAX_LIMIT = 24000

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

More
25 Feb 2020 15:15 - 25 Feb 2020 15:15 #158465 by PCW
delete all lines like:

net N-vel-cmd => pid.N.command-deriv

In your hal file, and you should be OK
Last edit: 25 Feb 2020 15:15 by PCW.

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

More
26 Feb 2020 07:44 #158512 by Moglis
Thanks a lot for your quick response. That was the problem

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

More
03 Mar 2020 13:30 #159076 by andypugh
I am thinking that this was too big a change to put in a minor version revision :-(

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

More
03 Mar 2020 15:38 #159082 by Todd Zuercher
I tend to agree. This seemingly minor fix is breaking many previously working PNCConfig generated configs that were made over a number of years which use the PID component (that is most of them).

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

Time to create page: 0.073 seconds
Powered by Kunena Forum