凸轮件的测绘与二次设计CAD/CAM 凸轮件的测绘与二次设计 何首鹏 我厂绝大部分产品的设计都是测绘之后的二次设计,其中凸轮的测绘特别多。由于手工测绘导致设计误差大、对机械的相关运动没有理论依据,当对运动的平稳性与精确性一有要求时就会出现冲击现象与位置不准等诸多现象,凸轮曲线问题给产品的质量带来了极大的损害。在这种情况下笔者采用BROWNSHAP三坐标测量机、加工中心和EB2000电子图板软件,成功地对多种凸轮件进行了测绘基础上的二次设计及加工,在没有反读软件的情况下成功地解决了上述问题,并且使凸轮曲线及相关运动拥有了理论依据和检查依据。 以往的三坐标测量系统是离线检测装置,由于三坐标测量技术的发展是独立于一般CAD/CAM的发展的。因此,一般的三坐标测量系统有自己的信息处理系统,从实物模型信息转换方法也是相对独立的,有其自己的几何定义方式和数据结构,通常采用DMIS(Dimensional Measurement Interface Specification)文件形式。为了能使测量系统测量的信息在CAD系统中表现其几何模型,有必要对三坐标测量系统与CAD进行数据交换。 我厂所使用的三坐标测量机为QUINDOS操作系统。实现数据交换通常为,先由QUINDOS产生一个DMIS文件,借助文件转换把DMIS文件转换为DXF文件,从而在CAD系统中生成相应的数学模型。从三坐标测量系统到NC机床的流程图如下: 三坐标测量系统→QUINDOS→DMIS→DXF→CAD→CAM→NC DMIS文件是一种三坐标测量系统的几何模型接口文件其格式如下: DMIS/’DMIS INPUT PROGRAM’ 开始 V(V1)=VFORM/ALL V(V2)=VFORM/MON,ACT,DEV DISPLY/PRINT,(V1),TERM,(V2),SSTOR,(V2). 输出 FILNAM/,DMIS.DEO’ MODE/MAN … … 手动方式 MODE/PROG … … 自动方式 ENDFIL 读取DXF的数据结构: struct COORD{ doubleX doubleY doubleZ } struct Point{ strict CPPRD*POINT; struct POINT*left; struct POINT*right; } struct LINE{ struct COORD*start; struct COORD*end; struct LINE*left; struct LINE*right; } 上述方法集成度不高、存在信息转换缺陷且不容易掌握,笔者经过多次具体的操作实验找到了另一种方法。 首先用三坐标测量机QUINDOS中的OPAR2D程序对被测绘凸轮件进行测量,并将所得到的测量值转化为名义值,然后将其转为极坐标系后打印输出(此图用来帮助总结凸轮的运动规律),将所得到的名义值以要素数据保存。接着再转为直角坐标系,将所得到的名义值以要素数据保存。 由于笔者所用的三坐标测量机是UNIX系统,因此在计算机中装入了DOS与WINDOWS 操作系统,使其在UNIX/DOS/WINDOWS操作系统下都可管理与应用。然后用XTOD命令将所得到的数据文件转化为DOS系统下的数据文件格式。然后将所得到的数据文件转化为纯文本格式,在WINDOWS操作系统下启动CAXA-EB2000电子图版软件,用样条线的纯文本读入功能读入以上两个文件,这样就得到凸轮曲线与极坐标展程图。之后用等距线得到辊子的运动中心线,就其各个工作程及升程回程的运动要求利用EB200的公式曲线功能,分别用各种公式曲线,如等速、匀加、匀减和修正正弦余弦曲线等对上述曲线进行逼近,从而得出理论曲线。经过上述工作就将测量的凸轮上升到了具有理论运动规律的结果图纸。下一步就是具体加工与检查工作了。 将图纸曲线转化为数据,然后将数据文件转化为纯文本格式,启动WORD软件,编辑CNC加工程序 G0G91G28X0Y0Z0; GOG90G54X()Y()Z(); GO1G43Z()H01F(); G01G42X()Y()D01; …… date …… G01G40X()Y(); G0Z(); M05; M30; END; 将储存为*.DAT格式的文件输入加工中心后用加工中心加工。 将理论数据的纯文本。进入UNIX系统用DTOX生成UNIX可识别文件*.dat启动QUINDOS将*. dat确定为名意值。以这个名义值文件对加工后的凸轮件进行检查。这样对凸轮曲线就有了严格的理论设计与检验方法。保证了产品的质量。 具体QUINDOS程序如下: 标定探针,测量基准,建立坐标系。SATRT 2D OPERATION REFPRB_X(XOF=0, YOF=0, ZOF=-200,DIA=3,PRB=PRB,CAL=Y,TYP=PH9,PHA=0,PHB=0,DEL=Y,SNT=TP7,DFT=2) CPYPRB MEPLA (NAM=PLANE(2),CSY=CMMA$CSY,CYP=DEF$PLA3,DEL=N) MECYL (NAM=CYL_DAT,CSY=CMMA$CSY,CPY=DEF$CYL2,ITY=CY2,DEL=N) MEPLA (NAM=PLA_L2,CSY=CMMA$CSY,CPY=DEF$PLA3,DEL=N) MCSPLPL (NAM=PLA_L3,TYP=PLA,CSY=CMMA$CSY,CPY=DEF$PLA2,EL1=PLA_L,TY1=PLA,ST1=PLA,MD1=(NOM,NOC),EL2=PLA_L2,TY2=PLA,ST2=PLA,ST2=PLA,MD2=(NOM,NOC),CNN=SYM) BLDCSY (NAM=CSY_SCAN,TYP=CAR,REF=REFR$CSY,SPA=PLANE(2),SDR=+Z,PLA=PLA_L3,PDR=+X,XZE=CYL_DAT,YZE=CYL_DAT,ZZE=PLANE(2)) DFNCMM (NAM=SCAN,MSP=(400,400,400),MAC=0.001,PSP=3,PFC=0.3,POF=0.5,PLT=4,PAC=5,SDN=2) USECMM (NAM=SCAN0 ME2DE (NAM=CURVE_1,CSY=CSY_SCAN,MOD=(NOC,NOE),INO=I,DEL=N) CURV2D (SRC=CURVE_1,DST=CURVE_1,OPN=N,A_O=XY,CLW=N) GETVAL (NAM=NN,OBJ=CURVE_1,DSC=j,TYP=APT) !THE FOLLOWING LINE HAS BEEN MADE TO AA PROCEDURE (USING MIDDLE MOUSE BUTTON)!COLAPT (NAM=AAAAA,CSY=CSY_SCAN,DEL=N,PTS=CURVE_1,FRS=I,LST=I) REPEAT (NAM=I,BGN=0,END=820,DLT=10,PRC=MMMM) CURV2D (SRC=BBBB,DST=BBBB,OPN=N,A_O=XY,CLW=N) RCOR2D (SRC=CCCC,DST=CCCC_R,OPN=N,A_0=XY,CLW=N,RAD=1.5) RMVOPT (SRC=BBBB_SHF,DST=BBBB_SHF,CLW=N,ERR=DRR1) ACNO2D (ACT=BBBB_SHF,NOM=BBBB,RES=ACNO_BCMM,EDI=ACT,AOP=N,A_O=SY,ACW=N,NCW=NMOD=EVA) SETFLD CCCC_R_TRA,V,APT,O COLAPT (NAM=TTT,CSY=CSY_SCAN,DEL=YPTS=A_TRA_DIFF) EXCHNG (NAM=TTT,MOD=XCH) ME2DE (NAM=TTT,CSY=CSY_SCAN,INO=IDEL=N) EXCHNG (NAM=ALL,MOD=MOV) CURVE_P (ELE=ACNO_BCMM,OPN=N,A_OXY,FAC=1,TYP=1,FRM=N,SPF=N) BLDTRA (NAM=TRA1,SHX=0.5,SHY=0.6,ANG=0.6,AXI=+Z) TRAELE (NEW=BBBB_BFT,TRA=TRA1,OLD=BBBB) BFIT2D (ACT=BBBB_BFT,NOM=BBBB,RES=BFT_BB,TRA=TRA2,FIX=(N.N.N),OFF(0,0,0),ORI=Y,A_O=XY,AOP=N,NOP=N,ACW=N,MXI=10,EPS=0.0005,ERR=ERR,CAL=INT) SHFPTS (SRC=BBBB,DST=BBBB_SHF,DIS=37,STY=APT) RCORNOR DFNELE (NAM=DFN_PNT,TYP=PNT,CSY=CSY_SCAN) FGEX2D (NAM=BBBB,MIN=P_MINN,MAX=P_MAXN,OPN=N,A_O=SY,CLW=N,TYC=INT,MOD=EVA) INAXI2DE (E2D=BBBB,INT=DEF_AXI,IPT=(PNT1,PNT2),OPN=N,A_O=XY,CLW=N,TYC+INT,MOD=EVA) MCDPTPT (NAM=DISTANCE(1),TYP=DIS,CSY_SCAN,CPY=DEF$DIS3,EL1=PNT1,TY1=POI,ST1=POI,MD1=NOM,EL2=PNT2,TY2=POI,ST2=POI,MD2=NOM,CNN=DIS) DIPNTPNT (NAM=DIS1,CSY=CSY_SCAN,EL1=PNT2,EL2=PNT1,MOD=EVA) MCDCYCY (NAM=DISTANCE(2),TYP=DIS,CSY=CSY_SCAN,CPY=DEF$DIS3,EL1=CYLINDER(3),TY1=CYL,ST1AXI,EL2=CYLINDER(4),TY2=CYL,ST2=ZIX,CNN=DIS) DIAXIAXI CONECT SQRAXAX (OBJ=DIS1TYP=PLA,DAT=DIS1CPY=DEF$DIN9) !TRASFORM THE CAM CSY TO POLAR CSY(OBTAIN THE CAM STROKE) TRACRV2D (STC=CCCC_R,DST=CCCC_R_TRA,TYP=POL,OPN=N,DEG=Y) !TEST DIFF2D (SRC=CCCC_R_TRA,DST=CCCC_R_TRA_DIF) TEMP_=CCCC_R_TRA.ACT.PTS(1).PT.X PUTVAL (OBJ=A_TRA.ACT.PTS(1).PT,DSC=Y,VAL=TEMP_X) A_TRA.CAT.PTS(1).PT.X=TEMP_X !DIFINE A ELE TO CONTAIN THE TRASFORMED CURVE DFNELE (NAM=A_TRA,TYP=2DE,CSY=CSY_SCAN) !EXCHANGE X AND Y DO (NAM=I,BGN=1,END=205) TEMP_X=CCCC_R_TRA.ACT.PTS(I).PT.X TEMP_Y=CCCC_R_TRA.ACT.PTS(I).PT,Y PUTVAL (OBJ=A_TRA.ACT.PTS(I).PT,DSC=Y,VAL=TEMP_X) PUTVAL (OBJ=A_TRA.ACT.PTS(I).PT,DSC=X,VAL=TEMP_X) !DIFFRENTIATE THE CAM STROKE DIFF2D (SRC=A_TRA,DST=A_TRA_DIFF) !MAGNIFY THE VELOCITY DIFF2D (SRC=A_TRA,DST=A_TRA_DIFF) !MAGNIFY THE VELOCITY DO (NAM=I,BGN=1,END=205) TEMP X=A TRA DIFF.ACT.PTS(I).PT.Y TEMP_XX=TEMP_X*30 PUTVAL (OBJ=A_TRA_DIFF.ACT.PTS(I).PT,DSC=Y,VAL=TEMP_XX) ENDDO !DIFFRENTIATE THE CAM VELOCITY DIFF2D (SRC=A_TRA_DIFF,DST=A_TRA_DIFF_D) !MAGNIFY THE ACCELARATION DO (NAM=I,BGN=1,END=205) TEMP_X=A_TRA_DIFF_D.ACT.PTS(I).PT.Y TEMP_XX=TEMP_X*30 PUTVAL (OBJ=A_TRA_DIFF_D.ACT.PTS(I).PT,DSC=Y,VAL=TEMP_XX) ENDDO !PROGRAME TO VIEW THE RESULT CURVE COLAPT (NAM=TTT,CSY=CSY_SCAN,DEL=Y,PTS=A_TRA_DIFF_D) EXCHNG (NAM=TTT,CSY=CSY_SCAN,INO=I,DEL=N) LISPRC (NAM=CAM,DEV=LP) LISTING
--------------------------------------------------------------------------------
|