用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

前言

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

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

1、产品分析

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

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

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

2、程序的设计

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

2.2 流程图

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

2.3 RationalDMIS 程序编写

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

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

代码如下:

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

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

、0 等情况

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

(3)手动建立坐标系

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

(4)设置安全平面宏

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

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

(5)自动精建坐标系

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

(6)评价与分析

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

进行评价

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

(7)生产检测报告

用高级程序设计语言编写的程序称为,用高级程序设计语言编写的程序称为源程序,它?

(8)总结

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

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

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

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

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

(9)完整代码如下

向上滑动阅览

$$/* Header

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

UNITS/MM, ANGDEC, MMPS

WKPLAN/XYPLAN

PRCOMP/ON

TECOMP/OFF

FLY/1.000000

MODE/PROG, MAN

SNSET/APPRCH, 1.000000

SNSET/RETRCT, 1.000000

SNSET/DEPTH, 0.000000

SNSET/SEARCH, 10.000000

SNSET/CLRSRF, 10.000000

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', 100, 1

ENDIF

IF/(RINGDM.EQ.0)

RINGDM = PROMPT/'请输入正确的环规直径 DM', 9999, 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', 9999, 3

ENDIF

IF/(RINGCOUNTS.EQ.0)

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

ENDIF

F(PLN1)=FEAT/PLANE,POL,0,0,0.000000,0.000000,0.000000,1.000000

FA(PLN1)=FEAT/PLANE,POL,0,0,0.000000,0.000000,0.000000,1.000000

$$Measurement points are created through nominal points

MEAS/PLANE, F(PLN1), 3

PTMEAS/POL, 16.022606, 89.412167, 0.000000, 0.000000, 0.000000, 1.000000

PTMEAS/POL, 16.618454, 203.430682, 0.000000, 0.000000, 0.000000, 1.000000

PTMEAS/POL, 16.155284, 335.311794, 0.000000, 0.000000, 0.000000, 1.000000

ENDMES

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

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

F(CIR1)=FEAT/CIRCLE,INNER,CART,0.000000,0.000001,-2,0.000000,0.000000,1.000000, RINGDM

FA(CIR1)=FEAT/CIRCLE,INNER,CART,0.000000,0.000001,-2,0.000000,0.000000,1.000000, RINGDM

$$ Measurement points are created through nominal points

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: CLEARANCE SURFACE IMPLEMENTATION

$$ Move machine CLEAR SURFACE DIST above the current clear surface

$$plane and then move machine parallel to the clear surface plane

$$ ALL Macro parameters are in PCS and Current UNITS

$$ Last update: 3-1-04 Add mode checking. only works in PROG MODE

$$ Last update: 8-24-04 Clear position is based on the surface of

$$

$$ This sample DMIS Macro is provided by External-Array Software, Inc.

$$ It should be modified for your own use. There is no guarantee for

$$ the quality of this Macro. November, 2003

$$ 调用参数 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, 255, 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.0000

SNSET/RETRCT, 1.0000

SNSET/DEPTH, 0.0000

SNSET/SEARCH, 10.0000

SNSET/CLRSRF, FA(PLN1), 10.0000

F(PLN2)=FEAT/PLANE,POL,0,0,0.000000,0.000000,0.000000,1.000000

$$ Measurement points are created through nominal points

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.000000, 0.000000, 0.000000, 1.000000

PTMEAS/POL, KNPTN1*1+RINGDM/2, 210, 0.000000, 0.000000, 0.000000, 1.000000

PTMEAS/POL, KNPTN1*1+RINGDM/2, 330, 0.000000, 0.000000, 0.000000, 1.000000

ENDMES

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

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

F(CIR2)=FEAT/CIRCLE,INNER,CART,0.000000,0.00000,-2,0.000000,0.000000,1.000000, RINGDM

$$ Measurement points are created through nominal points

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/(360/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/(360/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.500000,0.500000

OUTPUT/FA(CYL1),TA(TDM2)

T(TCLD1)=TOL/CYLCTY,0.200000

OUTPUT/FA(CYL1),TA(TCLD1)

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

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.vsaren.com/141969.html