All pastes #3145477 Raw Edit

Someone

public unlisted text v1 · immutable
#3145477 ·published 2015-08-31 14:42 UTC
rendered paste body
# EMCOturn 120P Lathe Hal Configuration
#

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=3 sserial_port_0=00xxxx" 
setp   hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt comp count=2
loadrt timedelay count=2
loadrt and2 count=5
loadrt not count=5
loadrt xor2 count=5
loadrt or2 count=1
loadrt debounce cfg=1,2
# XXX reb
loadrt mux2 count=1
loadrt abs count=1
loadrt mult2 count=1
# XXX
loadusr -W toolerator3000

addf hm2_5i25.0.read          servo-thread
# XXX reb
addf mux2.0                   servo-thread
addf abs.0                  servo-thread
addf mult2.0                  servo-thread
# XXX
addf motion-command-handler   servo-thread
addf motion-controller        servo-thread
addf comp.0                   servo-thread
addf comp.1                   servo-thread
addf timedelay.0              servo-thread
addf timedelay.1              servo-thread
addf and2.0                   servo-thread
addf and2.1                   servo-thread
addf and2.2                   servo-thread
addf and2.3                   servo-thread
addf and2.4                   servo-thread
addf not.0                    servo-thread
addf not.1                    servo-thread
addf not.2                    servo-thread
addf not.3                    servo-thread
addf not.4                    servo-thread
addf xor2.0                   servo-thread
addf xor2.1                   servo-thread
addf xor2.2                   servo-thread
addf xor2.3                   servo-thread
addf xor2.4                   servo-thread
addf or2.0                    servo-thread
addf debounce.1               servo-thread
addf hm2_5i25.0.write         servo-thread

# ---Chargepump StepGen: 0.25 velocity = 10Khz square wave output---
setp   hm2_5i25.0.stepgen.02.dirsetup        100
setp   hm2_5i25.0.stepgen.02.dirhold         100
setp   hm2_5i25.0.stepgen.02.steplen         100
setp   hm2_5i25.0.stepgen.02.stepspace       100
setp   hm2_5i25.0.stepgen.02.position-scale  10000
setp   hm2_5i25.0.stepgen.02.step_type       2
setp   hm2_5i25.0.stepgen.02.control-type    1
setp   hm2_5i25.0.stepgen.02.maxaccel        0
setp   hm2_5i25.0.stepgen.02.maxvel          0
setp   hm2_5i25.0.stepgen.02.velocity-cmd    0.25

net estop-ext   hm2_5i25.0.stepgen.02.enable  <=  hm2_5i25.0.7i84.0.0.input-16
# --- End of Chargepump section----

# --- Pneumatic Control ----
#     --- These are the Mesa outputs that drive solenoids for tailstock and collet ---
#     --- These are defined/used in custom_postgui.hal with Classic Ladder ---
#net tailstock-rev hm2_5i25.0.7i84.0.0.output-09
#net tailstock-fwd hm2_5i25.0.7i84.0.0.output-10
#net collet-opening hm2_5i25.0.7i84.0.0.output-11
#net collet-close hm2_5i25.0.7i84.0.0.output-12

#     --- These lines are setting up the lower pressure switch ---
#     --- collet states xor'd to determine that the collet is being operated in order to read low press switch ---
net collet-opening xor2.0.in0
net collet-close xor2.0.in1
#     --- "and" that with the pressure switch to signal if pressure is low ---
net colletinuse xor2.0.out and2.1.in0
net low-pressure hm2_5i25.0.7i84.0.0.input-18-not and2.1.in1
net lowairpressure and2.1.out not.1.in
#     --- timedelay is a one-shot to draw out signal due to a race condition ---
setp timedelay.1.on-delay 0
setp timedelay.1.off-delay 0.5
net goodairpressure-fast not.1.out timedelay.1.in
net goodairpressure timedelay.1.out and2.2.in0
# This will abort motion if low air pressure during collet operation or spindle overtemp signal
net spindle-overtemp hm2_5i25.0.7i84.0.0.input-17 and2.2.in1
net allsafe and2.2.out motion.enable

# --- End of Pneumatic Control section----

#net gs2-run 
#net collet-open-cmd and2.4.in0
#net gs2-run not.4.in
#net gs2-not-running and2.4.in1 not.4.out
#net collet-not-closed and2.3.in0
#net gs2-run and2.3.in1
#net spindle-unsafe or2.0.out not.3.in
#net spindle-safe not.3.out
#net spindle-safe and2.2.in1
#net allsafe and2.2.out motion.enable
#net spindle-danger or2.0.in1 and2.3.out

#net tooltouch hm2_5i25.0.7i84.0.0.input-02-not motion.probe-input

# --- Over Temperature Inputs ---
# --- ** added without testing amp-fault (should cause no X,Z motion if Vexta overheat)
#spindle-overtemp hm2_5i25.0.7i84.0.0.input-17 **see above
net z-axis-overtemp hm2_5i25.0.7i84.0.0.input-19 axis.2.amp-fault-in
net x-axis-overtemp hm2_5i25.0.7i84.0.0.input-20 axis.0.amp-fault-in
# --- End of Over Temperature section----


# --- Run oiler motor when either X or Z axis are moving ---
#     --- comparator(s) output comp.N.equal will be 0 if velocity command is above 0 ---
setp comp.0.in0 0
setp comp.0.hyst 0.001
net x-vel-cmd comp.0.in1
#
setp comp.1.in0 0
setp comp.1.hyst 0.001
net z-vel-cmd comp.1.in1
#     --- feed comparator output into an AND gate and then invert using NOT ---
#     --- so either axis moving will output a logic 1 from NOT ---
net x-vel-actv comp.0.equal and2.0.in0
net z-vel-actv comp.1.equal and2.0.in1
net xorzvel and2.0.out not.0.in
#     --- timedelay component keeps output signal high for 5s after at ---
#     --- least 1s of movement ---
setp timedelay.0.on-delay 1
setp timedelay.0.off-delay 1
net xorzvel-hold not.0.out timedelay.0.in
#     --- send the output to the pin that controls the oiler motor relay ---
net oiler hm2_5i25.0.7i84.0.0.output-08 timedelay.0.out
# --- End of oiler motor section ---

# --- Limit Switches ----
#     --- First two switches are settable using the slide mechanism under tailstock ---
#net tail-left-lim hm2_5i25.0.7i84.0.0.input-29
#net tail-over-lim hm2_5i25.0.7i84.0.0.input-30
#net tail-right-lim hm2_5i25.0.7i84.0.0.input-31
#     --- These are the hall sensors on the X and Z axes ---
#     --- To be used for homing??? ---
#net indexZ hm2_5i25.0.7i84.0.0.input-24
#net indexX hm2_5i25.0.7i84.0.0.input-25
# --- End of Limit Switches section ---

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

# Step Gen signals/setup

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

# ---closedloop stepper signals---

net x-pos-cmd    <= axis.0.motor-pos-cmd
net x-pos-cmd    => hm2_5i25.0.stepgen.01.position-cmd
net x-vel-cmd    <= axis.0.joint-vel-cmd
net x-vel-cmd    => hm2_5i25.0.stepgen.01.velocity-cmd
net x-pos-fb     <= axis.0.motor-pos-fb
net x-pos-fb     => hm2_5i25.0.stepgen.01.position-fb

net x-enable     <= axis.0.amp-enable-out
net x-enable     => hm2_5i25.0.stepgen.01.enable

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

#net x-home-sw     =>  axis.0.home-sw-in hm2_5i25.0.7i84.0.0.input-25
#net x-neg-limit     =>  axis.0.neg-lim-sw-in
#net x-pos-limit     =>  axis.0.pos-lim-sw-in

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

# Step Gen signals/setup

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

# ---closedloop stepper signals---

net z-pos-cmd    <= axis.2.motor-pos-cmd
net z-pos-cmd    => hm2_5i25.0.stepgen.00.position-cmd
net z-vel-cmd    <= axis.2.joint-vel-cmd
net z-vel-cmd    => hm2_5i25.0.stepgen.00.velocity-cmd
net z-pos-fb     <= axis.2.motor-pos-fb
net z-pos-fb     => hm2_5i25.0.stepgen.00.position-fb
net z-enable     <= axis.2.amp-enable-out
net z-enable     => hm2_5i25.0.stepgen.00.enable

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

#net z-home-sw     =>  axis.2.home-sw-in hm2_5i25.0.7i84.0.0.input-24
#net z-neg-limit     =>  axis.2.neg-lim-sw-in
#net z-pos-limit     =>  axis.2.pos-lim-sw-in

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

# ---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  [SPINDLE_9]ENCODER_SCALE
# XXX reb
setp    mux2.0.in0	1
setp    mux2.0.in1	-1

# spindle rotating in reverse will pick -1, otherwise 1
net spindle-reversed	<= motion.spindle-reverse => mux2.0.sel
# send mux output (1 or -1) to a multiplier
net spindle-revs-multiplier	<= mux2.0.out => mult2.0.in0
# compute ABS(encoder position) in case it is negative
net spindle-revs-raw	<= hm2_5i25.0.encoder.00.position =>  abs.0.in
# take ABS(encoder position) and multiply it by mux output above
# position is now negative for reverse, positive otherwise
net spindle-revs-abs	<= abs.0.out =>  mult2.0.in1
# send recomputed position to motion component
net spindle-revs-signed	<=   mult2.0.out =>  motion.spindle-revs
#net spindle-revs             <=   hm2_5i25.0.encoder.00.position =>  motion.spindle-revs
# XXX
net spindle-vel-fb-rps       <=   hm2_5i25.0.encoder.00.velocity =>  motion.spindle-speed-in
net spindle-index-enable     <=>  hm2_5i25.0.encoder.00.index-enable <=>  motion.spindle-index-enable
net spindle-index            <=   hm2_5i25.0.encoder.00.input-index

# ---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
#et 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-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 hm2_5i25.0.7i84.0.0.input-02-not motion.probe-input

#  ---motion control signals---
# see custom_postgui.hal

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

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

#  ---tool change signals---
net tool-change iocontrol.0.tool-change => toolerator3000.toolchange
net tool-changed iocontrol.0.tool-changed <= toolerator3000.toolchanged
net tool-number iocontrol.0.tool-prep-number => toolerator3000.toolnumber
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared