笨小孩:猪头 发表于 2025-11-30 11:26:56

UG分层铣宏程序后处理做法

下面的代码怎么在UG后处理构造器中怎么放置呢?有大神指点一下吗?
AI出的代码合并在下面的,有一个图解。达到下面宏程序输出效果。



# 定义浮点数格式化辅助函数
proc trim_float {value} {
    string trimright 0
}

# 声明全局变量
global mom_total_depth mom_cut_per_pass mom_safe_height
global mom_feed_rate_cut mom_pos mom_prev_pos
global mom_prev_motion_type mom_motion_type z_value macro_head_output
global mom_cut_level_max_depth mom_depth_per_cut mom_last_pos mom_cutcom_angle
global ff mom_feed_cut_value feed macro_end_output

# 主分层铣过程
proc MOM_LAYERED_MILL {} {

    # 1. 变量检查与初始化
    if {!}   { set mom_total_depth 20.0 }
    if {!}{ set mom_cut_per_pass 5.0 }
    if {!}   { set mom_safe_height 10.0 }
    if {!} { set mom_feed_rate_cut 100 }

    # 2. 性能优化:缓存频繁访问的全局变量(@ref)
    set cutcom_angle $mom_cutcom_angle
    set pos_z $mom_pos(2)
    set pos_x $mom_pos(0)
    set pos_y $mom_pos(1)

    # 格式化坐标值
    set z_value
    set mom_pos(0)
    set mom_pos(1)
    set feed

    # 3. 短路返回优化:如果切削补偿角度非零,直接输出线性移动
    if {$cutcom_angle != 0} {
      MOM_do_template linear_move
      return
    }

    # 4. 分层计算
    set num_layers
    set current_depth 0.0
    MOM_output_literal "(分层铣开始:总深度=, 层数=$num_layers)"

    # 5. 宏程序模式输出(@ref)
    if { && $macro_head_output} {
      set last_z
      set current_z $z_value
      set feed_cut

      # 使用条件运算符简化深度值选择
      set depth_val ]

      # 5.1 批量输出宏变量设置(使用列表和foreach循环优化)(@ref)
      set output_lines [list \
            "#101=$last_z" \
            "#102=$depth_val" \
            "#103=$current_z" \
            "#104=#102+2." \
            "#105=$feed_cut." \
            {#106=#101+#102 * 10.} \
      ]
      foreach line $output_lines { MOM_output_literal $line }

      # 5.2 输出循环控制逻辑
      set control_lines [list \
            {WHILE[#101NE#103]DO1} \
            "#101=#101-#102" \
            {IF[#101LE#103]THEN#101=#103} \
            "G00 X$mom_pos(0) Y$mom_pos(1)" \
            {Z[#101+#104]} \
      ]
      foreach line $control_lines { MOM_output_literal $line }

      MOM_suppress Once Z_M
      MOM_output_literal "G01 Z#101 F#105"
      MOM_suppress Once G_motion Z_M F F_user_add

    } else {
      # 6. 传统分层循环处理
      for {set i 1} {$i <= $num_layers} {incr i} {
            set current_depth
            if {$current_depth > $mom_total_depth} { set current_depth $mom_total_depth }

            MOM_output_literal "(第 $i 层,深度=-)"
            MOM_output_literal "G00 Z"
            MOM_output_literal "G01 Z- F$feed"

            MOM_do_template contour_cut ;# 触发轮廓切削

            if {$i < $num_layers} {
                MOM_output_literal "G00 Z"
            }
      }
    }

    # 7. 结束处理
    if { && $macro_end_output && $cutcom_angle == 0} {
      set end_lines
      foreach line $end_lines { MOM_output_literal $line }
    } else {
      MOM_output_literal "G00 Z"
    }
    MOM_output_literal "(分层铣结束)"
}


472751863 发表于 2025-12-1 06:42:46

虽然没看懂,但顶一个

笨小孩:猪头 发表于 2025-12-1 11:34:37

大神都没空吗?

hegaoj3 发表于 2025-12-3 14:15:50

没看懂,但顶一个
页: [1]
查看完整版本: UG分层铣宏程序后处理做法