参考文献

注册

 

发新话题 回复该主题

应用技巧RationalDMIS高级编程 [复制链接]

1#

前言

一个程序适用N种产品,该如何进行编程?

在测量应用中,对于相似产品,如:环规,想要提高测量效率,并且减少产品程序的数量,测量员可以对产品的相同点进行一定分析,发现其中部分数据可实现参数化,通过RationalDMIS软件的高级语言功能实现产品的快速测量,并适用于多种规格的产品。

1、产品分析

对于有着众多规格的环规而言,如果每一个规格的大小都进行编程,是一个非常繁琐且不便的工程,对于测量员使用对应程序也是极其不便的,影响测量效率。我们对环规这类产品进行分析,特点如下图:

环规的类型内外为TYPE,总高度定义为H,顶部向下偏移量定义为UP,底部向上偏移量定义为DP,环规直径定义为DM,测量截面数量m,每个截面测量点数为n。

2、程序的设计

2.1程序运行后,通过人为输入,可以实现不同规格产品的自动测量

2.2流程图

2.3RationalDMIS程序编写

(1)通过DMIS提示,设置一个运行时输入参数的提示窗口

代码如下:

(2)对参数进行判断,如判断环规类型、输入内容为字母

、0等情况

(3)手动建立坐标系

(4)设置安全平面宏

(请将安全平面宏程序按以下内容修改)

(5)自动精建坐标系

(6)评价与分析

通过前面输入的层数与点数参数,进行圆柱测量,并

进行评价

(7)生产检测报告

(8)总结

通过RationalDMIS软件,只需简单3步,即可完成:

1、条件判断,输入管控参数,判断规格类型;

2、利用赋值,将管控参数赋给变量;

3、通过变量,规划测量轨迹,实现了不同规格的产品的检测;

最终实现一个程序,完成N个不同规格产品的自定、高效测量。

(9)完整代码如下

向上滑动阅览

$$/*Header

DMISMN/Createdby[思瑞测量技术(深圳)有限公司(非销售版)--]on星期四,五月26,,4.0

UNITS/MM,ANGDEC,MMPS

WKPLAN/XYPLAN

PRCOMP/ON

TECOMP/OFF

FLY/1.

MODE/PROG,MAN

SNSET/APPRCH,1.

SNSET/RETRCT,1.

SNSET/DEPTH,0.

SNSET/SEARCH,10.

SNSET/CLRSRF,10.

RECALL/D(MCS)

SNSLCT/S(ROOTSN2)

GEOALG/BF,LSTSQR

GEOALG/ANGLB,DEFALT

GEOALG/CIRCLE,MAXINS

GEOALG/ARC,LSTSQR

GEOALG/PLANE,LSTSQR

$$

$$

$$*/

MODE/MAN

DECL/COMMON,INTGR,RINGconfig,TYPE,RINGH,RINGDM,RINGUP,RINGDP,RINGPOINTS,RINGCOUNTS

RINGconfig=PROMPT/TEXT,请选择环规类型:,LIST,TYPE,内,外,TEXT,高度H:,EDIT,RINGH,TEXT,直径DM:,EDIT,RINGDM,TEXT,上偏移量UP:,EDIT,RINGUP,TEXT,下偏移量DP:,EDIT,RINGDP,TEXT,每层测点数N:,EDIT,RINGPOINTS,TEXT,层数M:,EDIT,RINGCOUNTS

if/(TYPE.EQ.1)

KNPTN1=ASSIGN/1

ELSE

KNPTN1=ASSIGN/-1

ENDIF

$$检查参数

IF/(RINGH.EQ.0)

RINGH=PROMPT/请输入正确的环规高度H,,1

ENDIF

IF/(RINGDM.EQ.0)

RINGDM=PROMPT/请输入正确的环规直径DM,,1

ENDIF

IF/(RINGUP.EQ.0)

RINGUP=PROMPT/请输入正确的偏移量UP,RINGH,1

ENDIF

IF/(RINGDP.EQ.0)

RINGDP=PROMPT/请输入正确的偏移量DP,RINGH,1

ENDIF

IF/(RINGPOINTS.EQ.0)

RINGPOINTS=PROMPT/请输入正确的每层测点数N,,3

ENDIF

IF/(RINGCOUNTS.EQ.0)

RINGCOUNTS=PROMPT/请输入正确的测量层数M,,2

ENDIF

F(PLN1)=FEAT/PLANE,POL,0,0,0.,0.,0.,1.

FA(PLN1)=FEAT/PLANE,POL,0,0,0.,0.,0.,1.

$$Measurementpointsarecreatedthroughnominalpoints

MEAS/PLANE,F(PLN1),3

PTMEAS/POL,16.,89.,0.,0.,0.,1.

PTMEAS/POL,16.,.,0.,0.,0.,1.

PTMEAS/POL,16.,.,0.,0.,0.,1.

ENDMES

D(CRD1)=DATSET/FA(PLN1),ZDIR

D(CRD1)=TRANS/ZORIG,FA(PLN1)

F(CIR1)=FEAT/CIRCLE,INNER,CART,0.,0.,-2,0.,0.,1.,RINGDM

FA(CIR1)=FEAT/CIRCLE,INNER,CART,0.,0.,-2,0.,0.,1.,RINGDM

$$Measurementpointsarecreatedthroughnominalpoints

MEAS/CIRCLE,F(CIR2),4

PTMEAS/CART,0,KNPTN1*RINGDM/2,-2,0,-1*KNPTN1,0

PTMEAS/CART,KNPTN1*RINGDM/2,0,-2,-1*KNPTN1,0,0

PTMEAS/CART,0,-1*KNPTN1*RINGDM/2,-2,0,1*KNPTN1,0

PTMEAS/CART,-1*KNPTN1*RINGDM/2,0,-2,1*KNPTN1,0,0

ENDMES

D(CRD2)=DATSET/FA(PLN1),ZDIR,FA(CIR1),XORIG

D(CRD2)=TRANS/ZORIG,FA(PLN1),YORIG,FA(CIR1),XORIG,-0

MODE/PROG,MAN

$$MACRO:EASI_CLEARPLN_GOTO

$$FUNCTION:CLEARANCESURFACEIMPLEMENTATION

$$MovemachineCLEARSURFACEDISTabovethecurrentclearsurface

$$planeandthenmovemachineparalleltotheclearsurfaceplane

$$ALLMacroparametersareinPCSandCurrentUNITS

$$Lastupdate:3-1-04Addmodechecking.onlyworksinPROGMODE

$$Lastupdate-24-04Clearpositionisbasedonthesurfaceof

$$

$$ThissampleDMISMacroisprovidedbyExternal-ArraySoftware,Inc.

$$Itshouldbemodifiedforyourownuse.Thereisnoguaranteefor

$$thequalityofthisMacro.November,

$$调用参数ISOM为安全平面参考元素类型理论0(OR实际1)

$$调用参数目标位置测点TRAX、TRAY、TRAZ,TRAI,TRAJ,TRAK坐标及矢量

M(EASI_CLEARPLN_GOTO)=MACRO/ISNOM,TARX,TARY,TARZ,TARI,TARJ,TARK

DECL/LOCAL,REAL,CCX,CCY,CCZ,CCI,CCJ,CCK

DECL/LOCAL,REAL,CURX,CURY,CURZ,TD,CLRDIST,SDIAM,BJDIST

DECL/LOCAL,CHAR,,CLRLABEL,FLABEL,MMODE,SNAME

$$获取当前运行模式及安全平面参考元素名Label

MMODE=VALUE/MODE

CLRLABEL=VALUE/SNSET,CLRSRF

$$判断Label是否存在(关闭情况为空,非关闭则会获取到字符串,字符串长度大于0)同时判断条件当前模式是否为自动,否则跳过

IF/((LEN(CLRLABEL).GT.0).AND.(MMODE.EQ.PROG,MAN))

$$获取安全距离

CLRDIST=VALUE/SNSET,CLRSRF,DIST

BJDIST=VALUE/SNSET,APPRCH

TARX=ASSIGN/TARX+BJDIST*TARI

TARY=ASSIGN/TARY+BJDIST*TARJ

TARZ=ASSIGN/TARZ+BJDIST*TARK

$$给FLABEL赋值,默认FA

FLABEL=ASSIGN/FA

$$根据ISOM情况来更改FA或F

IF/ISNOM.EQ.0

FLABEL=ASSIGN/F

ENDIF

$$赋值CCX,CCY,CCZ,CCI,CCJ,CCK为安全平面参考元素中心坐标的XYZIJK

CCX=OBTAIN/FLABEL(

CLRLABEL),3

CCY=OBTAIN/FLABEL(

CLRLABEL),4

CCZ=OBTAIN/FLABEL(

CLRLABEL),5

CCI=OBTAIN/FLABEL(

CLRLABEL),6

CCJ=OBTAIN/FLABEL(

CLRLABEL),7

CCK=OBTAIN/FLABEL(

CLRLABEL),8

$$获取探头名称

SNAME=VALUE/SNSLCT

$$获取探头直径

SDIAM=OBTAIN/SS(SNAME),8

$$延安全平面矢量增加一个探头半径

CCX=ASSIGN/CCX+CCI*SDIAM/2

CCY=ASSIGN/CCY+CCJ*SDIAM/2

CCZ=ASSIGN/CCZ+CCK*SDIAM/2

$$获取当前探针X,Y,Z坐标

CURX=VALUE/GOTOM,XAXIS

CURY=VALUE/GOTOM,YAXIS

CURZ=VALUE/GOTOM,ZAXIS

$$计算当前坐标到安全平面的垂直距离

TD=ASSIGN/(CURX-CCX)*CCI+(CURY-CCY)*CCJ+(CURZ-CCZ)*CCK

$$清除原有判断,任意位置先垂直移动到安全高度

$$IF/TD.LT.CLRDIST

TD=ASSIGN/(CLRDIST-TD)

GOTO/CURX+CCI*TD,CURY+CCJ*TD,CURZ+CCK*TD

$$ENDIF

$$计算目标坐标到安全平面的垂直距离

TD=ASSIGN/(TARX-CCX)*CCI+(TARY-CCY)*CCJ+(TARZ-CCZ)*CCK

IF/TD.LT.CLRDIST

TD=ASSIGN/(CLRDIST-TD)

GOTO/TARX+CCI*TD,TARY+CCJ*TD,TARZ+CCK*TD

$$建议增加大于的情况

ENDIF

ENDIF

ENDMAC

SNSET/APPRCH,1.

SNSET/RETRCT,1.

SNSET/DEPTH,0.

SNSET/SEARCH,10.

SNSET/CLRSRF,FA(PLN1),10.

F(PLN2)=FEAT/PLANE,POL,0,0,0.,0.,0.,1.

$$Measurementpointsarecreatedthroughnominalpoints

CALL/M(EASI_CLEARPLN_GOTO),1,0,KNPTN1*RINGDM/2,0,0,0,1

MEAS/PLANE,F(PLN2),3

PTMEAS/POL,KNPTN1*1+RINGDM/2,90,0.,0.,0.,1.

PTMEAS/POL,KNPTN1*1+RINGDM/2,,0.,0.,0.,1.

PTMEAS/POL,KNPTN1*1+RINGDM/2,,0.,0.,0.,1.

ENDMES

D(CRD3)=DATSET/FA(PLN2),ZDIR

D(CRD3)=TRANS/ZORIG,FA(PLN2)

F(CIR2)=FEAT/CIRCLE,INNER,CART,0.,0.0,-2,0.,0.,1.,RINGDM

$$Measurementpointsarecreatedthroughnominalpoints

CALL/M(EASI_CLEARPLN_GOTO),1,0,RINGDM/2,-2,0,-1*KNPTN1,0

MEAS/CIRCLE,F(CIR2),4

PTMEAS/CART,0,RINGDM/2,-2,0,-1*KNPTN1,0

IF/(TYPE.EQ.2)

CALL/M(EASI_CLEARPLN_GOTO),1,RINGDM/2,0,-2,-1*KNPTN1,0,0

ENDIF

PTMEAS/CART,RINGDM/2,0,-2,-1*KNPTN1,0,0

IF/(TYPE.EQ.2)

CALL/M(EASI_CLEARPLN_GOTO),1,0,-1*RINGDM/2,-2,0,1*KNPTN1,0

ENDIF

PTMEAS/CART,0,-1*RINGDM/2,-2,0,1*KNPTN1,0

IF/(TYPE.EQ.2)

CALL/M(EASI_CLEARPLN_GOTO),1,-1*RINGDM/2,0,-2,1*KNPTN1,0,0

ENDIF

PTMEAS/CART,-1*RINGDM/2,0,-2,1*KNPTN1,0,0

ENDMES

D(CRD4)=DATSET/FA(PLN2),ZDIR,FA(CIR2),XORIG

D(CRD4)=TRANS/ZORIG,FA(PLN2),YORIG,FA(CIR2),XORIG,-0

$$Set.Term.Delete

IF/(TYPE.EQ.1)

KNPTC1=ASSIGN/内

ELSE

KNPTC1=ASSIGN/外

ENDIF

TEXT/OUTFIL,CONCAT(环规类型:,KNPTC1)

TEXT/OUTFIL,CONCAT(环规直径:,STR(RINGDM))

TEXT/OUTFIL,CONCAT(环规高度:,STR(RINGH))

TEXT/OUTFIL,CONCAT(测量上偏移量:,STR(RINGUP))

TEXT/OUTFIL,CONCAT(测量下偏移量:,STR(RINGDP))

TEXT/OUTFIL,CONCAT(测量层数,STR(RINGCOUNTS))

TEXT/OUTFIL,CONCAT(每层测量点数:,STR(RINGPOINTS))

DECL/COMMON,INTGR,ALLPOINTS

ALLPOINTS=ASSIGN/RINGCOUNTS*RINGPOINTS

DECL/REAL,PRR,PA,PH,PX,PY,PI,PJ,PDA,PDB

IF/(TYPE.EQ.1)

F(CYL1)=FEAT/CYLNDR,INNER,CART,0,0,-1*RINGH/2,0,0,1,RINGDM,RINGH

CALL/M(EASI_CLEARPLN_GOTO),1,RINGDM/2,0,0,-1,0,0

MEAS/CYLNDR,F(CYL1),ALLPOINTS

DO/PDA,1,RINGCOUNTS,1

DO/PDB,1,RINGPOINTS,1

PRR=ASSIGN/RINGDM/2

PA=ASSIGN/(/RINGPOINTS)*(PDB-1)

PH=ASSIGN/-1*RINGUP-(RINGH-RINGUP-RINGDP)/RINGCOUNTS*(PDA-1)

PI=ASSIGN/COS(DTOR(PA))*KNPTN1*-1

PJ=ASSIGN/SIN(DTOR(PA))*KNPTN1*-1

PX=ASSIGN/RINGDM/2*PI

PY=ASSIGN/RINGDM/2*PJ

PTMEAS/POL,PRR,PA,PH,PI,PJ,0

ENDDO

ENDDO

ENDMES

ELSE

F(CYL1)=FEAT/CYLNDR,OUTER,CART,0,0,-1*RINGH/2,0,0,1,RINGDM,RINGH

MEAS/CYLNDR,F(CYL1),ALLPOINTS

DO/PDA,1,RINGCOUNTS,1

DO/PDB,1,RINGPOINTS,1

PRR=ASSIGN/RINGDM/2

PA=ASSIGN/(/RINGPOINTS)*(PDB-1)

PH=ASSIGN/-1*RINGUP-(RINGH-RINGUP-RINGDP)/RINGCOUNTS*(PDA-1)

PI=ASSIGN/COS(DTOR(PA))*KNPTN1*-1

PJ=ASSIGN/SIN(DTOR(PA))*KNPTN1*-1

PX=ASSIGN/RINGDM/2*PI

PY=ASSIGN/RINGDM/2*PJ

CALL/M(EASI_CLEARPLN_GOTO),1,PX,PY,PH,PI,PJ,0

PTMEAS/POL,PRR,PA,PH,PI,PJ,0

ENDDO

ENDDO

ENDMES

ENDIF

T(TDM1)=TOL/DIAM,-0.50,0.50

OUTPUT/FA(CYL1),TA(TDM2)

T(TCLD1)=TOL/CYLCTY,0.20

OUTPUT/FA(CYL1),TA(TCLD1)

参考文献:《PC-DMIS比武大赛论文集》

分享 转发
TOP
发新话题 回复该主题