7i80-DB + 7I76 - Example to edit or method to create config

More
7 years 3 months ago #138838 by mjoconr
Hi All

I'm looking to create a config for a MESA combination of 7i80-DB + 7I76 with XYZ stepper, touch probe, tool probe, X+Y+Z limits on both directions, 0-10 volt spindle and a spindle encoder.
The encoder might be a single pulse per rev or a proper quadrature 4000 pulse.

I'm looking for help to create this config, I just can not seem to work out how to start the process.

Thanks
Mike

Please Log in to join the conversation.

More
7 years 3 months ago #138842 by pl7i92
you shoudt have better gone with the 7i96
or the 7i92 +7i76 combination

there are realy many configs on the forum

Please Log in to join the conversation.

More
7 years 3 months ago #138849 by mjoconr
I know that now, but this is what I have. I had planned to use the cards on a different project which was going to need more step and direction ports.

Please Log in to join the conversation.

More
7 years 3 months ago #138860 by PCW
You should be able to use a 7I76E configuration created by pncconf and
just globally change the "7i76e" text in the hal file to "7i80db-16" or "7i80db-25"

Please Log in to join the conversation.

More
7 years 3 months ago #138861 by tommylight
Use pncconfig to create a config for 5i25/7i76 or 7i76E with the stepgens and I/O you need, then edit it with a text editor to point to 7i80.
Use the "search and replace" function so it takes about 1 minute to edit.

Please Log in to join the conversation.

More
7 years 3 months ago #138983 by mjoconr
Does this look correct, I'm not near the machine today and wanted to move forward.
It was generated with the pncconfig and 5i25/7i76

I assume I need something to indicate the ip address of the control board ?

HM-135.ini
Code:
[EMC] MACHINE = my_LinuxCNC_step DEBUG = 0 [DISPLAY] DISPLAY = axis 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/ INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm POSITION_FEEDBACK = ACTUAL DEFAULT_LINEAR_VELOCITY = 0.250000 MAX_LINEAR_VELOCITY = 1.000000 MIN_LINEAR_VELOCITY = 0.010000 DEFAULT_ANGULAR_VELOCITY = 0.250000 MAX_ANGULAR_VELOCITY = 1.000000 MIN_ANGULAR_VELOCITY = 0.010000 EDITOR = gedit GEOMETRY = xyz [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 [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 = my_LinuxCNC_step.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 = 2.25 MAX_LINEAR_VELOCITY = 22.50 [EMCIO] EMCIO = io CYCLE_TIME = 0.100 TOOL_TABLE = tool.tbl #******************** # Axis X #******************** [AXIS_0] TYPE = LINEAR HOME = 0.0 FERROR = 1.0 MIN_FERROR = 0.01 MAX_VELOCITY = 22.5 MAX_ACCELERATION = 750.0 # 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 = 28.12 STEPGEN_MAXACCEL = 937.50 P = 50.0 I = 0.0 D = 0.0 FF0 = 0.0 FF1 = 1.0 FF2 = 0.0 BIAS = 0.0 DEADBAND = 0.0 MAX_OUTPUT = 28.125 # these are in nanoseconds DIRSETUP = 200 DIRHOLD = 200 STEPLEN = 1000 STEPSPACE = 2000 STEP_SCALE = 500.0 MIN_LIMIT = -0.01 MAX_LIMIT = 200.0 HOME_OFFSET = 0.0 #******************** # Axis Y #******************** [AXIS_1] TYPE = LINEAR HOME = 0.0 FERROR = 1.0 MIN_FERROR = 0.01 MAX_VELOCITY = 22.5 MAX_ACCELERATION = 750.0 # 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 = 28.12 STEPGEN_MAXACCEL = 937.50 P = 50.0 I = 0.0 D = 0.0 FF0 = 0.0 FF1 = 1.0 FF2 = 0.0 BIAS = 0.0 DEADBAND = 0.0 MAX_OUTPUT = 28.125 # these are in nanoseconds DIRSETUP = 200 DIRHOLD = 200 STEPLEN = 1000 STEPSPACE = 2000 STEP_SCALE = 500.0 MIN_LIMIT = -0.01 MAX_LIMIT = 150.0 HOME_OFFSET = 0.000000 HOME_SEARCH_VEL = -1.000000 HOME_LATCH_VEL = -0.500000 HOME_FINAL_VEL = 0.000000 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS = YES #******************** # Axis Z #******************** [AXIS_2] TYPE = LINEAR HOME = 0.0 FERROR = 1.0 MIN_FERROR = 0.01 MAX_VELOCITY = 16.6666666667 MAX_ACCELERATION = 100.0 # 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 = 20.83 STEPGEN_MAXACCEL = 125.00 P = 50.0 I = 0.0 D = 0.0 FF0 = 0.0 FF1 = 1.0 FF2 = 0.0 BIAS = 0.0 DEADBAND = 0.0 MAX_OUTPUT = 20.8333333333 # these are in nanoseconds DIRSETUP = 200 DIRHOLD = 200 STEPLEN = 1000 STEPSPACE = 2000 STEP_SCALE = 2000.0 MIN_LIMIT = -270.0 MAX_LIMIT = 0.01 HOME_OFFSET = 0.000000 HOME_SEARCH_VEL = 1.000000 HOME_LATCH_VEL = 0.500000 HOME_FINAL_VEL = 0.000000 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS = YES #******************** # Spindle #******************** [SPINDLE_9] P = 0.0 I = 0.0 D = 0.0 FF0 = 1.0 FF1 = 0.0 FF2 = 0.0 BIAS = 0.0 DEADBAND = 0.0 MAX_OUTPUT = 5000.0 ENCODER_SCALE = 1.0 OUTPUT_SCALE = 10000.0 OUTPUT_MIN_LIMIT = 0.0 OUTPUT_MAX_LIMIT = 5000.0

HM-135.hal
Code:
loadrt trivkins loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES loadrt hostmot2 loadrt hm2_pci config=" num_encoders=1 num_pwmgens=0 num_stepgens=5 sserial_port_0=00xxxx" setp hm2_7i80db-16.0.watchdog.timeout_ns 5000000 loadrt pid names=pid.x,pid.y,pid.z,pid.s addf hm2_7i80db-16.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 hm2_7i80db-16.0.write servo-thread # external output signals # --- ESTOP-OUT --- net estop-out hm2_7i80db-16.0.7i76.0.0.output-00 # --- COOLANT-MIST --- net coolant-mist hm2_7i80db-16.0.7i76.0.0.output-01 # --- COOLANT-FLOOD --- net coolant-flood hm2_7i80db-16.0.7i76.0.0.output-02 # --- MACHINE-IS-ENABLED --- net machine-is-enabled hm2_7i80db-16.0.7i76.0.0.output-03 # external input signals # --- BOTH-HOME-Y --- net both-home-y <= hm2_7i80db-16.0.7i76.0.0.input-04 # --- BOTH-HOME-Z --- net both-home-z <= hm2_7i80db-16.0.7i76.0.0.input-05 # --- BOTH-HOME-A --- net both-home-a <= hm2_7i80db-16.0.7i76.0.0.input-06 # --- ESTOP-EXT --- net estop-ext <= hm2_7i80db-16.0.7i76.0.0.input-08 # --- PROBE-IN --- net probe-in <= hm2_7i80db-16.0.7i76.0.0.input-09-not # --- PROBE_IN_UP --- net Probe_In_Up <= hm2_7i80db-16.0.7i76.0.0.input-10 #******************* # 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 setp pid.x.maxerror .0005 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 # Step Gen signals/setup setp hm2_7i80db-16.0.stepgen.00.dirsetup [AXIS_0]DIRSETUP setp hm2_7i80db-16.0.stepgen.00.dirhold [AXIS_0]DIRHOLD setp hm2_7i80db-16.0.stepgen.00.steplen [AXIS_0]STEPLEN setp hm2_7i80db-16.0.stepgen.00.stepspace [AXIS_0]STEPSPACE setp hm2_7i80db-16.0.stepgen.00.position-scale [AXIS_0]STEP_SCALE setp hm2_7i80db-16.0.stepgen.00.step_type 0 setp hm2_7i80db-16.0.stepgen.00.control-type 1 setp hm2_7i80db-16.0.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAXACCEL setp hm2_7i80db-16.0.stepgen.00.maxvel [AXIS_0]STEPGEN_MAXVEL # ---closedloop stepper signals--- net x-pos-cmd <= axis.0.motor-pos-cmd net x-vel-cmd <= axis.0.joint-vel-cmd net x-output <= hm2_7i80db-16.0.stepgen.00.velocity-cmd net x-pos-fb <= hm2_7i80db-16.0.stepgen.00.position-fb net x-pos-fb => axis.0.motor-pos-fb net x-enable <= axis.0.amp-enable-out net x-enable => hm2_7i80db-16.0.stepgen.00.enable # ---setup home / limit switch signals--- net x-home-sw => axis.0.home-sw-in net x-neg-limit => axis.0.neg-lim-sw-in net x-pos-limit => 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 setp pid.y.maxerror .0005 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 # Step Gen signals/setup setp hm2_7i80db-16.0.stepgen.01.dirsetup [AXIS_1]DIRSETUP setp hm2_7i80db-16.0.stepgen.01.dirhold [AXIS_1]DIRHOLD setp hm2_7i80db-16.0.stepgen.01.steplen [AXIS_1]STEPLEN setp hm2_7i80db-16.0.stepgen.01.stepspace [AXIS_1]STEPSPACE setp hm2_7i80db-16.0.stepgen.01.position-scale [AXIS_1]STEP_SCALE setp hm2_7i80db-16.0.stepgen.01.step_type 0 setp hm2_7i80db-16.0.stepgen.01.control-type 1 setp hm2_7i80db-16.0.stepgen.01.maxaccel [AXIS_1]STEPGEN_MAXACCEL setp hm2_7i80db-16.0.stepgen.01.maxvel [AXIS_1]STEPGEN_MAXVEL # ---closedloop stepper signals--- net y-pos-cmd <= axis.1.motor-pos-cmd net y-vel-cmd <= axis.1.joint-vel-cmd net y-output <= hm2_7i80db-16.0.stepgen.01.velocity-cmd net y-pos-fb <= hm2_7i80db-16.0.stepgen.01.position-fb net y-pos-fb => axis.1.motor-pos-fb net y-enable <= axis.1.amp-enable-out net y-enable => hm2_7i80db-16.0.stepgen.01.enable # ---setup home / limit switch signals--- net both-home-y => axis.1.home-sw-in net both-home-y => axis.1.neg-lim-sw-in net both-home-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 setp pid.z.maxerror .0005 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 # Step Gen signals/setup setp hm2_7i80db-16.0.stepgen.02.dirsetup [AXIS_2]DIRSETUP setp hm2_7i80db-16.0.stepgen.02.dirhold [AXIS_2]DIRHOLD setp hm2_7i80db-16.0.stepgen.02.steplen [AXIS_2]STEPLEN setp hm2_7i80db-16.0.stepgen.02.stepspace [AXIS_2]STEPSPACE setp hm2_7i80db-16.0.stepgen.02.position-scale [AXIS_2]STEP_SCALE setp hm2_7i80db-16.0.stepgen.02.step_type 0 setp hm2_7i80db-16.0.stepgen.02.control-type 1 setp hm2_7i80db-16.0.stepgen.02.maxaccel [AXIS_2]STEPGEN_MAXACCEL setp hm2_7i80db-16.0.stepgen.02.maxvel [AXIS_2]STEPGEN_MAXVEL # ---closedloop stepper signals--- net z-pos-cmd <= axis.2.motor-pos-cmd net z-vel-cmd <= axis.2.joint-vel-cmd net z-output <= hm2_7i80db-16.0.stepgen.02.velocity-cmd net z-pos-fb <= hm2_7i80db-16.0.stepgen.02.position-fb net z-pos-fb => axis.2.motor-pos-fb net z-enable <= axis.2.amp-enable-out net z-enable => hm2_7i80db-16.0.stepgen.02.enable # ---setup home / limit switch signals--- net both-home-z => axis.2.home-sw-in net both-home-z => axis.2.neg-lim-sw-in net both-home-z => axis.2.pos-lim-sw-in #******************* # SPINDLE S #******************* 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 setp pid.s.maxerror .0005 net spindle-index-enable <=> pid.s.index-enable net spindle-enable => pid.s.enable net spindle-vel-cmd-rpm-abs => pid.s.command net spindle-vel-fb-rpm-abs => pid.s.feedback net spindle-output <= pid.s.output # ---digital potentionmeter output signals/setup--- setp hm2_7i80db-16.0.7i76.0.0.spinout-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT setp hm2_7i80db-16.0.7i76.0.0.spinout-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT setp hm2_7i80db-16.0.7i76.0.0.spinout-scalemax [SPINDLE_9]OUTPUT_SCALE net spindle-vel-cmd-abs => hm2_7i80db-16.0.7i76.0.0.spinout net machine-is-enabled => hm2_7i80db-16.0.7i76.0.0.spinena net spindle-ccw => hm2_7i80db-16.0.7i76.0.0.spindir # ---Encoder feedback signals/setup--- setp hm2_7i80db-16.0.encoder.00.counter-mode 1 setp hm2_7i80db-16.0.encoder.00.filter 1 setp hm2_7i80db-16.0.encoder.00.index-invert 0 setp hm2_7i80db-16.0.encoder.00.index-mask 0 setp hm2_7i80db-16.0.encoder.00.index-mask-invert 0 setp hm2_7i80db-16.0.encoder.00.scale [SPINDLE_9]ENCODER_SCALE net spindle-revs <= hm2_7i80db-16.0.encoder.00.position net spindle-vel-fb-rps <= hm2_7i80db-16.0.encoder.00.velocity net spindle-index-enable <=> hm2_7i80db-16.0.encoder.00.index-enable # ---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 # Use ACTUAL spindle velocity from spindle encoder # spindle-velocity bounces around so we filter it with lowpass # spindle-velocity is signed so we use absolute component to remove sign # ACTUAL velocity is in RPS not RPM so we scale it. setp scale.spindle.gain 60 setp lowpass.spindle.gain 1.000000 net spindle-vel-fb-rps => scale.spindle.in net spindle-fb-rpm scale.spindle.out => abs.spindle.in net spindle-fb-rpm-abs abs.spindle.out => lowpass.spindle.in net spindle-fb-rpm-abs-filtered lowpass.spindle.out #****************************** # connect miscellaneous signals #****************************** # ---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 # ---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-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 to join the conversation.

More
7 years 3 months ago #138988 by PCW
You would need to change:

loadrt hm2_pci config=" num_encoders=1 num_pwmgens=0 num_stepgens=5 sserial_port_0=00xxxx"

to

loadrt hm2_eth board_ip="10.10.10.10" config=" num_encoders=1 num_pwmgens=0 num_stepgens=5 sserial_port_0=00xxxx"

Assuming you are using the 10.10.10.10 IP address option on the 7I80

Also I think I was wrong on the card name, I think it is always "7i80" regardless of the FPGA size/connector options

Please Log in to join the conversation.

More
7 years 3 months ago #139044 by mjoconr
Hi All

Still not working but have progress.

So I had to comment out a section for the spindle, I'll need help to get this config adjusted once the other issues are fixed.
Code:
#setp scale.spindle.gain 60 #setp lowpass.spindle.gain 1.000000 #net spindle-vel-fb-rps => scale.spindle.in #net spindle-fb-rpm scale.spindle.out => abs.spindle.in #net spindle-fb-rpm-abs abs.spindle.out => lowpass.spindle.in #net spindle-fb-rpm-abs-filtered lowpass.spindle.out

But I'm also getting an error 'error finishing read! iter=7'
Code:
cnc@minimill:~/src/linuxcnc-dev$ linuxcnc ~/linuxcnc/configs/HM-135.ini LINUXCNC - 2.7.9 Machine configuration directory is '/home/cnc/linuxcnc/configs' Machine configuration file is 'HM-135.ini' Starting LinuxCNC... Found file(REL): ./HM-135.hal Note: Using POSIX realtime hm2: loading Mesa HostMot2 driver version 0.15 hm2_eth: loading Mesa AnyIO HostMot2 ethernet driver version 0.2 iptables v1.6.1: can't initialize iptables table `filter': Permission denied (you must be root) Perhaps iptables or your kernel needs to be upgraded. hm2_eth: ERROR: Failed to create iptables chain hm2-eth-rules-outputhm2_eth: WARNING: Unable to restrict other access to the hm2-eth device. This means that other software using the same network interface can violate realtime guarantees. See hm2_eth(9) for more information. hm2_eth: 10.10.10.10: Hardware address: 00:60:1b:10:00:50 hm2_eth: discovered 7I80DB-16 hm2/hm2_7i80.0: Smart Serial Firmware Version 43 Board hm2_7i80.0.7i76.0.0 Hardware Mode 0 = standard Board hm2_7i80.0.7i76.0.0 Software Mode 0 = io_spin Board hm2_7i80.0.7i76.0.0 Software Mode 1 = io_ana_spin Board hm2_7i80.0.7i76.0.0 Software Mode 2 = io_enc_ana_spin_fv hm2/hm2_7i80.0: 68 I/O Pins used: hm2/hm2_7i80.0: IO Pin 000 (J2-01): StepGen #0, pin Direction (Output) hm2/hm2_7i80.0: IO Pin 001 (J2-14): StepGen #0, pin Step (Output) hm2/hm2_7i80.0: IO Pin 002 (J2-02): StepGen #1, pin Direction (Output) hm2/hm2_7i80.0: IO Pin 003 (J2-15): StepGen #1, pin Step (Output) hm2/hm2_7i80.0: IO Pin 004 (J2-03): StepGen #2, pin Direction (Output) hm2/hm2_7i80.0: IO Pin 005 (J2-16): StepGen #2, pin Step (Output) hm2/hm2_7i80.0: IO Pin 006 (J2-04): StepGen #3, pin Direction (Output) hm2/hm2_7i80.0: IO Pin 007 (J2-17): StepGen #3, pin Step (Output) hm2/hm2_7i80.0: IO Pin 008 (J2-05): StepGen #4, pin Direction (Output) hm2/hm2_7i80.0: IO Pin 009 (J2-06): StepGen #4, pin Step (Output) hm2/hm2_7i80.0: IO Pin 010 (J2-07): Smart Serial Interface #0, pin TxData0 (Output) hm2/hm2_7i80.0: IO Pin 011 (J2-08): Smart Serial Interface #0, pin RxData0 (Input) hm2/hm2_7i80.0: IO Pin 012 (J2-09): IOPort hm2/hm2_7i80.0: IO Pin 013 (J2-10): IOPort hm2/hm2_7i80.0: IO Pin 014 (J2-11): Encoder #0, pin Index (Input) hm2/hm2_7i80.0: IO Pin 015 (J2-12): Encoder #0, pin B (Input) hm2/hm2_7i80.0: IO Pin 016 (J2-13): Encoder #0, pin A (Input) hm2/hm2_7i80.0: IO Pin 017 (J3-01): IOPort hm2/hm2_7i80.0: IO Pin 018 (J3-14): IOPort hm2/hm2_7i80.0: IO Pin 019 (J3-02): IOPort hm2/hm2_7i80.0: IO Pin 020 (J3-15): IOPort hm2/hm2_7i80.0: IO Pin 021 (J3-03): IOPort hm2/hm2_7i80.0: IO Pin 022 (J3-16): IOPort hm2/hm2_7i80.0: IO Pin 023 (J3-04): IOPort hm2/hm2_7i80.0: IO Pin 024 (J3-17): IOPort hm2/hm2_7i80.0: IO Pin 025 (J3-05): IOPort hm2/hm2_7i80.0: IO Pin 026 (J3-06): IOPort hm2/hm2_7i80.0: IO Pin 027 (J3-07): IOPort hm2/hm2_7i80.0: IO Pin 028 (J3-08): IOPort hm2/hm2_7i80.0: IO Pin 029 (J3-09): IOPort hm2/hm2_7i80.0: IO Pin 030 (J3-10): IOPort hm2/hm2_7i80.0: IO Pin 031 (J3-11): IOPort hm2/hm2_7i80.0: IO Pin 032 (J3-12): IOPort hm2/hm2_7i80.0: IO Pin 033 (J3-13): IOPort hm2/hm2_7i80.0: IO Pin 034 (J4-01): IOPort hm2/hm2_7i80.0: IO Pin 035 (J4-14): IOPort hm2/hm2_7i80.0: IO Pin 036 (J4-02): IOPort hm2/hm2_7i80.0: IO Pin 037 (J4-15): IOPort hm2/hm2_7i80.0: IO Pin 038 (J4-03): IOPort hm2/hm2_7i80.0: IO Pin 039 (J4-16): IOPort hm2/hm2_7i80.0: IO Pin 040 (J4-04): IOPort hm2/hm2_7i80.0: IO Pin 041 (J4-17): IOPort hm2/hm2_7i80.0: IO Pin 042 (J4-05): IOPort hm2/hm2_7i80.0: IO Pin 043 (J4-06): IOPort hm2/hm2_7i80.0: IO Pin 044 (J4-07): IOPort hm2/hm2_7i80.0: IO Pin 045 (J4-08): IOPort hm2/hm2_7i80.0: IO Pin 046 (J4-09): IOPort hm2/hm2_7i80.0: IO Pin 047 (J4-10): IOPort hm2/hm2_7i80.0: IO Pin 048 (J4-11): IOPort hm2/hm2_7i80.0: IO Pin 049 (J4-12): IOPort hm2/hm2_7i80.0: IO Pin 050 (J4-13): IOPort hm2/hm2_7i80.0: IO Pin 051 (J5-01): IOPort hm2/hm2_7i80.0: IO Pin 052 (J5-14): IOPort hm2/hm2_7i80.0: IO Pin 053 (J5-02): IOPort hm2/hm2_7i80.0: IO Pin 054 (J5-15): IOPort hm2/hm2_7i80.0: IO Pin 055 (J5-03): IOPort hm2/hm2_7i80.0: IO Pin 056 (J5-16): IOPort hm2/hm2_7i80.0: IO Pin 057 (J5-04): IOPort hm2/hm2_7i80.0: IO Pin 058 (J5-17): IOPort hm2/hm2_7i80.0: IO Pin 059 (J5-05): IOPort hm2/hm2_7i80.0: IO Pin 060 (J5-06): IOPort hm2/hm2_7i80.0: IO Pin 061 (J5-07): IOPort hm2/hm2_7i80.0: IO Pin 062 (J5-08): IOPort hm2/hm2_7i80.0: IO Pin 063 (J5-09): IOPort hm2/hm2_7i80.0: IO Pin 064 (J5-10): IOPort hm2/hm2_7i80.0: IO Pin 065 (J5-11): IOPort hm2/hm2_7i80.0: IO Pin 066 (J5-12): IOPort hm2/hm2_7i80.0: IO Pin 067 (J5-13): IOPort hm2/hm2_7i80.0: registered iptables v1.6.1: can't initialize iptables table `filter': Permission denied (you must be root) Perhaps iptables or your kernel needs to be upgraded. hm2_eth: ERROR: Failed to execute '/sbin/iptables -A hm2-eth-rules-output -o enp2s0 -p icmp -j DROP' hm2/hm2_7i80.0: error finishing read! iter=7 hm2/hm2_7i80.0: error finishing read! iter=7

I wonder if the issue is the firmware in the card (does this need to be loaded each time ?)


Current config below
Code:
loadrt trivkins loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES 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_7i80.0.watchdog.timeout_ns 5000000 loadrt pid names=pid.x,pid.y,pid.z,pid.s addf hm2_7i80.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 hm2_7i80.0.write servo-thread # external output signals # --- ESTOP-OUT --- net estop-out hm2_7i80.0.7i76.0.0.output-00 # --- COOLANT-MIST --- net coolant-mist hm2_7i80.0.7i76.0.0.output-01 # --- COOLANT-FLOOD --- net coolant-flood hm2_7i80.0.7i76.0.0.output-02 # --- MACHINE-IS-ENABLED --- net machine-is-enabled hm2_7i80.0.7i76.0.0.output-03 # external input signals # --- BOTH-HOME-Y --- net both-home-y <= hm2_7i80.0.7i76.0.0.input-04 # --- BOTH-HOME-Z --- net both-home-z <= hm2_7i80.0.7i76.0.0.input-05 # --- BOTH-HOME-A --- net both-home-a <= hm2_7i80.0.7i76.0.0.input-06 # --- ESTOP-EXT --- net estop-ext <= hm2_7i80.0.7i76.0.0.input-08 # --- PROBE-IN --- net probe-in <= hm2_7i80.0.7i76.0.0.input-09-not # --- PROBE_IN_UP --- net Probe_In_Up <= hm2_7i80.0.7i76.0.0.input-10 #******************* # 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 setp pid.x.maxerror .0005 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 # Step Gen signals/setup setp hm2_7i80.0.stepgen.00.dirsetup [AXIS_0]DIRSETUP setp hm2_7i80.0.stepgen.00.dirhold [AXIS_0]DIRHOLD setp hm2_7i80.0.stepgen.00.steplen [AXIS_0]STEPLEN setp hm2_7i80.0.stepgen.00.stepspace [AXIS_0]STEPSPACE setp hm2_7i80.0.stepgen.00.position-scale [AXIS_0]STEP_SCALE setp hm2_7i80.0.stepgen.00.step_type 0 setp hm2_7i80.0.stepgen.00.control-type 1 setp hm2_7i80.0.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAXACCEL setp hm2_7i80.0.stepgen.00.maxvel [AXIS_0]STEPGEN_MAXVEL # ---closedloop stepper signals--- net x-pos-cmd <= axis.0.motor-pos-cmd net x-vel-cmd <= axis.0.joint-vel-cmd net x-output <= hm2_7i80.0.stepgen.00.velocity-cmd net x-pos-fb <= hm2_7i80.0.stepgen.00.position-fb net x-pos-fb => axis.0.motor-pos-fb net x-enable <= axis.0.amp-enable-out net x-enable => hm2_7i80.0.stepgen.00.enable # ---setup home / limit switch signals--- net x-home-sw => axis.0.home-sw-in net x-neg-limit => axis.0.neg-lim-sw-in net x-pos-limit => 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 setp pid.y.maxerror .0005 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 # Step Gen signals/setup setp hm2_7i80.0.stepgen.01.dirsetup [AXIS_1]DIRSETUP setp hm2_7i80.0.stepgen.01.dirhold [AXIS_1]DIRHOLD setp hm2_7i80.0.stepgen.01.steplen [AXIS_1]STEPLEN setp hm2_7i80.0.stepgen.01.stepspace [AXIS_1]STEPSPACE setp hm2_7i80.0.stepgen.01.position-scale [AXIS_1]STEP_SCALE setp hm2_7i80.0.stepgen.01.step_type 0 setp hm2_7i80.0.stepgen.01.control-type 1 setp hm2_7i80.0.stepgen.01.maxaccel [AXIS_1]STEPGEN_MAXACCEL setp hm2_7i80.0.stepgen.01.maxvel [AXIS_1]STEPGEN_MAXVEL # ---closedloop stepper signals--- net y-pos-cmd <= axis.1.motor-pos-cmd net y-vel-cmd <= axis.1.joint-vel-cmd net y-output <= hm2_7i80.0.stepgen.01.velocity-cmd net y-pos-fb <= hm2_7i80.0.stepgen.01.position-fb net y-pos-fb => axis.1.motor-pos-fb net y-enable <= axis.1.amp-enable-out net y-enable => hm2_7i80.0.stepgen.01.enable # ---setup home / limit switch signals--- net both-home-y => axis.1.home-sw-in net both-home-y => axis.1.neg-lim-sw-in net both-home-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 setp pid.z.maxerror .0005 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 # Step Gen signals/setup setp hm2_7i80.0.stepgen.02.dirsetup [AXIS_2]DIRSETUP setp hm2_7i80.0.stepgen.02.dirhold [AXIS_2]DIRHOLD setp hm2_7i80.0.stepgen.02.steplen [AXIS_2]STEPLEN setp hm2_7i80.0.stepgen.02.stepspace [AXIS_2]STEPSPACE setp hm2_7i80.0.stepgen.02.position-scale [AXIS_2]STEP_SCALE setp hm2_7i80.0.stepgen.02.step_type 0 setp hm2_7i80.0.stepgen.02.control-type 1 setp hm2_7i80.0.stepgen.02.maxaccel [AXIS_2]STEPGEN_MAXACCEL setp hm2_7i80.0.stepgen.02.maxvel [AXIS_2]STEPGEN_MAXVEL # ---closedloop stepper signals--- net z-pos-cmd <= axis.2.motor-pos-cmd net z-vel-cmd <= axis.2.joint-vel-cmd net z-output <= hm2_7i80.0.stepgen.02.velocity-cmd net z-pos-fb <= hm2_7i80.0.stepgen.02.position-fb net z-pos-fb => axis.2.motor-pos-fb net z-enable <= axis.2.amp-enable-out net z-enable => hm2_7i80.0.stepgen.02.enable # ---setup home / limit switch signals--- net both-home-z => axis.2.home-sw-in net both-home-z => axis.2.neg-lim-sw-in net both-home-z => axis.2.pos-lim-sw-in #******************* # SPINDLE S #******************* 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 setp pid.s.maxerror .0005 net spindle-index-enable <=> pid.s.index-enable net spindle-enable => pid.s.enable net spindle-vel-cmd-rpm-abs => pid.s.command net spindle-vel-fb-rpm-abs => pid.s.feedback net spindle-output <= pid.s.output # ---digital potentionmeter output signals/setup--- setp hm2_7i80.0.7i76.0.0.spinout-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT setp hm2_7i80.0.7i76.0.0.spinout-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT setp hm2_7i80.0.7i76.0.0.spinout-scalemax [SPINDLE_9]OUTPUT_SCALE net spindle-vel-cmd-abs => hm2_7i80.0.7i76.0.0.spinout net machine-is-enabled => hm2_7i80.0.7i76.0.0.spinena net spindle-ccw => hm2_7i80.0.7i76.0.0.spindir # ---Encoder feedback signals/setup--- setp hm2_7i80.0.encoder.00.counter-mode 1 setp hm2_7i80.0.encoder.00.filter 1 setp hm2_7i80.0.encoder.00.index-invert 0 setp hm2_7i80.0.encoder.00.index-mask 0 setp hm2_7i80.0.encoder.00.index-mask-invert 0 setp hm2_7i80.0.encoder.00.scale [SPINDLE_9]ENCODER_SCALE net spindle-revs <= hm2_7i80.0.encoder.00.position net spindle-vel-fb-rps <= hm2_7i80.0.encoder.00.velocity net spindle-index-enable <=> hm2_7i80.0.encoder.00.index-enable # ---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 # Use ACTUAL spindle velocity from spindle encoder # spindle-velocity bounces around so we filter it with lowpass # spindle-velocity is signed so we use absolute component to remove sign # ACTUAL velocity is in RPS not RPM so we scale it. #setp scale.spindle.gain 60 #setp lowpass.spindle.gain 1.000000 #net spindle-vel-fb-rps => scale.spindle.in #net spindle-fb-rpm scale.spindle.out => abs.spindle.in #net spindle-fb-rpm-abs abs.spindle.out => lowpass.spindle.in #net spindle-fb-rpm-abs-filtered lowpass.spindle.out #****************************** # connect miscellaneous signals #****************************** # ---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 # ---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-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 to join the conversation.

More
7 years 3 months ago #139045 by PCW
"error finishing read!"
means that you have lost contact with the 7I80

Common reasons are:

Servo thread to fast (suggest 1000000 ns = 1 ms to start)
Not running real time OS
Intel MAC on host and RX IRQ coalesce enabled
Power issues on FPGA card (marginal power so card resets)

Please Log in to join the conversation.

More
7 years 3 months ago #139047 by mjoconr
Servo thread was 1000000 ns changed to 2000000 ns
Kernel is 4.19.31-rt18
Its using realtek chips for the ethernet, ran ethtool -c rx-usecs=0 enp2s0
Card is being powered by a 5v 5Amp power supply and voltage at the connect on the board is 5.05V

Image of the latency test attached.

What next ?

Thanks by the way

Please Log in to join the conversation.

Time to create page: 0.215 seconds
Powered by Kunena Forum