前言
一个程序适用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比武大赛论文集》