Heidenhain controlled CNC has a requirement where the next non-rapid move following an FMAX move must output a feed rate, otherwise the machine tries to continue in rapid mode and locks up. For example, lines 26, 35, and 45 below illustrate feed rate word output needs:
23 L X-2.478200 Y-2.809300 FMAX
24 L Z2.468500 FMAX
25 L Z1.958500 FMAX M8
26 L X-2.460900 Y-2.710900 RL F450.
27 L Y-2.460900
28 L Y2.460900
29 L X2.460900
30 L Y-2.460900
31 L X-2.460900
32 L X-2.710900
33 L X-2.809300 Y-2.478200 R0
34 L X-2.112400 Y-2.484200 Z1.948500 FMAX
35 L X-2.210900 Y-2.466800 RL F450.
36 L X-2.460900
37 L X-2.466800
38 L Y2.466800
39 L X2.466800
40 L Y-2.466800
41 L X-2.460900
42 L X-2.710900
43 L X-2.809300 Y-2.484200 R0
44 L X-2.112400 Y-2.485900 Z1.938500 FMAX
45 L X-2.210900 Y-2.468500 RL F450.
46 L X-2.460900
The Feed word can be output as needed if we either turn off turbo mode in the post and use standard tcl logic to force the address, or we leave turbo mode on and make the F address nonmodal. Neither of these are good solutions, however.
SolutionYou can force the feed word if you are using the 'advanced' turbo mode in the post.
To force F address in advance turbo mode, use the command MOM_set_adv_turbo_callback. Below is an example of the required logic to be added to a tcl layer:
proc output_feed_rate {} {
if {$::mom_motion_event =="rapid_move"} {
MOM_force once F
}
}
LIB_GE_command_buffer_edit_append MOM_start_of_path_LIB MOM_start_of_path_LIB_ENTRY_start {
MOM_set_adv_turbo_callback -observer mom_motion_event output_feed_rate
} _ForceFAddress
LIB_GE_command_buffer_edit_append MOM_end_of_path_LIB MOM_end_of_path_LIB_ENTRY_start {
MOM_set_adv_turbo_callback -observer
} _ForceFAddressUnset