白竹 发表于 2026-8-27 10:23:26

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:27:53

本帖最后由 0小刚/tp 于 2026-8-27 10:31 编辑

你试试五轴的   相同刀具       同样角度丢不丢G68.2      相同刀具连续两个联动中间缺不缺G43.4      这个子程序   程序头每一个M98都是可以单独启动的   就需要每个子程序头把需要带的模态都带全了

wish2086 发表于 2026-8-27 10:50:59

很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理

白竹 发表于 2026-8-27 11:31:32

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

白色治愈之风 发表于 2026-8-27 11:32:00

你这个和系统自带的区别是哪些,能具体说说吗。

白竹 发表于 2026-8-27 11:33:20

wish2086 发表于 2026-8-27 10:50
很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理

那我等下重新开一个帖子发吧,你等一下刷新就好了

白竹 发表于 2026-8-27 11:36:56

wish2086 发表于 2026-8-27 10:50
很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理

https://www.ugsnx.com/thread-365323-1-1.html分享了。

白竹 发表于 2026-8-27 11:37:56

白色治愈之风 发表于 2026-8-27 11:32
你这个和系统自带的区别是哪些,能具体说说吗。

自带的子程序是独立文件,这个是主程序和子程序都在一个文件里面,

白色治愈之风 发表于 2026-8-27 11:39:38

这是系统自带的,什么都没改,11是主程序,后面的是子程序。

白色治愈之风 发表于 2026-8-27 11:45:31

我更需要的是这种,每个文件加就是一个子程序。这种系统自带的就没办法了。
页: [1] 2 3
查看完整版本: NX-PC后处理实现子程序模式