$$子程序2:_check-mgr.grs的代码
PROC/
$$ 程序名:_check-mgr.grs
$$ 功能:在UGmanager环境下检查电极的放电坐标
ENTITY/e_ent(100),cyst,ent
$$cr_num电极的实际数量,e_num(1)电极的总数量
NUMBER/sp,lp,lp2,e_num(3),cr_num,s_num,nc,yes_no
NUMBER/xc(12),yc(12),zc(12),rad(12),ea(12),sa(12),rc(12)
NUMBER/org(3),e_cod(12,4),a_flag(4),yes_flag,l_flag
STRING/mod_no(100),temp(132),check_dir(132),estr_cod(12,4,100)
STRING/ele1_nam(100,132),ele1_prt(100,132),e1_num(100,20)
$$每组电极的数量e1_num
STRING/ele2_nam(100,132),ele2_prt(100,132),e2_num(100,20)
$$排序后每组电极的数量e2_num
STRING/e_name(132),ele_nam(100,132),ele_prt(100,132)
STRING/disprt(132),dir_name(132),prt_name(132),prt_rev(20),wrk(132)
STRING/txtnam(132),st(2,60),st1(10),st2(2,60)
DATA/st,'此电极所有跑位均正确!!!',$
'坐标可能有误,请检查一下???'
DATA/st1,'------'
DATA/st2,'所有电极的跑位均正确无误',$
'有些电极跑位可能有误,请手工确认'
yes_no=1
yes_flag=1
$$--------------$$
START:
&CSMODE=1
cyst=&WCS $$备份当前工作坐标系
disprt=Partop/ASK,DSPLAY
Partop/SET,DSPLAY,disprt $$设置当前显示文件
$$---提取模具名
LB001:
sp=FNDSTR(disprt,'PN=',1)
lp=FNDSTR(disprt,'PRN=',1)
prt_name=SUBSTR(disprt,sp+3,lp-sp-4)
sp=FNDSTR(prt_name,'_',1)
mod_no=SUBSTR(prt_name,1,sp-1)
i=-1
&DECPL=3
LB003:
i=i+1
check_dir='d:\cnc\'+mod_no+'_check_'+ISTR(i)
$$建立文件夹
CRDIR/check_dir,IFERR,LB003:
DOPEN/check_dir
CREATE/TXT,1,check_dir+'\'+mod_no+'_ele_check_information.txt'
WRITE/1,mod_no+'_ele_check_information'
WRITE/1,'---------------------------'
T01:
MASK/63 $$选择
IDENT/'请选择工作电极:',e_ent,CNT,e_num(1),rsp
JUMP/T01:,HLT:,,rsp
$$给每组电极数量赋初值
DO/T02:,i,1,e_num(1)
e1_num(i)='0'
T02:
$$e_num(1)为电极的总数量
$$e_num(2)为电极的实际数量
$$电极的实际数量--初值为1
e_num(2)=1
DO/T03:,i,1,e_num(1)
$$提取每个电极的名称
e_name=&CPNAM(e_ent(i))
sp=FNDSTR(e_name,'PN=',1)
lp=FNDSTR(e_name,'PRN=',1)
lp2=FNDSTR(e_name,'AT=',1)
prt_name=SUBSTR(e_name,sp+3,lp-sp-4)
ele_name(i)=prt_name
ele_prt(i)=e_name
ele1_nam(e_num(2))=ele_nam(i)
ele1_prt(e_num(2))=ele_prt(i)
IFTHEN/e_num(2)==1
e1_num(1)='1'
e_num(2)=e_num(2)+1
ELSEIF/e_num(2)==2
IFTHEN/CMPSTR(ele1_nam(2),ele1_nam(1))==0
e1_num(1)=ISTR(VALF(e1_num(1))+1)
JUMP/T04:
ELSE
e1_num(2)=ISTR(VALF(e1_num(2))+1)
e_num(2)=e_num(2)+1
JUMP/T04:
ENDIF
ELSE
DO/T05:,j,1,e_num(2)-1
IFTHEN/CMPSTR(ele1_nam(e_num(2)),ele1_num(j))==0
e1_num(j)=ISTR(VALF(e1_num(j))+1)
JUMP/T04:
ENDIF
T05:
e1_num(e_num(2))=ISTR(VALF(e1_num(e_num(2)))+1)
e_num(2)=e_num(2)+1
JUMP/T04:
ENDIF
T04:
T03:
$$----------电极排顺序----------
$$电极的实际数量=e_num(2)-1
$$电极排序的数量
e_num(3)=1
DO/T08:,i,1,e_num(2)-1
ele2_nam(e_num(3))=ele1_nam(i)
ele2_prt(e_num(3))=ele1_prt(i)
e2_num(e_num(3))=e1_num(i)
IFTHEN/e_num(3)==1
JUMP/T07:
ELSEIF/e_num(3)==2
IFTHEN/CMPSTR(ele2_nam(1),ele2_nam(e_num(3)))>0
temp=ele2_nam(2)
ele2_nam(2)=ele2_nam(1)
ele2_nam(1)=temp
temp=ele2_prt(2)
ele2_prt(2)=ele2_prt(1)
ele2_prt(1)=temp
temp=e2_num(2)
e2_num(2)=e2_num(1)
e2_num(1)=temp
ENDIF
ELSE
DO/T06:,j,1,e_num(3)-1
IFTHEN/CMPSTR(ele2_nam(j),ele2_nam(e_num(3)))>0
temp=ele2_nam(j)
ele2_nam(j)=ele2_nam(e_num(3))
ele2_nam(e_num(3))=temp
temp=ele2_prt(j)
ele2_prt(j)=ele2_prt(e_num(3))
ele2_prt(e_num(3))=temp
temp=e2_num(j)
e2_num(j)=e2_num(e_num(3))
e2_num(e_num(3))=temp
ENDIF
T06:
ENDIF
T07:
e_num(3)=e_num(3)+1
T08:
$$--------------开始读取数据--------
DO/T18:,i,1,e_num(2)-1
CREATE/TXT,2,check_dir+'\'+ele2_nam(i)+'_circle_information.txt'
WRITE/2,ele2_nam(i)+'_circle_information'
WRITE/2,'跑位总数有:'+e2_num(i)
WRITE/2,'获得的跑位数据及角度'
WRITE/2,'---------------------------'
Partop/SET,DSPLAY,disprt
DO/TT0:,j,1,e_num(1)
BLANK/e_ent(j)
TT0:
$$ wrk=dir_name+ele2_nam(i)+'_'+ele2_prt(i)
wrk=ele2_prt(i)
s_num=0
DO/T09:,j,1,e_num(1)
e_name=&CPNAM(e_ent(j))
IFTHEN/CMPSTR(e_name,wrk)==0
UNBLNK/e_ent(j)
s_num=s_num+1
ENDIF
T09:
&DECPL=3
DELIM/','
MASK/5 $$取圆的数据
INEXTE
nc=1
LAC1:
ent=NEXTE/IFEND,LAC2:
OBTAIN/ent,xc(nc),yc(nc),zc(nc),rad(nc),sa(nc),ea(nc)
IFTHEN/ea(nc)-sa(nc)==359.8
rc(nc)=ABSF(sa(nc)-0.1)
WRITE/2,'跑位'+ISTR(nc)+':'
WRITE/2,'坐标:'
WRITE/2,xc(nc),yc(nc),zc(nc)
WRITE/2,'旋转角度:'
WRITE/2,rc(nc)
WRITE/2,'---------------------------'
nc=nc+1
ENDIF
JUMP/LAC1:
LAC2:
$$----------------------------------
$$--------------取图纸中数据--------
DO/T10:,k,1,12
estr_cod(k,1)=''
estr_cod(k,2)=''
estr_cod(k,3)=''
estr_cod(k,4)=''
T10:
Partop/SET,DSPLAY,wrk
&DECPL=3
&DSTATE=2
&CURDRW='ELE_DWG'
&ENSITE=5
LAD0:
MASK/25 $$取制图数据
INEXTE $$数据初始化
LAD1:
ent=NEXTE/IFEND,LAD2:
txtnam=&DMTEXT(ent)
org=&ORIGIN(ent)
IFTHEN/org(1)==163
$$第1个跑位
IFTHEN/org(2)==213
estr_cod(1,1)=txtnam
ENDIF
IFTHEN/org(2)==207
estr_cod(1,2)=txtnam
ENDIF
IFTHEN/org(2)==201
estr_cod(1,3)=txtnam
ENDIF
$$第2个跑位
IFTHEN/org(2)==189
estr_cod(2,1)=txtnam
ENDIF
IFTHEN/org(2)==183
estr_cod(2,2)=txtnam
ENDIF
IFTHEN/org(2)==177
estr_cod(2,3)=txtnam
ENDIF
$$第3个跑位
IFTHEN/org(2)==165
estr_cod(3,1)=txtnam
ENDIF
IFTHEN/org(2)==159
estr_cod(3,2)=txtnam
ENDIF
IFTHEN/org(2)==153
estr_cod(3,3)=txtnam
ENDIF
$$第4个跑位
IFTHEN/org(2)==141
estr_cod(4,1)=txtnam
ENDIF
IFTHEN/org(2)==135
estr_cod(4,2)=txtnam
ENDIF
IFTHEN/org(2)==129
estr_cod(4,3)=txtnam
ENDIF
BLANK/ent
ENDIF
IFTHEN/org(1)==113
$$第5个跑位
IFTHEN/org(2)==213
estr_cod(5,1)=txtnam
ENDIF
IFTHEN/org(2)==207
estr_cod(5,2)=txtnam
ENDIF
IFTHEN/org(2)==201
estr_cod(5,3)=txtnam
ENDIF
$$第6个跑位
IFTHEN/org(2)==189
estr_cod(6,1)=txtnam
ENDIF
IFTHEN/org(2)==183
estr_cod(6,2)=txtnam
ENDIF
IFTHEN/org(2)==177
estr_cod(6,3)=txtnam
ENDIF
$$第7个跑位
IFTHEN/org(2)==165
estr_cod(7,1)=txtnam
ENDIF
IFTHEN/org(2)==159
estr_cod(7,2)=txtnam
ENDIF
IFTHEN/org(2)==153
estr_cod(7,3)=txtnam
ENDIF
$$第8个跑位
IFTHEN/org(2)==141
estr_cod(8,1)=txtnam
ENDIF
IFTHEN/org(2)==135
estr_cod(8,2)=txtnam
ENDIF
IFTHEN/org(2)==129
estr_cod(8,3)=txtnam
ENDIF
BLANK/ent
ENDIF
IFTHEN/org(1)==63
$$第9个跑位
IFTHEN/org(2)==213
estr_cod(9,1)=txtnam
ENDIF
IFTHEN/org(2)==207
estr_cod(9,2)=txtnam
ENDIF
IFTHEN/org(2)==201
estr_cod(9,3)=txtnam
ENDIF
$$第10个跑位
IFTHEN/org(2)==189
estr_cod(10,1)=txtnam
ENDIF
IFTHEN/org(2)==183
estr_cod(10,2)=txtnam
ENDIF
IFTHEN/org(2)==177
estr_cod(10,3)=txtnam
ENDIF
$$第11个跑位
IFTHEN/org(2)==165
estr_cod(11,1)=txtnam
ENDIF
IFTHEN/org(2)==159
estr_cod(11,2)=txtnam
ENDIF
IFTHEN/org(2)==153
estr_cod(11,3)=txtnam
ENDIF
$$第12个跑位
IFTHEN/org(2)==141
estr_cod(12,1)=txtnam
ENDIF
IFTHEN/org(2)==135
estr_cod(12,2)=txtnam
ENDIF
IFTHEN/org(2)==129
estr_cod(12,3)=txtnam
ENDIF
BLANK/ent
ENDIF
$$圆圈的数值
IFTHEN/org(1)==185
$$第1个跑位
IFTHEN/org(2)==201
estr_cod(1,4)=txtnam
ENDIF
$$第2个跑位
IFTHEN/org(2)==177
estr_cod(2,4)=txtnam
ENDIF
$$第3个跑位
IFTHEN/org(2)==153
estr_cod(3,4)=txtnam
ENDIF
$$第4个跑位
IFTHEN/org(2)==129
estr_cod(4,4)=txtnam
ENDIF
BLANK/ent
ENDIF
IFTHEN/org(1)==135
$$第5个跑位
IFTHEN/org(2)==201
estr_cod(5,4)=txtnam
ENDIF
$$第6个跑位
IFTHEN/org(2)==177
estr_cod(6,4)=txtnam
ENDIF
$$第7个跑位
IFTHEN/org(2)==153
estr_cod(7,4)=txtnam
ENDIF
$$第8个跑位
IFTHEN/org(2)==129
estr_cod(8,4)=txtnam
ENDIF
BLANK/ent
ENDIF
IFTHEN/org(1)==85
$$第9个跑位
IFTHEN/org(2)==201
estr_cod(9,4)=txtnam
ENDIF
$$第10个跑位
IFTHEN/org(2)==177
estr_cod(10,4)=txtnam
ENDIF
$$第11个跑位
IFTHEN/org(2)==153
estr_cod(11,4)=txtnam
ENDIF
$$第12个跑位
IFTHEN/org(2)==129
estr_cod(12,4)=txtnam
ENDIF
BLANK/ent
ENDIF
JUMP/LAD1:
LAD2:
UNBLNK/ALL
DO/T11:,k,12,1,-1
sp=LENF(estr_cod(k,1))
IFTHEN/sp>3
cr_num=k
JUMP/T12:
ENDIF
T11:
T12:
WRITE/2,'---------------------------'
WRITE/2,'图纸中的跑位数为:'+ISTR(cr_num)
WRITE/2,'---------------------------'
WRITE/2,'图纸中获得的跑位数据及角度'
WRITE/2,'---------------------------'
IFTHEN/cr_num==1
e_cod(1,1)=VALF(estr_cod(1,1))
e_cod(1,2)=VALF(estr_cod(1,2))
e_cod(1,3)=VALF(estr_cod(1,3))
e_cod(1,4)=VALF(estr_cod(1,4))
WRITE/2,'跑位1:'
WRITE/2,'坐标:'
WRITE/2,e_cod(1,1),e_cod(1,2),e_cod(1,3)
WRITE/2,'旋转角度:'
WRITE/2,e_cod(1,4)
WRITE/2,'---------------------------'
$$数据比较
IFTHEN/nc==2
a_flag(1)=e_cod(1,1)-xc(1)
a_flag(2)=e_cod(1,2)-yc(1)
a_flag(3)=e_cod(1,3)-zc(1)
a_flag(4)=e_cod(1,4)-rc(1)
sp=ABSF(a_flag(1))+ABSF(a_flag(2))
sp=sp+ABSF(a_flag(3))+ABSF(a_flag(4))
IFTHEN/sp<0.01
yes_no=1
JUMP/T16:
ENDIF
ENDIF
yes_no=2
JUMP/T16:
ENDIF
yes_no=1
IFTHEN/cr_num>1
DO/T13:,j,1,cr_num
e_cod(j,1)=VALF(estr_cod(j,1))
e_cod(j,2)=VALF(estr_cod(j,2))
e_cod(j,3)=VALF(estr_cod(j,3))
e_cod(j,4)=VALF(estr_cod(j,4))
WRITE/2,'跑位'+ISTR(j)+':'
WRITE/2,'坐标:'
WRITE/2,e_cod(j,1),e_cod(j,2),e_cod(j,3)
WRITE/2,'旋转角度:'
WRITE/2,e_cod(j,4)
WRITE/2,'---------------------------'
T13:
ENDIF
IFTHEN/cr_num<>nc-1
yes_no=2
JUMP/T16:
ENDIF
l_flag=1
DO/T15:,j,1,cr_num
DO/T14:,K,1,cr_num
a_flag(1)=e_cod(j,1)-xc(k)
a_flag(2)=e_cod(j,2)-yc(k)
a_flag(3)=e_cod(j,3)-zc(k)
a_flag(4)=e_cod(j,4)-rc(k)
sp=ABSF(a_flag(1))+ABSF(a_flag(2))
sp=sp+ABSF(a_flag(3))+ABSF(a_flag(4))
IFTHEN/sp<0.01
yes_no=1
JUMP/T17:
ENDIF
l_flag=k
T14:
IFTHEN/l_flag==cr_num
yes_no=2
JUMP/T16:
ENDIF
T17:
T15:
T16:
yes_flag=yes_flag*yes_no
$$----------------------------------
FILE/TXT,2
FTERM/TXT,2
WRITE/1,ele2_nam(i)+st1+st(yes_no)
WRITE/1,'---------------------------'
T18:
$$-----------------
Partop/SET,DSPLAY,disprt
IFTHEN/yes_flag>1
yes_flag=2
ENDIF
DO/TT1:,j,1,e_num(1)
BLANK/e_ent(j)
TT1:
FILE/TXT,1
FTERM/TXT,1
MESSG/st2(yes_flag)
MESSG/'所有检查结果放在文件夹'+check_dir+'中,请注意查收!!'
HLT:
RETURN
$$程序结束