四.实施
先看看UG后处理的构成,UG后处理主要由两个文件组成,*.DEF与*.TCL。前者主要定义了一些格式,后者主要定义了一些运算,我们所要加的程序代码就在后者中。
打开*.TCL,找到程序段proc MOM_linear_move { } { ……},直线运动的运算就在该段内运算,圆弧运动在程序段proc MOM_circular_move { } { ……}中。UG后处理中定义了一些变量,mom_prev_pos为前一点坐标,即起点坐标,mom_pos为终点坐标,mom_pos_arc_center为圆弧运动的圆心点坐标,mom_arc_radius为圆弧半径值,mom_arc_direction为圆弧旋转方向,等等,可从post builder 中查得。
由于UG在运算时按允差计算,并进行四舍五入,在判断相等时不要用相等,而是判断差值小于允差。
有了这些准备,就可以动手编程序了。当然也可以利用post builder做一个用户自定义指令,但核心内容不变,仍需自己编写。限于篇幅,仅示例直线运动的一部分。
global mom_l_code 自定义变量其值为:1,2,3,4
global mom_gxy 自定义变量其值为:X,Y
global mom_ba 自定义变量,第一个B 的值,即第二部分介绍的x值
global mom_bb 自定义变量,第二个B 的值,即y值
global mom_bc 自定义变量,计数长度,即j值
global mom_pos 终点变量
global mom_prev_pos 起点变量
set mom_ba abs($mom_pos(0)-$mom_prev_pos(0))
set mom_bb abs($mom_pos(1)-$mom_prev_pos(1))
if {abs($mom_pos(1)-$mom_prev_pos(1)) < 0.001} {
if {[EQ_is_gt $mom_pos(0) $mom_prev_pos(0)]} {
#X正半轴
set mom_ba 0
set mom_bb 0
set mom_bc $mom_pos(0)-$mom_prev_pos(0)
set mom_gxy X
set mom_l_code 1
} else {
# X负半轴
set mom_ba 0
set mom_bb 0
set mom_bc $mom_pos(0)-$mom_prev_pos(0)
set mom_gxy X
set mom_l_code 3
}
} elseif {abs($mom_pos(0)-$mom_prev_pos(0)) < 0.001} {
if {[EQ_is_gt $mom_pos(1) $mom_prev_pos(1)]} {
# Y正半轴
……
} else {
# Y 负半轴
……
}
} elseif {[EQ_is_gt $mom_pos(1) $mom_prev_pos(1)]} {
if {[EQ_is_gt $mom_pos(0) $mom_prev_pos(0)]} {
if{abs($mom_pos(0)-$mom_prev_pos(0))> abs($mom_pos(1)-$mom_prev_pos(1))} {
# 终点在第1/8区域
set mom_bc abs($mom_pos(0)-$mom_prev_pos(0))
set mom_gxy X
set mom_l_code 1
} else {
# 终点在第2/8区域
set mom_bc abs($mom_pos(1)-$mom_prev_pos(1))
set mom_gxy Y
set mom_l_code 1
}
} else {
if{abs($mom_pos(1)-$mom_prev_pos(1))>abs($mom_pos(0)-$mom_prev_pos(0))}{
# 终点在第3/8区域
……
# 终点在第8/8区域
} else {
set mom_bc abs($mom_pos(0)-$mom_prev_pos(0))
set mom_gxy X
set mom_l_code 4
}
}
}
其他部分略。
五.结束语
如图2所示的图形由ug后处理出的程序如下所示,我厂的线切割需手工输入,为方便程序阅读,加入了坐标值,如果为自动传输,略加修改即可。

我做的后置处理程序经过多次改进,现在已稳定运行一年多了,效果良好。同时希望本文能给读者一定启迪,达到抛砖引玉的目的。