summaryrefslogtreecommitdiff
path: root/configs/by_machine/smithy/924.hal
blob: 629923d8d0848337ea028af80e4f3502ba1a02a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# 5i20 config file for Smithy 924 Lathe

# load the hostmot2 driver, this doesn't do anything by itself,
# it just waits for low-level drivers to register boards
loadrt hostmot2 debug_idrom=1 debug_module_descriptors=1 debug_pin_descriptors=1 debug_modules=1

# load the low-level driver for the board
# this will load the board's firmware and register it with the hostmot2
# driver loaded above, and it'll show up in HAL
loadrt hm2_pci config="firmware=hm2/5i20/SVST2_4_7I47.BIT num_encoders=3 num_pwmgens=1 num_stepgens=2"
# set up the watchdog
#setp hm2_5i20.0.watchdog.timeout_ns 10000000

# load kinematics
loadrt trivkins

# load motion controller, get name and thread periods from ini file
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD traj_period_nsec=[EMCMOT]TRAJ_PERIOD key=[EMCMOT]SHMEM_KEY num_joints=[TRAJ]AXES

# classicladder for machine logic
# (load the realtime portion)
loadrt classicladder_rt
# invoke the user part of CL to silently load the program
loadusr -w classicladder --nogui 924.clp

# load charge pump
loadrt charge_pump

# load the spindle speed lowpass filter
loadrt lowpass

#the Enable signal is used to permanently enable things
newsig Enable bit
sets Enable TRUE

#configure the spindle encoder
setp hm2_5i20.0.encoder.00.scale 4096
net Spos hm2_5i20.0.encoder.00.position motion.spindle-revs
net Svel hm2_5i20.0.encoder.00.velocity motion.spindle-speed-in
net Sidx hm2_5i20.0.encoder.00.index-enable => motion.spindle-index-enable

#configure the spindle speed lowpass filter & PWM generator
net Scmd motion.spindle-speed-out => lowpass.0.in
net Sflt lowpass.0.out => hm2_5i20.0.pwmgen.00.value
#early production machines
setp lowpass.0.gain 0.0001
#later production machines
#setp lowpass.0.gain 1.0
setp hm2_5i20.0.pwmgen.00.scale 3000
setp hm2_5i20.0.pwmgen.00.output-type 1
setp hm2_5i20.0.pwmgen.pwm_frequency 100

# invert the step pulse polarity
setp hm2_5i20.0.gpio.000.invert_output TRUE
setp hm2_5i20.0.gpio.002.invert_output TRUE

# configure the stepgen parameters
setp hm2_5i20.0.stepgen.00.dirsetup        2500
setp hm2_5i20.0.stepgen.00.dirhold         2500
setp hm2_5i20.0.stepgen.00.steplen         2500
setp hm2_5i20.0.stepgen.00.stepspace       2500
setp hm2_5i20.0.stepgen.00.position-scale  [AXIS_0]SCALE
setp hm2_5i20.0.stepgen.00.maxaccel        [AXIS_0]STEPGEN_MAXACCEL
setp hm2_5i20.0.stepgen.00.maxvel          [AXIS_0]STEPGEN_MAXVEL
setp hm2_5i20.0.stepgen.01.dirsetup        2500
setp hm2_5i20.0.stepgen.01.dirhold         2500
setp hm2_5i20.0.stepgen.01.steplen         2500
setp hm2_5i20.0.stepgen.01.stepspace       2500
setp hm2_5i20.0.stepgen.01.position-scale  [AXIS_2]SCALE
setp hm2_5i20.0.stepgen.01.maxaccel        [AXIS_2]STEPGEN_MAXACCEL
setp hm2_5i20.0.stepgen.01.maxvel          [AXIS_2]STEPGEN_MAXVEL

# connect position commands from motion module to step generator
net Xpos-cmd axis.0.motor-pos-cmd => hm2_5i20.0.stepgen.00.position-cmd
net Zpos-cmd axis.2.motor-pos-cmd => hm2_5i20.0.stepgen.01.position-cmd

# connect position feedback from step generators to motion module
net Xpos-fb hm2_5i20.0.stepgen.00.position-fb => axis.0.motor-pos-fb
net Zpos-fb hm2_5i20.0.stepgen.01.position-fb => axis.2.motor-pos-fb

# connect enable signals for step generators
net Xen axis.0.amp-enable-out => hm2_5i20.0.stepgen.00.enable
net Zen axis.2.amp-enable-out => hm2_5i20.0.stepgen.01.enable

# enable velocity mode jogging
net Enable axis.0.jog-vel-mode
net Enable axis.2.jog-vel-mode

# enable the PWM generator
net Enable => hm2_5i20.0.pwmgen.00.enable

# enable the charge pump
net Enable => charge-pump.enable

# connect the charge pump signal to an output
setp hm2_5i20.0.gpio.022.is_output TRUE
net chargepump hm2_5i20.0.gpio.022.out => charge-pump.out

# Safety Relay Monitoring Contacts
net estop-enable hm2_5i20.0.gpio.037.in => iocontrol.0.emc-enable-in
# Run Switch
net machine-on hm2_5i20.0.gpio.039.in_not => halui.machine.on

#connect limit switches to limit inputs
net Xmax hm2_5i20.0.gpio.024.in => axis.0.pos-lim-sw-in
net Xmin hm2_5i20.0.gpio.026.in => axis.0.neg-lim-sw-in
net Zmax hm2_5i20.0.gpio.028.in => axis.2.pos-lim-sw-in
net Zmin hm2_5i20.0.gpio.030.in => axis.2.neg-lim-sw-in

#connect positive limit signals to home inputs
net Xmax => axis.0.home-sw-in
net Zmax => axis.2.home-sw-in

# Main Contactors - True when both contactors are energized
net ACOK hm2_5i20.0.gpio.035.in_not
# VFD Fault Relay - True when VFD is not faulted
#net VFDOK hm2_5i20.0.gpio.031.in_not
# A Axis Home - On Sieg machines there is no VFD fault signal,
# it is used for the A axis home sensor on 4 axis machines
#net VFDOK hm2_5i20.0.gpio.031.in_not
#net AHOME hm2_5i20.0.gpio.031.in axis.3.home-sw-in
# Spindle Contactor - False when spindle contactor is energized
net SOFF hm2_5i20.0.gpio.033.in halui.program.pause motion.feed-hold

#Tool Post Control Inputs
net PrepNo iocontrol.0.tool-prep-number => classicladder.0.s32in-00
net TC iocontrol.0.tool-change => classicladder.0.in-00
net T1 hm2_5i20.0.gpio.032.in => classicladder.0.in-01
net T2 hm2_5i20.0.gpio.034.in => classicladder.0.in-02
net T3 hm2_5i20.0.gpio.036.in => classicladder.0.in-03
net T4 hm2_5i20.0.gpio.038.in => classicladder.0.in-04
net TP iocontrol.0.tool-prepare => classicladder.0.in-05

#Door Sensor
net SS hm2_5i20.0.gpio.029.in

# Output Bits
# KA1
setp hm2_5i20.0.gpio.040.is_output TRUE
setp hm2_5i20.0.gpio.040.invert_output TRUE
net KA1 motion.spindle-reverse => hm2_5i20.0.gpio.040.out
# KA2
setp hm2_5i20.0.gpio.042.is_output TRUE
setp hm2_5i20.0.gpio.042.invert_output TRUE
net KA2 motion.spindle-on => hm2_5i20.0.gpio.042.out
#Tool Post Control Outputs
net TD classicladder.0.out-00 => iocontrol.0.tool-changed
net TQ classicladder.0.out-03 => iocontrol.0.tool-prepared
#KA3
setp hm2_5i20.0.gpio.044.is_output TRUE
setp hm2_5i20.0.gpio.044.invert_output TRUE
net KA3 hm2_5i20.0.gpio.044.out => classicladder.0.out-01
#KA4
setp hm2_5i20.0.gpio.046.is_output TRUE
setp hm2_5i20.0.gpio.046.invert_output TRUE
net KA4 hm2_5i20.0.gpio.046.out => classicladder.0.out-02
#Spindle Enable
setp hm2_5i20.0.gpio.041.is_output TRUE
setp hm2_5i20.0.gpio.041.invert_output TRUE
net Enable => hm2_5i20.0.gpio.041.out
# Flood Coolant
setp hm2_5i20.0.gpio.043.is_output TRUE
setp hm2_5i20.0.gpio.043.invert_output TRUE
net M8 hm2_5i20.0.gpio.043.out => iocontrol.0.coolant-flood
# Mist Coolant
setp hm2_5i20.0.gpio.045.is_output TRUE
setp hm2_5i20.0.gpio.045.invert_output TRUE
net M7 hm2_5i20.0.gpio.045.out => iocontrol.0.coolant-mist

# hook the functions to threads
# read inputs
addf hm2_5i20.0.read servo-thread
addf hm2_5i20.0.read_gpio servo-thread
# handle motion commands
addf motion-command-handler servo-thread
# run the motion controller
addf motion-controller servo-thread
# refresh classicladder
addf classicladder.0.refresh servo-thread
# run the spindle speed lowpass filter
addf lowpass.0  servo-thread
# write outputs
addf hm2_5i20.0.write servo-thread
addf hm2_5i20.0.write_gpio servo-thread
# pet the watchdog so he won't bite us!
addf hm2_5i20.0.pet_watchdog servo-thread
# toggle the charge pump
addf charge-pump servo-thread