NX-PC后处理实现子程序模式
部分系统支持子程序模式,方便查找和调试。自己也是基于这个才想搞一个的。主程序和子程序都放在一个文件里面,自带的子程序模式是分开的。子程序单独一个文件。子程序模式基于工序实现,也可以合并,基于刀具判断和工序判断。看个人喜欢,我这边就简单一点的,基于工序判断。上图。下图是生成的主程序。1.打开构造器。
2.在NC输出里面,找到程序头。转跳到缓冲区事件里面.
3.在缓冲区时间里面找到输出的程序段。
4.按照图片要求,把要插入的内容复制到TCL文件,
5.复制代码。
6.按照相同的步骤 输出其他位置。工序程序头,和工序程序尾 输出O1001和M99
7.程序段。请根据自己的实际情况来添加程序段位置,这里只是个人参考。不一定会想同。
#添加子程序O5000
LIB_GE_command_buffer_edit_insert LIB_SPF_operation_header_comment HEADER_COMMENT {ZCX} <子程序头添加> after @NEWLINE1
proc ZCX {} {
#子程序O5001-----------------------------
global mom_operation_name
global mom_sys_sub_prog_counter2
global mom_spindle_speed
global mom_spindle_mode
#获取当前计数器值
set current_sub_num $mom_sys_sub_prog_counter2
#输出子程序头
MOM_output_literal
#输出操作名称注释 (可选,用于对照,或者添加其他内容备注)
#MOM_output_literal "(OP: $mom_operation_name)"
#计数器自增,确保下一个操作使用下一个号码
incr mom_sys_sub_prog_counter2
#程序头输出添加 主程序
LIB_GE_command_buffer_edit_insert MOM_start_of_program_LIB PROGRAMSTART {CXT} <Head_1> after @START_OF_PROGRAM
proc CXT {} {
MOM_output_literal "G40 G49 G80 G00"
MOM_output_literal "G91 G28 Z0."
#添加M98
global mom_operation_name_list
global mom_sys_sub_prog_counter2
set mom_sys_sub_prog_counter2 5001
#设置一个变量计数
global mom_sys_sub_prog_counter
set mom_sys_sub_prog_counter 5001
MOM_output_literal ""
# 遍历列表中的每个名称
foreach op_name $mom_operation_name_list {
# 输出每个操作名称-M98P5001开始 主程序
MOM_output_literal "(OP: $op_name)"
MOM_output_literal
MOM_output_literal "M1"
MOM_output_literal " "
incr mom_sys_sub_prog_counter
}
MOM_output_literal "M5"
MOM_output_literal "M9"
MOM_output_literal "M30"
MOM_output_literal " "
global prev_tool_number
# 将上一把刀具号初始化为 -1,确保第一个工序被判定为“不一致”
set prev_tool_number -1
}
#程序结尾添加M99
LIB_GE_command_buffer_edit_insert MOM_end_of_path_LIB MOM_end_of_path_LIB_ENTRY_end {ENDM1} <ENDM99> after @DEFAULT_ENTRY
proc ENDM1 {} {
MOM_output_literal "M99"
}
本帖最后由 0小刚/tp 于 2026-8-27 10:31 编辑
你试试五轴的 相同刀具 同样角度丢不丢G68.2 相同刀具连续两个联动中间缺不缺G43.4 这个子程序 程序头每一个M98都是可以单独启动的 就需要每个子程序头把需要带的模态都带全了 很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理 0小刚/tp 发表于 2026-8-27 10:27
你试试五轴的 相同刀具 同样角度丢不丢G68.2 相同刀具连续两个联动中间缺不缺G43.4 ...
没写过五轴,但是可以全部带的,这段是相同工序连接的 带程序头,你可以在下面注释那里添加程序头、
#添加连接的程序 换刀 开始程序头--------------
#1. 声明需要使用的全局变量
global mom_tool_number
global mom_prev_op_tool_number
if { ! } {
} else {
#判断是否同一把刀,同一把刀输出程序头,同一把刀默认不输出的,链接上一个工序操作。这里可省略,安全回零好点。
if { $mom_tool_number == $mom_prev_op_tool_number } {
MOM_output_literal "G91 G28 Z0."
MOM_output_literal "T$mom_tool_number M06"
MOM_output_literal "G90 G40 G49 G80 G$wcs_code"
# 输出M3 S
if { && $mom_spindle_speed > 0 } {
# 格式化输出 S 代码
set s_code
# 判断正反转并输出 M 代码
if { } {
switch -- $mom_spindle_mode {
spindle_forward {
MOM_output_literal "$s_code M03"
}
spindle_reverse {
MOM_output_literal "$s_code M04"
}
default {
MOM_output_literal "$s_code M03"
}
}
} else {
# 如果没有主轴模式变量,默认输出正转
MOM_output_literal "$s_code M03"
}
}
MOM_output_literal "M8"
MOM_output_literal "G90 G0 X Y"
MOM_output_literal "M590 L1"
MOM_output_literal "G43 $h_code"
MOM_output_literal "G0 Z"
} else {
#判断不同刀具,默认操作
#MOM_output_literal "(第二行,是新刀,不需要,调试用)"
}
}
# 3. 判断使用
set mom_prev_op_tool_number $mom_tool_number 你这个和系统自带的区别是哪些,能具体说说吗。
wish2086 发表于 2026-8-27 10:50
很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理
那我等下重新开一个帖子发吧,你等一下刷新就好了 wish2086 发表于 2026-8-27 10:50
很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理
https://www.ugsnx.com/thread-365323-1-1.html分享了。 白色治愈之风 发表于 2026-8-27 11:32
你这个和系统自带的区别是哪些,能具体说说吗。
自带的子程序是独立文件,这个是主程序和子程序都在一个文件里面, 这是系统自带的,什么都没改,11是主程序,后面的是子程序。
我更需要的是这种,每个文件加就是一个子程序。这种系统自带的就没办法了。