jindewei 发表于 2026-4-28 07:47:13

求助自动判断刀具补偿输出信息

求助在每次换刀前的刀具信息,在打开刀具补偿的工序刀具信息输出D值,没有刀具补偿的工序不输出D值,如何在后处理语句中增加判断,下面是AI出的,达不到要求



#---------------------
# 全局变量声明
#---------------------
global mom_tool_name
global mom_tool_diameter
global mom_tool_corner1_radius
global mom_tool_lower_corner_radius
global mom_tool_type
global mom_tool_number
global mom_tool_taper_angle
global mom_tool_point_angle
global mom_tool_adjust_register
global mom_tool_cutcom_register
global mom_tool_diameter_defined
global mom_tool_diameter_nominal

#---------------------
# 补偿号赋值
#-----------------------
set H_code $mom_tool_adjust_register

# 安全获取D_code
if { && $mom_tool_cutcom_register != ""} {
    set D_code $mom_tool_cutcom_register
} else {
    set D_code ""
}

#---------------------
# 安全获取刀具直径
#-----------------------
# 尝试多种方式获取刀具直径
if { && $mom_tool_diameter != ""} {
    set tool_dia $mom_tool_diameter
} elseif { && $mom_tool_diameter_nominal != ""} {
    set tool_dia $mom_tool_diameter_nominal
} elseif { && $mom_tool_diameter_defined != ""} {
    set tool_dia $mom_tool_diameter_defined
} else {
    # 如果没有直径参数,设置为0
    set tool_dia 0
}

# 改进的格式化函数
proc format_diameter {dia} {
    if {$dia == 0} {
      return "0"
    }

    # 尝试保留1位小数
    set formatted

    # 检查是否为整数
    if { < 0.0001} {
      # 是整数,直接输出整数部分
      return
    } elseif { < 0.0001} {
      # 是一位小数,去除尾部的0
      return 0]
    } else {
      # 多位小数,保留2位
      return 0]
    }
}

# 格式化刀具直径
if {$tool_dia != 0} {
    set formatted_dia
    # 确保不会出现空字符串
    if {$formatted_dia == ""} {set formatted_dia 0}
} else {
    set formatted_dia 0
}

#---------------------
# 判断是否输出D值
#-----------------------
set output_D_string ""

# 检查D_code是否存在且有效
if {$D_code != ""} {
    # 尝试转换为整数
    if {!}]} {
      if {$d_num > 0} {
            set output_D_string "D="
      }
    }
}

#---------------------
# 按刀具类型输出注释
#---------------------
if {$mom_tool_type eq "Milling Tool-T Cutter"} {
    # T型铣刀 - 使用下角半径
    if { && $mom_tool_lower_corner_radius != ""} {
      set cr_val 0]
      set cr_val
      if {$cr_val == ""} {set cr_val 0}
    } else {
      set cr_val 0
    }

    if {$output_D_string != ""} {
      MOM_output_literal "(T:$mom_tool_name D$formatted_dia R$cr_val H= $output_D_string)"
    } else {
      MOM_output_literal "(T:$mom_tool_name D$formatted_dia R$cr_val H=)"
    }
    set rr2 "R=$cr_val"

} elseif { != -1 || != -1} {
    # 钻头
    set current_angle 0
    if { && $mom_tool_taper_angle != ""} {
      set current_angle
    }
    if {$current_angle == 0 && && $mom_tool_point_angle != ""} {
      set current_angle
    }

    if {$output_D_string != ""} {
      MOM_output_literal "(T:$mom_tool_name D$formatted_dia A H= $output_D_string)"
    } else {
      MOM_output_literal "(T:$mom_tool_name D$formatted_dia A H=)"
    }
    set rr2 "A="

} elseif { != -1 || != -1} {
    # 倒角刀
    set current_angle 0
    if { && $mom_tool_taper_angle != ""} {
      set current_angle
    }
    if {$current_angle == 0 && && $mom_tool_point_angle != ""} {
      set current_angle
    }
    set angle

    if {$output_D_string != ""} {
      MOM_output_literal "(T:$mom_tool_name D$formatted_dia A H= $output_D_string)"
    } else {
      MOM_output_literal "(T:$mom_tool_name D$formatted_dia A H=)"
    }
    set rr2 "A="

} else {
    # 其他刀具
    if { && $mom_tool_corner1_radius != ""} {
      set r_val 0]
      set r_val
      if {$r_val == ""} {set r_val 0}
    } else {
      set r_val 0
    }

    if {$output_D_string != ""} {
      MOM_output_literal "(T:$mom_tool_name D$formatted_dia R$r_val H= $output_D_string)"
    } else {
      MOM_output_literal "(T:$mom_tool_name D$formatted_dia R$r_val H=)"
    }
    set rr2 "R=$r_val"
}


张思颖 发表于 2026-4-28 10:05:59

本帖最后由 张思颖 于 2026-4-28 10:18 编辑

给你一个我自己加在刀具XY余量里的刀补D值判断,这个也是AI给修改的。

刀具补偿寄存器里只要有,就会在XY余量里显示


# ======================================================
# 刀具补偿与加工余量处理脚本
# 输出刀补(D.N)余量(XYZ)
# 当刀具补偿寄存器为0时完全抑制其显示
# ======================================================

# 全局变量声明
global mom_operation_type       # 当前加工操作类型
global mom_stock_part         # 侧面余量(XY方向)
global mom_stock_floor          # 底面余量(Z方向)
global mom_wall_stock         # 壁余量
global mom_tool_cutcom_register # 刀具补偿寄存器
global mom_stock_part_use       # 余量同步标志

# 余量同步处理
if { && $mom_stock_part_use} {
    set mom_stock_floor $mom_stock_part
}

# 默认值处理
set mom_stock_floor ? $mom_stock_floor : 0}]

# 壁余量特殊处理
if {} {
    if {$mom_wall_stock != 0} {
      set mom_stock_part $mom_wall_stock
    }
}

# 仅对非点钻类操作处理
if {$mom_operation_type ni {"Point to Point" "Drilling"}} {
    set fmt "%.3f"

    # 格式化XY余量
    set xy_val
    set xy "0"]
    if { == -1} { append xy "." }
    if {$xy eq "."} { set xy "0." }

    # 格式化Z余量
    set z_val
    set z "0"]
    if { == -1} { append z "." }
    if {$z eq "."} { set z "0." }

    # 输出逻辑
    if { && $mom_tool_cutcom_register != 0} {
      # 有有效刀补时显示寄存器号(刀具补偿寄存器为大于0的整数,显示刀具补偿寄存器数值)
      set msg "D.N=DXY=$xy mmZ=$z mm"
    } else {
      # 无刀补或刀具补偿寄存器为0时只显示 X Y 余量
      set msg "XY=$xy mmZ=$z mm"
    }

    MOM_output_literal "($msg)"
}

# 清理变量
catch {unset mom_stock_part_use}


白色治愈之风 发表于 2026-4-28 11:30:35

是不是只要刀具补偿寄存器里面有值,不管工序里面是否开启刀补都会输出刀补号。

白色治愈之风 发表于 2026-4-28 11:36:33

张思颖 发表于 2026-4-28 10:05
给你一个我自己加在刀具XY余量里的刀补D值判断,这个也是AI给修改的。

刀具补偿寄存器里只要有,就会在XY ...

是不是只要刀具补偿寄存器里面有值,不管工序里面是否开启刀补都会输出刀补号。

gosh 发表于 2026-4-28 11:51:18

我也有同样的问题!

张思颖 发表于 2026-4-28 14:08:28

白色治愈之风 发表于 2026-4-28 11:36
是不是只要刀具补偿寄存器里面有值,不管工序里面是否开启刀补都会输出刀补号。 ...

是的,这个是有点BUG,除了钻头丝锥之类的(钻头丝锥之类的刀具不会输出XY余量值),只要在刀具补偿寄存器里填值都会有, 所以我在建刀具的时候就没有给开粗刀的刀具补偿寄存器里面填任何值,我自己也找了很久,奈何水平有限,也想用非切削移动里的刀具补偿来判断,就是没找到那里的变量

tombai691019 发表于 2026-4-28 20:56:19

本帖最后由 tombai691019 于 2026-4-28 21:10 编辑

还要用AI?其实前面有人分享的后处理里面都有了,只是好多人没看明白。用了也不知所以然,前面分享的后处理里面有判断的,只有非切削里面设置了才输出,否则不输出。可以去找找。
页: [1]
查看完整版本: 求助自动判断刀具补偿输出信息