找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 509|回复: 23

[分享] NX-PC后处理实现子程序模式

[复制链接]

13

主题

28

回帖

640

积分

三级士官

积分
640
发表于 2026-8-27 10:23:26 | 显示全部楼层 |阅读模式
部分系统支持子程序模式,方便查找和调试。自己也是基于这个才想搞一个的。主程序和子程序都放在一个文件里面,自带的子程序模式是分开的。子程序单独一个文件。子程序模式基于工序实现,也可以合并,基于刀具判断和工序判断。看个人喜欢,我这边就简单一点的,基于工序判断。上图。下图是生成的主程序。

1.png

1.打开构造器。

2.png
2.在NC输出里面,找到程序头。转跳到缓冲区事件里面.

3.png
3.在缓冲区时间里面找到输出的程序段。

4.png
4.按照图片要求,把要插入的内容复制到TCL文件,

6.png
5.复制代码。

5.png
6.按照相同的步骤 输出其他位置。工序程序头,和工序程序尾 输出O1001和M99
7.png
8.png
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 [format "O%d" $current_sub_num]
#输出操作名称注释 (可选,用于对照,或者添加其他内容备注)
#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 [format "M98 P%d" $mom_sys_sub_prog_counter]
    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"
}



18

主题

168

回帖

1597

积分

六级士官

积分
1597
发表于 2026-8-27 10:27:53 | 显示全部楼层
本帖最后由 0小刚/tp 于 2026-8-27 10:31 编辑

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

1

主题

1315

回帖

1万

积分

中校

积分
10991
发表于 2026-8-27 10:50:59 | 显示全部楼层
很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理

13

主题

28

回帖

640

积分

三级士官

积分
640
 楼主| 发表于 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 { ![info exists mom_prev_op_tool_number] } {
} 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 { [info exists mom_spindle_speed] && $mom_spindle_speed > 0 } {
    # 格式化输出 S 代码
    set s_code [format "S%.0f" $mom_spindle_speed]
   
    # 判断正反转并输出 M 代码
    if { [info exists mom_spindle_mode] } {
        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[format "%.4f" $rapid_x] Y[format "%.4f" $rapid_y]"
                MOM_output_literal "M590 L1"
                MOM_output_literal "G43 $h_code"
                MOM_output_literal "G0 Z[format "%.4f" $rapid_z]"
    } else {
        #判断不同刀具,默认操作
        #MOM_output_literal "(第二行,是新刀,不需要,调试用)"
    }
}
# 3. 判断使用
    set mom_prev_op_tool_number $mom_tool_number

13

主题

2023

回帖

6122

积分

上尉

积分
6122
发表于 2026-8-27 11:32:00 | 显示全部楼层
123.png 你这个和系统自带的区别是哪些,能具体说说吗。

13

主题

28

回帖

640

积分

三级士官

积分
640
 楼主| 发表于 2026-8-27 11:33:20 | 显示全部楼层
wish2086 发表于 2026-8-27 10:50
很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理

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

13

主题

28

回帖

640

积分

三级士官

积分
640
 楼主| 发表于 2026-8-27 11:36:56 | 显示全部楼层
wish2086 发表于 2026-8-27 10:50
很想要一个这样的后处理,楼主能分享下吗。我不会写PC后处理

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

13

主题

28

回帖

640

积分

三级士官

积分
640
 楼主| 发表于 2026-8-27 11:37:56 | 显示全部楼层
白色治愈之风 发表于 2026-8-27 11:32
你这个和系统自带的区别是哪些,能具体说说吗。

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

13

主题

2023

回帖

6122

积分

上尉

积分
6122
发表于 2026-8-27 11:39:38 | 显示全部楼层
11.png 12.png 这是系统自带的,什么都没改,11是主程序,后面的是子程序。

13

主题

2023

回帖

6122

积分

上尉

积分
6122
发表于 2026-8-27 11:45:31 | 显示全部楼层
13.png 我更需要的是这种,每个文件加就是一个子程序。这种系统自带的就没办法了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2026-10-13 02:13

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表