找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 29|回复: 1

[分享] 【经验分享】NX 后处理防错模块:转速/刀号都好查,最阴的是“G54 同名但 MCS 原点不

[复制链接]

11

主题

42

回帖

828

积分

四级士官

积分
828
发表于 半小时前 | 显示全部楼层 |阅读模式
最近现场连吃几次亏:
  • 工序忘给转速,S=0 直接下刀
  • 两把不同刀,用了同一个 T 号
  • A序 B序都挂 G54,但 MCS 原点根本不是同一个位置,机床不报错,件直接废
后处理不是“能把刀轨转成 G 代码”就行,
更重要的是:别把错程序“顺利”生成出来。
于是我写了套 Start of Operation 的 TCL 防错模块,特点:
  • 有总开关:ASK 弹窗询问 / LOG 批量静默写日志 / OFF 关闭
  • 不靠猜变量,全部 info exists 兜底,避免后处理崩
  • 坐标系不只比 G54/G55 号码,而是比:
    • MCS 原点 XYZ
    • 旋转矩阵
    • MCS 名称(原点读不到时兜底)
  • 刀号、转速、Z 偏置、LOCAL 坐标系、余量都做工序级体检
  • 批量出程序时,警告写成 NC 注释 (### WARNING ...),事后检索即可
不是多牛的东西,但现场比“花哨循环输出”管用。
先发核心思路:
很多人后处理里只比 mom_fixture_offset_value
但 G54 只是“偏置号”,真正加工位置是 MCS 原点。
两个工序都写 G54,MCS 一个在 X0Y0Z0,一个在 X-150Y20Z0,
机床端 G54 只有一组设定值 → 第二道工序直接偏。
所以我用数组存每个 G 代码号的“指纹”:
原点 XYZ / 旋转矩阵 / MCS 名 / 首用工序名
再次遇到同号就比对,差 0.01 以上直接 MOM_abort。
MCS 相关变量不同 NX 版本/挂载位置能读到的不一样,
我实测过 mom_msys_origin / mom_mcsname_attach_opr / mom_oper_geom 这几种思路。

1. 挂在哪里
内容
挂载事件

防错总模块
Start of Operation

重置跨工序变量
Start of Program

日志汇总
End of Program

想读 MCS 原点更稳
也可放 Start of Path 试


2. 总开关(Program Start 里加)


tcl







set ::CHECK_MODE "ASK"     ;# ASK=弹窗  LOG=写日志  OFF=关set ::last_fixture ""set ::CHK_WARN_COUNT 0catch { unset ::fixt_fp }
批量出程序时把第一行改成:



tcl







set ::CHECK_MODE "LOG"
3. 防了哪些事
  • 主轴转速 S=0
  • 刀号不在 1~999
  • 刀具 Z 偏置非零
  • 坐标系号超范围
  • 程序内坐标系切换
  • G54 同名但 MCS 原点/名称不同​
  • LOCAL 局部坐标系
  • 点加工 / 铣削刀型注释自动输出
4. 输出效果


nc







(T01_D10R0.8 D=10. R=0.8 H=01 ce=0.30 di=0.10)(CSYS: G54 MCS=MCS_A ORG=0.0 0.0 0.0)(T02_D12   D=12. R=0.  H=02 ce=0.30 di=0.10)(### WARNING [W] 坐标系有疑 : 坐标系发生切换! 上道工序=G54 当前工序=G54 MCS=MCS_B)

说明:下面这段挂 Start of Operation​
Program Start 里按 2 楼加重置行



tcl







# ========== NX 后处理 工序级防错模块 ==========if {![info exists ::CHECK_MODE]} { set ::CHECK_MODE "ASK" }if {![info exists ::FIXT_MIN]}  { set ::FIXT_MIN 0 }if {![info exists ::FIXT_MAX]}  { set ::FIXT_MAX 5 }if {![info exists ::FIXT_BASE]} { set ::FIXT_BASE 54 }if {[llength [info procs PB_CHK_ALERT]] == 0} {    proc PB_CHK_ALERT {level title msg} {        if {![info exists ::CHECK_MODE]} { set ::CHECK_MODE "ASK" }        switch -- $::CHECK_MODE {            "ASK" {                set ret [MOM_display_message $msg $title $level "继续" "停止"]                if {$ret == 2} { MOM_abort "用户中止:$title" }            }            "LOG" {                MOM_output_literal "(### WARNING [$level] $title : [string map [list "\n" "; "] $msg])"                if {![info exists ::CHK_WARN_COUNT]} { set ::CHK_WARN_COUNT 0 }                incr ::CHK_WARN_COUNT            }        }    }}global mom_operation_name mom_spindle_speedglobal mom_tool_number mom_tool_name mom_tool_z_offsetglobal mom_fixture_offset_value mom_kin_coordinate_system_typeglobal mom_msys_origin mom_oper_geomif {![info exists mom_operation_name]}  { set mom_operation_name "UNKNOWN" }if {![info exists mom_spindle_speed]}   { set mom_spindle_speed 0 }if {![info exists mom_tool_number]}     { set mom_tool_number 0 }if {![info exists mom_tool_z_offset]}   { set mom_tool_z_offset 0 }if {![info exists mom_fixture_offset_value]} { set mom_fixture_offset_value "" }# ① 转速if {$mom_spindle_speed == 0} {    PB_CHK_ALERT "W" "工序有疑" "忘记给主轴转速!\n工序:$mom_operation_name"}# ② 刀号if {![expr {[string is integer -strict $mom_tool_number] && $mom_tool_number>=1 && $mom_tool_number<=999}]} {    PB_CHK_ALERT "E" "刀具有疑" "刀号异常:T=$mom_tool_number"}# ③ Z偏置if {$mom_tool_z_offset != 0} {    PB_CHK_ALERT "W" "刀具有疑" "Z偏置非零:$mom_tool_z_offset"}# ④ 坐标系切换 / 同名不同位if {![info exists ::last_fixture]} { set ::last_fixture "" }if {![info exists ::fixt_fp]} { array set ::fixt_fp {} }set cur_mcs "unknown"if {[info exists mom_oper_geom]} { set cur_mcs $mom_oper_geom }set cur_org "0.0 0.0 0.0"if {[info exists mom_msys_origin] && [llength $mom_msys_origin]>=3} {    set cur_org "[format %.3f [lindex $mom_msys_origin 0]] [format %.3f [lindex $mom_msys_origin 1]] [format %.3f [lindex $mom_msys_origin 2]]"}if {$::last_fixture eq ""} {    set ::last_fixture $mom_fixture_offset_value}set key $mom_fixture_offset_valueif {[info exists ::fixt_fp($key)]} {    set old $::fixt_fp($key)    # 同名不同 MCS    if {[lindex $old 0] ne $cur_mcs} {        PB_CHK_ALERT "W" "坐标系有疑" "G 代码号相同但 MCS 不同!\n当前:$cur_mcs\n之前:[lindex $old 0]"    }    # 同名不同原点    if {[lindex $old 1] ne $cur_org} {        PB_CHK_ALERT "W" "坐标系有疑" "G 代码号相同但 MCS 原点不同!\n当前:$cur_org\n之前:[lindex $old 1]"    }} else {    set ::fixt_fp($key) [list $cur_mcs $cur_org $mom_operation_name]}MOM_output_literal "(CSYS: G[expr {$mom_fixture_offset_value+$::FIXT_BASE}] MCS=$cur_mcs ORG=$cur_org)"

以上内容都可以自行使用------后处理已放入附件自己下载使用不收费

3轴通用后处理.rar

37.14 KB, 下载次数: 5, 下载积分: G币 -1

11

主题

42

回帖

828

积分

四级士官

积分
828
 楼主| 发表于 半小时前 | 显示全部楼层
此后处理已经上机使用----目前没出过任何问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-9-26 18:28

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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