# Generated by PNCconf at Sat Jul  6 15:18:32 2019
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

#loadusr -Wn pyvcp pyvcp -c pyvcp [DISPLAY](PYVCP)
#source pyvcp_options.hal
#loadrt abs names=abs.spindle
#loadrt lowpass names=lowpass.spindle

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



loadrt hostmot2
loadrt hm2_eth board_ip="192.168.1.121" config=" num_encoders=0 num_pwmgens=2 num_stepgens=5" 
#setp    hm2_7i92.0.watchdog.timeout_ns 15000000
loadrt estop_latch
#loadrt pid names=pid.x,pid.y,pid.z,pid.b
setp     hm2_7i92.0.pwmgen.pwm_frequency 20000
setp     hm2_7i92.0.pwmgen.pdm_frequency 6000000
setp     hm2_7i92.0.watchdog.timeout_ns 15000000

#loadrt lut5
#addf lut5.0 servo-thread

loadrt debounce cfg=3
addf debounce.0 servo-thread
#addf debounce.1 servo-thread
setp debounce.0.delay 15


#addf hm2_7i92.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.b.do-pid-calcs       servo-thread
#addf hm2_7i92.0.write         servo-thread
#setp hm2_7i92.0.dpll.01.timer-us -50
#setp hm2_7i92.0.stepgen.timer-number 1

addf hm2_7i92.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf hm2_7i92.0.write         servo-thread
#addf hm2_7i92.0.pet_watchdog  servo-thread
addf estop-latch.0             servo-thread


########### egantry ###########################
loadrt egantry count=1 personality=2
addf  egantry.0                         servo-thread

setp  egantry.0.align-vel 200
setp  egantry.0.align-acc 1000
setp  egantry.0.align-hyst 0.05
#setp  egantry.0.align-hyst 0.05
setp  egantry.0.joint.01.correct 3
#setp egantry.0.joint.00.max_acceleration  [AXIS_1]MAX_ACCELERATION
#setp egantry.0.joint.00.max_velocity      [AXIS_1]MAX_VELOCITY
#setp egantry.0.joint.00.ferror			  [AXIS_1]FERROR

#setp egantry.0.joint.01.max_acceleration  [AXIS_1]MAX_ACCELERATION
#setp egantry.0.joint.01.max_velocity      [AXIS_1]MAX_VELOCITY
#setp egantry.0.joint.01.ferror			  [AXIS_1]FERROR

# position & feedback
#net y-pos-cmd   egantry.0.axis.motor-pos-cmd  => axis.1.motor-pos-cmd
#net y-pos-fb    egantry.0.axis.motor-pos-fb   => axis.1.motor-pos-fb
#net y1-pos-cmd  egantry.0.joint.00.pos-cmd    => pid.y.command
#net y1-pos-fb   egantry.0.joint.00.pos-fb     <= pid.y.feedback
#net y2-pos-cmd  egantry.0.joint.01.pos-cmd    => pid.a.command
#net y2-pos-fb   egantry.0.joint.01.pos-fb     <= pid.a.feedback

# enables 
#net y-enable   egantry.0.axis.amp-enable   <= axis.1.amp-enable-out 
#net y1-enable  egantry.0.joint.00.enable   => pid.y.enable
#net y2-enable  egantry.0.joint.01.enable   => pid.a.enable

# index_ENC  
#net y-index-enable    egantry.0.axis.index-enable       <= axis.1.index-enable
#net y1-index-enable   egantry.0.joint.00.index-enable   => pid.y.index-enable
#net y2-index-enable   egantry.0.joint.01.index-enable   => pid.a.index-enable

# home switches & othrs
net y-home-sw <= egantry.0.axis.home-sw => axis.1.home-sw-in
net y1-home-sw <= egantry.0.joint.00.home-sw  <= hm2_7i92.0.gpio.015.in_not
net y2-home-sw    egantry.0.joint.01.home-sw  <= hm2_7i92.0.gpio.032.in_not

net y-home-state     axis.1.home-state      => egantry.0.axis.home-state
net y-homed          axis.1.homed           => egantry.0.axis.homed


########## egantry ###########################


# external output signals





# external input signals

# --- ESTOP-EXT ---
net estop-ext <= hm2_7i92.0.gpio.013.in

# --- BOTH-HOME-B ---

net home-b <=  hm2_7i92.0.gpio.014.in_not
net home-b     =>  axis.4.home-sw-in

#gantry switches

# y-axis switches and connect them to signals
#net home-switch-y1 	<= hm2_7i92.0.gpio.015.in_not
#net home-switch-y2 	<= hm2_7i92.0.gpio.032.in_not

# join the home switch signals so that both switches have to be closed to trigger a home position
#net home-switch-y1		=> egantry.0.joint.00.home-sw
#net home-switch-y2		=> egantry.0.joint.01.home-sw
#net home-y 		<= egantry.0.axis.home-sw
#net home-y 		=> axis.1.home-sw-in
#net y-home-start axis.1.home-state =>   egantry.0.axis.home-state


#setp gantry.0.search-vel [AXIS_1]HOME_SEARCH_VEL
#net limit-y		<= gantry.0.limit
#net limit-y		=> axis.1.neg-lim-sw-in




#net all-limit-home-x-y-debounce <= home-switch-y1 	 
net all-limit-home-z-debounce <= hm2_7i92.0.gpio.003.in_not 
#net all-limit-x-y-debounce <= hm2_7i92.0.gpio.015.in_not => all-home-x-y

#net all-limit-home-z <= hm2_7i92.0.gpio.003.in_not 
#net all-limit-home-x-y <= hm2_7i92.0.gpio.015.in_not 

net x-home-sw => debounce.0.0.in
net y1-home-sw => debounce.0.1.in
net all-limit-home-z-debounce => debounce.0.2.in
net all-limit-home-x <= debounce.0.0.out
net all-limit-home-y <= debounce.0.1.out
net all-limit-home-z <= debounce.0.2.out
#setp lut5.0.function 0x10000
#net all-limit-home-x-y => lut5.0.in-4
#net all-limit-home-x-y-debounce => lut5.0.in-4
#net all-limit <= lut5.0.out
#net homing-x <= axis.0.homing => lut5.0.in-0
#net homing-y <= axis.1.homing => lut5.0.in-1

#net all-limit-home-x-y => axis.0.home-sw-in
net x-home-sw <= hm2_7i92.0.gpio.031.in_not
net x-home-sw => axis.0.home-sw-in
net all-limit-home-x => axis.0.neg-lim-sw-in
net all-limit-home-x => axis.0.pos-lim-sw-in

#net all-limit-home-x-y => axis.1.home-sw-in
#net all-limit-home-x-y-debounce => axis.1.home-sw-in
net all-limit-home-y => axis.1.neg-lim-sw-in
net all-limit-home-y => axis.1.pos-lim-sw-in

#net all-limit-home-z => axis.2.home-sw-in
net all-limit-home-z-debounce => axis.2.home-sw-in
net all-limit-home-z => axis.2.neg-lim-sw-in
net all-limit-home-z => axis.2.pos-lim-sw-in



# --- PROBE-IN ---
#setp hm2_7i92.0.gpio.016.in true
net probe-in     <=  hm2_7i92.0.gpio.016.in_not

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

newsig emcmot.00.enable bit
sets emcmot.00.enable FALSE

net emcmot.00.enable <= axis.0.amp-enable-out 
net emcmot.00.enable => hm2_7i92.0.stepgen.00.enable


# position command and feedback
net emcmot.00.pos-cmd <= axis.0.motor-pos-cmd
net emcmot.00.pos-cmd => hm2_7i92.0.stepgen.00.position-cmd

net motor.00.pos-fb <= hm2_7i92.0.stepgen.00.position-fb
net motor.00.pos-fb => axis.0.motor-pos-fb



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



#*******************
#  AXIS Y
#*******************
# axis enable chain
newsig emcmot.01.enable bit
sets emcmot.01.enable FALSE
newsig emcmot.03.enable bit
sets emcmot.03.enable FALSE

#emcmot.01.enable 
net emcmot.01.enable  egantry.0.axis.amp-enable <= axis.1.amp-enable-out 
#net emcmot.01.enable 
net yoo-enable <= egantry.0.joint.00.enable
net yol-enable <= egantry.0.joint.01.enable 
net yoo-enable => hm2_7i92.0.stepgen.01.enable 
net yol-enable => hm2_7i92.0.stepgen.04.enable


# position command and feedback
net emcmot.01.pos-cmd egantry.0.axis.motor-pos-cmd <= axis.1.motor-pos-cmd
#net emcmot.01.pos-cmd 
net yoo-pos-cmd <= egantry.0.joint.00.pos-cmd
net yol-pos-cmd <= egantry.0.joint.01.pos-cmd
net yoo-pos-cmd => hm2_7i92.0.stepgen.01.position-cmd
net yol-pos-cmd => hm2_7i92.0.stepgen.04.position-cmd


#net motor.01.pos-fb <= hm2_7i92.0.stepgen.04.position-fb
net yoo-pos-fb <= hm2_7i92.0.stepgen.01.position-fb
net yol-pos-fb <= hm2_7i92.0.stepgen.04.position-fb
net yoo-pos-fb => egantry.0.joint.00.pos-fb
net yol-pos-fb => egantry.0.joint.01.pos-fb

#net motor.01.pos-fb 
net y-pos-fb  <= egantry.0.axis.motor-pos-fb
net y-pos-fb => axis.1.motor-pos-fb


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

setp   hm2_7i92.0.stepgen.04.dirsetup        [AXIS_1]DIRSETUP
setp   hm2_7i92.0.stepgen.04.dirhold         [AXIS_1]DIRHOLD
setp   hm2_7i92.0.stepgen.04.steplen         [AXIS_1]STEPLEN
setp   hm2_7i92.0.stepgen.04.stepspace       [AXIS_1]STEPSPACE
setp   hm2_7i92.0.stepgen.04.position-scale  [AXIS_1]STEP_SCALE
setp   hm2_7i92.0.stepgen.04.step_type        0
setp   hm2_7i92.0.stepgen.04.control-type     0
setp   hm2_7i92.0.stepgen.04.maxaccel         [AXIS_1]STEPGEN_MAXACCEL
setp   hm2_7i92.0.stepgen.04.maxvel           [AXIS_1]STEPGEN_MAXVEL


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

# axis enable chain
newsig emcmot.02.enable bit
sets emcmot.02.enable FALSE

net emcmot.02.enable <= axis.2.amp-enable-out 
net emcmot.02.enable => hm2_7i92.0.stepgen.02.enable


# position command and feedback
net emcmot.02.pos-cmd <= axis.2.motor-pos-cmd
net emcmot.02.pos-cmd => hm2_7i92.0.stepgen.02.position-cmd

net motor.02.pos-fb <= hm2_7i92.0.stepgen.02.position-fb
net motor.02.pos-fb => axis.2.motor-pos-fb

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


#*******************
#  AXIS B
#*******************
net emcmot.04.enable <= axis.4.amp-enable-out 
net emcmot.04.enable => hm2_7i92.0.stepgen.03.enable


# position command and feedback
net emcmot.04.pos-cmd <= axis.4.motor-pos-cmd
net emcmot.04.pos-cmd => hm2_7i92.0.stepgen.03.position-cmd

net motor.04.pos-fb <= hm2_7i92.0.stepgen.03.position-fb
net motor.04.pos-fb => axis.4.motor-pos-fb



# Step Gen signals/setup

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




#*******************
#  SPINDLE S
#*******************
# --- SPINDLE-ON ---
#loadrt pwmgen output_type=1
#addf pwmgen.make-pulses servo-thread
#addf pwmgen.update servo-thread
#net spindle-cmd-rpm => pwmgen.0.value
#net spindle-on <= motion.spindle-on => pwmgen.0.enable
#net spindle-pwm <= pwmgen.0.pwm
#setp pwmgen.0.pwm-freq 400.0
#setp pwmgen.0.scale 33970.2760085
#setp pwmgen.0.offset 0.1985
#setp pwmgen.0.dither-pwm true
#net spindle-cmd-rpm     <= motion.spindle-speed-out
#net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
#net spindle-cmd-rps     <= motion.spindle-speed-out-rps
#net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
#net spindle-at-speed    => motion.spindle-at-speed
setp hm2_7i92.0.gpio.007.is_output true
net spindle-on => hm2_7i92.0.gpio.007.out

#setp hm2_7i92.0.gpio.000.is_output true

setp hm2_7i92.0.gpio.000.invert_output true
#net spindle-pwm => hm2_7i92.0.gpio.000.out
# ---PWM Generator signals/setup---

setp   hm2_7i92.0.pwmgen.00.output-type 1
setp   hm2_7i92.0.pwmgen.00.scale  [SPINDLE_9]OUTPUT_SCALE


net spindle-vel-cmd     => hm2_7i92.0.pwmgen.00.value
net machine-is-enabled      => hm2_7i92.0.pwmgen.00.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            <=  motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs    <=  motion.spindle-speed-out-abs
net spindle-on                 <=  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             =>  motion.spindle-speed-in
net spindle-index-enable      <=>  motion.spindle-index-enable

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

sets spindle-at-speed true

#******************************
# 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 joint-select-e        halui.joint.4.select
net b-is-homed            halui.joint.4.is-homed
net jog-b-pos             halui.jog.4.plus
net jog-b-neg             halui.jog.4.minus
net jog-b-analog          halui.jog.4.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 user-enable iocontrol.0.user-request-enable => estop-latch.0.reset
#net enable-latch estop-latch.0.ok-out => iocontrol.0.emc-enable-in
net watchdog hm2_7i92.0.watchdog.has_bit => estop-latch.0.fault-in

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

#  ---toolchange signals for custom tool changer---

#net tool-number             <=  iocontrol.0.tool-prep-number
#net tool-change-request     <=  iocontrol.0.tool-change
#net tool-change-confirmed   =>  iocontrol.0.tool-changed
#net tool-prepare-request    <=  iocontrol.0.tool-prepare
#net tool-prepare-confirmed  =>  iocontrol.0.tool-prepared


loadusr linuxcncrsh --port 5007 --name k1 --connectpw pw --enablepw pw
