找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 83|回复: 2

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

[复制链接]
3 G币 回复本帖可获得 1 G币奖励! 每人限 1 次

38

主题

152

回帖

3344

积分

中尉

积分
3344
发表于 3 小时前 | 显示全部楼层 |阅读模式
求助在每次换刀前的刀具信息,在打开刀具补偿的工序刀具信息输出D值,没有刀具补偿的工序不输出D值,如何在后处理语句中增加判断,下面是AI出的,达不到要求
111.PNG


#---------------------
# 全局变量声明
#---------------------
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 {[info exists mom_tool_cutcom_register] && $mom_tool_cutcom_register != ""} {
    set D_code $mom_tool_cutcom_register
} else {
    set D_code ""
}

#---------------------
# 安全获取刀具直径
#-----------------------
# 尝试多种方式获取刀具直径
if {[info exists mom_tool_diameter] && $mom_tool_diameter != ""} {
    set tool_dia $mom_tool_diameter
} elseif {[info exists mom_tool_diameter_nominal] && $mom_tool_diameter_nominal != ""} {
    set tool_dia $mom_tool_diameter_nominal
} elseif {[info exists mom_tool_diameter_defined] && $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 [format "%.1f" $dia]

    # 检查是否为整数
    if {[expr {abs($dia - int($dia))}] < 0.0001} {
        # 是整数,直接输出整数部分
        return [format "%.0f" $dia]
    } elseif {[expr {abs($dia * 10 - int($dia * 10))}] < 0.0001} {
        # 是一位小数,去除尾部的0
        return [string trimright [format "%.1f" $dia] 0]
    } else {
        # 多位小数,保留2位
        return [string trimright [format "%.2f" $dia] 0]
    }
}

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

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

# 检查D_code是否存在且有效
if {$D_code != ""} {
    # 尝试转换为整数
    if {![catch {set d_num [expr {int($D_code)}]}]} {
        if {$d_num > 0} {
            set output_D_string "D=[format "%02d" $d_num]"
        }
    }
}

#---------------------
# 按刀具类型输出注释
#---------------------
if {$mom_tool_type eq "Milling Tool-T Cutter"} {
    # T型铣刀 - 使用下角半径
    if {[info exists mom_tool_lower_corner_radius] && $mom_tool_lower_corner_radius != ""} {
        set cr_val [string trimright [format "%.2f" $mom_tool_lower_corner_radius] 0]
        set cr_val [string trimright $cr_val .]
        if {$cr_val == ""} {set cr_val 0}
    } else {
        set cr_val 0
    }

    if {$output_D_string != ""} {
        MOM_output_literal "(T[format "%01d" $mom_tool_number]mom_tool_name D$formatted_dia R$cr_val H=[format "%02d" $H_code] $output_D_string)"
    } else {
        MOM_output_literal "(T[format "%01d" $mom_tool_number]mom_tool_name D$formatted_dia R$cr_val H=[format "%02d" $H_code])"
    }
    set rr2 "R=$cr_val"

} elseif {[string first "Drill" $mom_tool_type] != -1 || [string first "drill" $mom_tool_type] != -1} {
    # 钻头
    set current_angle 0
    if {[info exists mom_tool_taper_angle] && $mom_tool_taper_angle != ""} {
        set current_angle [expr {180.0 / 3.1415926535 * $mom_tool_taper_angle}]
    }
    if {$current_angle == 0 && [info exists mom_tool_point_angle] && $mom_tool_point_angle != ""} {
        set current_angle [expr {180.0 / 3.1415926535 * $mom_tool_point_angle}]
    }

    if {$output_D_string != ""} {
        MOM_output_literal "(T[format "%01d" $mom_tool_number]mom_tool_name D$formatted_dia A[format "%.0f" $current_angle] H=[format "%02d" $H_code] $output_D_string)"
    } else {
        MOM_output_literal "(T[format "%01d" $mom_tool_number]mom_tool_name D$formatted_dia A[format "%.0f" $current_angle] H=[format "%02d" $H_code])"
    }
    set rr2 "A=[format "%.0f" $current_angle]"

} elseif {[string first "Chamfer" $mom_tool_type] != -1 || [string first "chamfer" $mom_tool_type] != -1} {
    # 倒角刀
    set current_angle 0
    if {[info exists mom_tool_taper_angle] && $mom_tool_taper_angle != ""} {
        set current_angle [expr {180.0 / 3.1415926535 * $mom_tool_taper_angle}]
    }
    if {$current_angle == 0 && [info exists mom_tool_point_angle] && $mom_tool_point_angle != ""} {
        set current_angle [expr {180.0 / 3.1415926535 * $mom_tool_point_angle}]
    }
    set angle [expr {$current_angle * 2}]

    if {$output_D_string != ""} {
        MOM_output_literal "(T[format "%01d" $mom_tool_number]mom_tool_name D$formatted_dia A[format "%.0f" $angle] H=[format "%02d" $H_code] $output_D_string)"
    } else {
        MOM_output_literal "(T[format "%01d" $mom_tool_number]mom_tool_name D$formatted_dia A[format "%.0f" $angle] H=[format "%02d" $H_code])"
    }
    set rr2 "A=[format "%.0f" $angle]"

} else {
    # 其他刀具
    if {[info exists mom_tool_corner1_radius] && $mom_tool_corner1_radius != ""} {
        set r_val [string trimright [format "%.2f" $mom_tool_corner1_radius] 0]
        set r_val [string trimright $r_val .]
        if {$r_val == ""} {set r_val 0}
    } else {
        set r_val 0
    }

    if {$output_D_string != ""} {
        MOM_output_literal "(T[format "%01d" $mom_tool_number]mom_tool_name D$formatted_dia R$r_val H=[format "%02d" $H_code] $output_D_string)"
    } else {
        MOM_output_literal "(T[format "%01d" $mom_tool_number]mom_tool_name D$formatted_dia R$r_val H=[format "%02d" $H_code])"
    }
    set rr2 "R=$r_val"
}


19

主题

249

回帖

5633

积分

上尉

积分
5633
发表于 1 小时前 | 显示全部楼层

回帖奖励 +1 G币

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

给你一个我自己加在刀具XY余量里的刀补D值判断,这个也是AI给修改的。
ff0c5cfb-f063-4129-950f-866ef0c023a9.png
刀具补偿寄存器里只要有,就会在XY余量里显示
111.png

# ======================================================
# 刀具补偿与加工余量处理脚本
# 输出刀补(D.N)  余量(XY  Z)
# 当刀具补偿寄存器为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 {[info exists mom_stock_part_use] && $mom_stock_part_use} {
    set mom_stock_floor $mom_stock_part
}

# 默认值处理
set mom_stock_floor [expr {[info exists mom_stock_floor] ? $mom_stock_floor : 0}]

# 壁余量特殊处理
if {[info exists mom_wall_stock]} {
    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 [expr {double($mom_stock_part)}]
    set xy [string trimright [format $fmt $xy_val] "0"]
    if {[string first "." $xy] == -1} { append xy "." }
    if {$xy eq "."} { set xy "0." }

    # 格式化Z余量
    set z_val [expr {double($mom_stock_floor)}]
    set z [string trimright [format $fmt $z_val] "0"]
    if {[string first "." $z] == -1} { append z "." }
    if {$z eq "."} { set z "0." }

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

    MOM_output_literal "($msg)"
}

# 清理变量
catch {unset mom_stock_part_use}


9

主题

1395

回帖

4453

积分

中尉

积分
4453
发表于 4 分钟前 | 显示全部楼层

回帖奖励 +1 G币

是不是只要刀具补偿寄存器里面有值,不管工序里面是否开启刀补都会输出刀补号。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-28 11:35

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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