DMIS简介(历史、发展、通讯相关、原理、作用、意义)

DMIS全称为Dimensional Measuring Interface Standard(尺寸测量接口标准),DMIS标准的最初开发是由计算机辅助制造国际公司(CAM-I)资助的。在1985年2月开始作为三坐标尺寸测量的接口规范项目, 这个规范是自动化系统间检测数据的通讯标准,是由用户和三坐标测量设备厂商共同努力的结果。

DMIS 的目标是开发一套计算机系统和测量设备之间检测数据双向通信的标准。它提供
一种数据格式,形成各类分系统之间进行数据交换的中性文件。它的内容也具有检测规划和
分析检测结果的作用。它由一套术语词汇表建立起一个用于检测规划和检测结果数据表达的中性格式。DMIS 是为了测试设备的信息交换、自动化操作和系统集成而设计的,但也照顾
到了测量知识的表达,因而它设计成可以人工读出和编写,在不使用计算机的情况下也可以
编写检测程序和分析检测结果。

DMIS 提供一套词汇表用来将检测规划提供给尺寸测量设备以及将测量设备的检测结果传递给接收设备。一台通过DMIS 与其它设备相连的设备必须有一个前置处理器,它将自己内部的数据格式转化为DMIS 格式,同时还需要一个后置处理器,将DMIS 格式转换为自己的数据结构。

DMIS 标准的诞生,改变了传统机械设计和检测之间信息交流的方式,为CMM供应商和

用户带来了极大的便利。首先,通过在CAD系统和CMM之间提供双向通讯的标准,DMIS更加
方便了系统的自动化和集成;其次,CMM和CAD公司只需编写惟一的解释程序;第三,用户不
必再局限于单一的CAD系统和CMM来源。另外,由于不必再为CMM的专用语言培训和学习,
所以既节约了时间,又减少了开支。而且DMIS 标准便于数据和路径规划,能够开发远程零件检测规划和平衡机器之间的负载。

使用DMIS格式作为数据交换标准的环境描述见(图1-DMIS 环境),正如图所示,一个测量程序可以由多种不同的方法生成。测量程序可以由CAD系统、非图形系统、自动化系统,或者手工构建生成。一个编程系统可能需要一个将程序转换成DMIS格式的预处理器,这样DMIS测量程序就能在不同的三坐标测量设备(DME)上运行。在(图1—DMIS环境)中,DME I具有一个DMIS预处理器和后处理器,这些处理器把DMIS数据转化成机器自己独有的数据格式。DME IV用DMIS作为它的内在格式,所以就不需要预处理器和后处理器。同样,一个主机被用于控制DME II 和DME III。这个主机有一个后处理器,此后处理器将DMIS程序解码,并同时驱动两台DME,即使用了DMIS格式又使用了用户自定义的数据交换格式。
结果数据可能通过不同的方式被返回并转变成DMIS格式。例如,这个数据可以被直接转换成DMIS格式或通过后处理器转换。结果数据会传递到分析系统或者存贮系统,比如质量信息系统(QIS)。
手工输入接口表明DMIS程序在没有计算机辅助的情况下手动编辑,并进行结果分析。另外,许多其他的DMIS数据交换格式也可以被应用。
DMIS 的应用依赖于用户自己。DMIS只是简单地定义了利用ASCII文件从一个支持DMIS的系统传输到其他系统的数据交换格式。传输、存贮、管理这些文件的方法由用户自己决定。
这个版本的DMIS组合了可以驱动三坐标测量机、影象测量设备、测量离散机械部件和电子元件的加工混合校验系统的指令。DMIS的主要目的是为所有测量设备提供一个通讯标准。将来应用软件可能扩展到支持以下功能:
1) 实现识别工件和测量工件自动化。
2) 在闭环制造单元加工工件的过程中提供实时的校验和调整。

一致性:
DMIS的主要用途是使组织内部不同的三坐标测量设备以及计算机应用软件之间相互交换数据和存储测量数据,当然也包括和其它组织之间的数据交换。DMIS 已被广泛地应用且拓宽了测量系统和应用的范围。然而,在一个 DMIS设备创建的 DMIS 文件并不能完全的或者准确的被另一个 DMIS 设备识别,除非 DMIS 应用软件完全执行 DMIS规范并完全执行标准的、公认的DMIS应用程序协议,这样才能成功的实现DMIS数据交互。DMIS是一个大而复杂的标准。供应商无需实现所有的标准,只需实现功能子集,这些子集被认为是规范协议。
DMIS 协议的主要好处是:能确保符合DMIS标准要求的数据间的互用性,以及证明应用软件执行DMIS标准的能力。一旦应用软件通过了测试鉴定,在协议的约束下我们可以预见应用程序执行的结果。

DMIS一致性测试:
DMIS一致性测试的服务将专门由DNSC提供。DMIS一致性测试目的是确定:采用DMIS标准的产品是否能够准确地执行DMIS规则及其关联的应用程序协议。
严格来说,DMIS规则只是一个规定数据交换格式的文本。然而,“DMIS”通常却包含:一个程序编辑器(产生DMIS的程序),一个解释器(识别DMIS的程序),以及元文件(实际的DMIS输入和输出文件)。总的来说,一个程序编辑器、元文件和一个解释器组成了一个整地DMIS系统。
在详细的DMIS协议的一致性条款中有关于DMIS一致性的说明。因此,DMIS规则以及相关联的应用程序协议对于测试整个DMIS系统的一致性是很重要的。
做DMIS一致性测试必须包含以下一项或多项:

A) 检验元文件在语法上是否准确
B) 校验程序编辑器符合元文件,准确地、恰当地描述预期的结果
C) 校验解释器能恰当地、完全地识别元文件,并输出预期的结果。
D) 校验DMIS描述文件在语句描述上是准确的,这个精确地描述应用软件的能力。

如果应用程序的所有语句都按照此标准定义,那么这个应用程序符合DMIS标准。
如果应用软件能根据这个标准定义所有语句,并能解析所有的符合的 DMIS协议,那么这个应用软件符合DMIS标准。

基础编程:

环境定义(速度、加速度、接近回退、安全距离)

在测量之前,需要对测量的环境有一个定义,我们以软件产生程序时自动产生的环境定义做一个解释:
DMISMN/‘Created by [爱科腾瑞(CNC).10.5] on 星期五, 二月 05, 2010’, 4.0
UNITS/MM, ANGDEC
WKPLAN/XYPLAN
PRCOMP/ON
TECOMP/OFF
FLY/OFF
MODE/PROG, MAN
SNSET/APPRCH, 1.000000
SNSET/RETRCT, 1.000000
SNSET/DEPTH, 2.000000
SNSET/SEARCH, 10.000000
SNSET/CLRSRF, 10.000000
FEDRAT/POSVEL, MMPS, 100.000000
FEDRAT/MESVEL, MMPS, 10.000000
FEDRAT/SCNVEL, MMPS, 10.000000
ACLRAT/POSACL, MMPSS, 500.000000
ACLRAT/MESACL, MMPSS, 100.000000
RECALL/D(MCS)
SNSLCT/S(ROOTSN3_A90_NB90)
GEOALG/CIRCLE, LSTSQR
GEOALG/ARC, LSTSQR
GEOALG/PLANE, LSTSQR

DMISMN/‘Created by [爱科腾瑞(CNC).10.5] on 星期五, 二月 05, 2010’, 4.0
程序标志,DMISMN/ 跟一个字串,来对此程序进行说明。

UNITS/MM, ANGDEC
程序中使用计算的单位,上面表示为毫米和角度。
同样可以支持的单位有CM(厘米)、METER(米)、INCH(英寸)、FEET(英尺)。
ANGDMS(度分秒,例如04:03:47.00)、ANGRAD(弧度)
如果需要采用的单位为厘米、弧度,那么定义语句即需要为:
UNITS/CM,ANGRAD

WKPLAN/XYPLAN
如果坐标系为直角坐标系,坐标系平面为XY平面。(三坐标软件所采用的坐标系均为圆柱
极坐标系)


PRCOMP/ON
打开测头补偿。

TECOMP/OFF
打开温度补偿。

FLY/OFF
关闭FLY模式,打开FLY模式的语句为FLY/1.0
打开FLY模式后,机器所走的路径将类似于圆弧的路径,如下图:


MODE/PROG, MAN
定义模式为程序模式。
模式为自动模式时 MODE/AUTO,PROG,MAN
自动模式,在程序运行到测量语句时,会根据点的数量,重新均分测量点。
模式为程序模式时 MODE/PROG,MAN
程序模式,在程序运行到测量语句时,根据程序里指定的测量点的坐标和方向去进行测量。
模式为手动模式时 MODE/MAN
手动模式,在程序运行到测量语句时,会等待用户用手动去进行测量。

SNSET/APPRCH, 1.000000
设置接近距离,是测针到达测量点之前,从定位速度到测量速度,开始准备测量的一个距离。

SNSET/RETRCT, 1.000000
设置回退距离,是测针在工件上触发之后,回退的一段距离。

SNSET/DEPTH, 2.000000
设置测量深度,对于线性元素,如圆,是测针沿着圆轴线方向,深入的一段距离。

SNSET/SEARCH, 10.000000
设置搜索距离,为测针到达指定的测量点位置后,没有发生触发,而继续沿着测量方向前进的距离。

SNSET/CLRSRF, 10.000000
安全平面距离,该语句可以为SNSET/CLRSRF, FA(PLN1),10.000000
例如PLN1为一个平面,那么测量任何元素前,测针都会首先抬高离平面PLN1 10毫米的位置再进行移动或者测量。

FEDRAT/POSVEL, MMPS, 100.000000
设置机器的定位速度,单位毫米/秒。

FEDRAT/MESVEL, MMPS, 10.000000
设置机器的测量速度,单位毫米/秒。

FEDRAT/SCNVEL, MMPS, 10.000000
设置机器的扫描速度,单位毫米/秒。

ACLRAT/POSACL, MMPSS, 500.000000
设置机器的定位加速度,单位毫米/秒的平方

ACLRAT/MESACL, MMPSS, 100.000000
设置机器的扫描加速度,单位毫米/秒的平方。

RECALL/D(MCS)
调用机器坐标系MCS。

SNSLCT/S(ROOTSN3_A90_NB90)
调用名为ROOTSN3_A90_NB90的测头。

GEOALG/CIRCLE, LSTSQR
GEOALG/ARC, LSTSQR
GEOALG/PLANE, LSTSQR
定义圆、圆弧、平面的拟合算法为最小二乘法,其中圆的算法可以根据程序进行选择,有4种算法可供选择:


最小外接圆:(最小覆盖圆)将所有的测量点都包含在圆内,直径最小的那个圆。

最大内接圆:(最大空圆)所有测量点都在圆外,直径最大的那个圆。

最小区域圆:(最小半径)从这个圆的圆心出发,画两个同心圆,将所有测量点都包含在这
两个同心圆内,在所有符合上面条件的同心圆中,径向距离最小的那一组。

最小二乘圆:(最小平方差)所有测量点到该圆的距离平方和最小。

实际中应用最多的是最小平方差,给出的为参数的平均值,计算方便,同时个别点的偏差对测量结果影响不大。

在配合中,为了顺利进入装配,轴的尺寸应采用最小覆盖圆,而最小半径,主要用于形状
差的评定。

元素定义、坐标系建立

所有元素在测量前,都必须先有理论值,这个理论值或从图纸上获得,或直接从CAD模型中拾取。
作为测量程序,所有的元素在使用前,都必须先有理论值。

在进行各项元素的检测前,都必须先有理论定义:

1、定义点的DMIS格式为:
F(LABEL) = FEAT/POINT, VAR_1, I,J,K
VAR_1为Cart,x,y,z
POL,r,a,h

那么如果我需要定义一个坐标值为10,20,30,方向为Z轴正方向的点定义语句即为:
F(PT1) = FEAT/POINT, CART,10, 20, 30, 0, 0, 1
运行上面的这行语句后,即会出现一个坐标值为10,20,30,方向为0,0,1的点。

2、定义直线元素:
F(LABEL) = FEAT/ LINE,var_1,ni,nj,nk
VAR_1为 UNBND,var_2
或者 BND,var_3
VAR_2为 CART,x,y,z,i,j,k
或者 POL,r,a,h,i,j,k
VAR_3为 CART,e1x,e1y,e1z,e2x,e2y,e2z
或者 POL,e1r,e1a,e1h,e2r,e2a,e2h

      上面的部分参数意义:UNBND:                 为一条未限制边界的直线(无限长)BND:                 为一条限制范围的直线(定长)

e1x,e1y,e1z:
e2x,e2y,e2z: 为限制直线的两个端点的直角坐标值
e1r,e1a,e1h:
e2r,e2a,e2h: 为限制直线的两个端点的极坐标值
i,j,k: 为沿直线方向第一点到第二点的向量
ni,nj,nk: 为直线所在平面的向量,可以用来做探头补偿

如语句:
F(LINE1) = FEAT/LINE, BND, CART, -10, -10, -10, 10, 10, 10, -1, 1, 0
所定义的直线LINE1的两个端点坐标为 (-10,-10,-10)  (10,10,10)  所在平面的方
向为-1,1,0

3、定义球元素
F(LABEL) = FEAT/SPHERE,var_1,var_2,diam var_3
Var_1为 INNER
或者 OUTER
Var_2为 CART,x,y,z
或者 POL,r,a,h
Var_3为 i,j,k var_8
或者 不存在
Var_8为 angle
或者 不存在

上面部分参数意义:
INNER: 为一个内球
OUTER: 为一个外球
i,j,k: 为球的法向量(如下面图示)
angle: 为指示球的可测范围(如下面图示)的角度

4.定义平面元素
F(label)=FEAT/PLANE,var_1,i,j,k
Var_1为 Cart,x,y,z
或者 Pol,r,a,h
上面部分参数的意义:
x,y,z 为平面上某一点的坐标

5.定义曲线元素
F(label)=FEAT/GCURVE,var_1
Var_1为 CART,x,y,z,i,j,k
或者 POL,r,a,h,i,j,k
CART,x,y,z,i,j,k,PTDATA,xd,yd,zd,id,jd,kd var_7
POL,r,a,h,i,j,k,PTDATA,rd,ad,hd,id,jd,kd var_8
Var_7为 xd,yd,zd,id,jd,kd var_7
或者 xd,yd,zd,id,jd,kd
Var_8为 rd,ad,hd,id,jd,kd var_8
或者 rd,ad,hd,id,jd,kd
上面部分参数的意义
x,y,z 为曲线所在平面上任意一点的坐标
i,j,k 曲线所在平面的向量.
PTDATA 表示为曲线上每个点的数据(由测量曲线时的实测点来确定)
xd,yd,zd,id,jd,kd 曲线上每一个测量点的坐标和法向.

6.定义理论圆柱
F(label)=FEAT/CYLNDR,var_1,var_2,i,j,k,diam var_3
Var_1为 INNER
OUTER
Var_2为 CART,x,y,z
或者 POL,r,a,h
Var_3为 len
或者 不存在
上面部分参数的意义啊
x,y,z 圆柱为没有边界时,为轴上任意一点的坐标.
圆柱有边界时,为圆柱轴线中点的坐标
i,j,k 为圆柱轴线方向

7.定义理论椭圆
F(label)=FEAT/ELLIPS,var_1,var_2,var_3,i,j,k,diam
Var_1为 INNER
或者 OUTER
Var_2为 CART,f1x,f1y,f1z,f2x,f2y,f2z
或者 POL,f1r,f1a,f1h,f2r,f2a,f2h
Var_3为 MAJOR
或者 MINOR
部分参数的意义
f1x,f1y,f1z 为椭圆的两个焦点的直角坐标
f2x,f2y,f2z
f1r,f1a,f1h 为椭圆的两个焦点的极坐标
f2r,f2a,f2h
MAJOR 表示下面定义的为椭圆的大直径
MINOR 表示下面定义的为椭圆的小直径
椭圆在DMIS标准里是两点定义,为椭圆上任意一点,到两个焦点的距离之和为定值,这样来进行椭圆二次曲线的几何定义.
在RationalDMIS中,元素定义窗口是用椭圆的圆心点坐标,长短轴长度,长轴方向来唯一确定一个椭圆.

8.定义理论圆锥
F(label)=FEAT/CONE,var_1,var_2,i,j,k,ang
Var_1为 INNER
或者 OUTER
Var_2为 CART,x,y,z
或者 POL,r,a,h
部分参数的意义
CART,x,y,z 为圆锥顶点直角坐标
POL,r,a,h 为圆锥顶点极坐标
i,j,k 为圆锥轴线方向,方向如图示

9.定义圆弧
圆弧有两种定义方式:四点定义和角度定义
四点定义格式:
F(label)=FEAT/ARC,4POINT,var_1,e1x,e1y,e1z,mx,my,mz,e2x,e2y,e2z,cx,cy,cz
Var_1 为INNER
或者OUTER
e1x,e1y,e1z 为圆弧第一个边缘点的坐标值
mx,my,mz 为圆弧中点的坐标值
e2x,e2y,e2z 为圆弧第二个边缘点的坐标值
cx,cy,cz 为圆弧圆心的坐标
角度定义格式:
F(label)=FEAT/ARC,var_1,var_2,i,j,k,rad,ang1,ang2 var_3
Var_1 为INNER
或者OUTER
Var_2 为CART,x,y,z
或者POL,r,a,h
Var_3 为is,js,ks
或者不存在
部分参数意义
i,j,k 为圆弧所在平面的向量
rad 为一个正整数表示圆弧的半径
ang1 为由Var_3参数确定的主轴所确定的角度
ang2 为对于角度1包含圆弧的角度
is,js,ks 为圆弧起始点在平面上的向量

坐标系需要使用基准元素进行建立,在DMIS中,基准的定义语句为

          定义坐标系基准的语句为DATDEF/var_1Var_1         为FA(label1),DAT(x)或者FA(label2),DAT(x-x)或者F(label3),DAT(x)DAT(x)       为基准标签名,X为任意大写希腊字母,如图纸上的A等等。DAT(x-x)     为建立的共同基准,对应定义语句中的FEAT/COMPOUND。F(label3)      以元素理论值建立基准FA(label2)     以元素实际值建立基准建立完基准之后,指定建立完的基准建立坐标系时,限制相应空间自由度。

建立坐标系的格式为
D(label)=DATSET/var_1
此函数的作用为定义并且激活一套基准,或为一个工件坐标系,赋于一个坐标系标签名,基准的顺序遵从标准ASME Y14.5M-1994。
以常见的面、线、点为例,假设面定义的基准标签名为A,线为B,点为C

那么建立坐标系的DMIS语句即为:
D(CRD1) = DATSET/DAT(A), ZDIR, ZORIG, DAT(B), XDIR, YORIG, DAT©, XORIG
该语句是意思是建立一个新的坐标系名称为CRD1。
使用基准A,也就是平面,确立该坐标系的Z轴方向和Z轴位置。
使用基准B,也就是直线,确立该坐标系的X轴方向和Y轴的位置。
使用基准C,也就是圆心,确定该坐标系的X轴的位置。

所建立的坐标系可以根据需要灵活调整,但是按照顺序,元素进行坐标系自由度的限制,不超出,XYZ三个轴的位置,和XYZ三个轴的方向。

元素测量

常用的DMIS测量语句的格式为
MEAS/var_1,F(label),n

Var_1 为各个元素类型的关键字,如CIRCLE\CONE\SPHERE等等
F(label) 为需要测量元素的标签名
n 为测量点数。在扫描被激活的时候,点数会根据软件算法重新生成,n不会生效.

以测量圆为例。
MEAS/CIRCLE, F(CIR1), 3
GOTO/ -15.500000, -0.000000, 10.000000
PTMEAS/CART, -12.500000, -0.000000, -2.000000, -1.000000, -0.000000,$
0.000000
GOTO/ -13.423394, -7.750000, -2.000000
GOTO/ -7.750000, -13.423394, -2.000000
GOTO/ 0.000000, -15.500000, -2.000000
PTMEAS/CART, 6.250000, -10.825318, -2.000000, 0.500000, -0.866025, 0.000000
GOTO/ 13.423394, -7.750000, -2.000000
GOTO/ 15.500000, 0.000000, -2.000000
GOTO/ 13.423394, 7.750000, -2.000000
PTMEAS/CART, 6.250000, 10.825318, -2.000000, 0.500000, 0.866025, 0.000000
GOTO/ 7.750000, 13.423394, 10.000000
ENDMES

MEAS和ENMES中间是机器的定位点和测量的分布。上面的语句表示,对圆元素,CIR1
进行测量,3表示所使用的测量点数。

注意的地方:

1.在测量点的情况下,如果n设置为1,那么将按照定义的理论值去测量。如果n设置为0,将记录此时测头红宝石球心的坐标,将此作为当前测量点实际值。

2.当打开AUTO模式时,测量设备将使用内部定义的算法来分布测量点进行测量。如果内部对于该元素没有对应算法分布测量点,默认将会切换到下一个所定义的模式状态下。

3.当使用PROG模式时,测量设备会按照下面所给的PAMEAS、PTMEAS和GOTO语句去测量元素。

4.程序块后必须跟ENDMES为结束标志。中间可以插入高级语句以及其他主关键字。

公差评价、输出报告

进行元素理论值的定义,并且测量得到实际值后,需要对该元素进行评价。
形位公差同样为标签名定义,定义格式为
T(LABEL) = TOL/var_1
Var_1 为所需要评价的公差次关键字,这里打开软件自学习可以得到所有公差标签名的次字,列表如下:

FLAT 平面度
TRNOUT 全跳动
SYM 对称度
STRGHT 直线度
PROFS 曲面轮廓度
PROFP 点轮廓度
PROFL 线轮廓度
PARLEL 平行度公差
PERP 垂直度公差
ANGL 锥角公差
ANGLB 角度公差
ANGLR 倾斜度公差
POS 位置度公差
CRNOUT 圆跳动公差
DIAM 直径公差
CYLCTY 圆柱度公差
CONCEN 同心度公差
CIRLTY 圆度公差
RAD 半径公差
WIDTH 宽度公差

例如,定义一个平面度公差,定义的语句为:
T(AAA) = TOL/FLAT,0.1
定义了一个名称为AAA的平面度公差,公差带为0.1。
评价并输出一个平面例如PLN1的平面度公差的语句即为:
OUTPUT/FA(PLN1),TA(AAA)

4.2.5 变量、输入提示

一、变量声明、赋值。
变量声明的函数为
DECL/var_1 var_2 var_3
定义变量的作用范围
其中 Var_1 为COMMON 普通
或者GLOBAL 全局变量
或者LOCAL 局部变量
或者不存在
定义变量的类型
Var_2 为BOOL 布尔型
或者INTGR 整数型
或者LONG 长整型
或者REAL 实数型
或者DOUBLE 双精度型
或者CHAR,n 字符型
或者VECTOR 向量型
Var_3 为Varname 变量名称

相同类型的变量可以在同一个DECL语句中声明。
所有的变量在使用前都需要进行声明,变量的名称由1到16个字母数字、下划线组成,名称的第一个字符只能为希腊字母。变量名称不能使用DMIS预留字,预留字包括DMIS主字、次字、常用函数等等。如果这里不指定Var_1,DMISMN声明的程序块用GLOBAL为默认值,在MACRO声明的程序块中用LOCAL为默认值。变量数组的起始从1开始,而其它常用的高级编程语言如C、JAVA从0开始。

声明完变量后,即可对其赋值,在DMIS中进行变量赋值并不像只用“=”号那样简单
DECL/COMMON,CHAR,40,TCDIRS
DECL/COMMON,INTGR,TCNSLT
TCDIRS=ASSIGN/‘C:\Programmi\Coord3\ARCO\Data’
TCNSLT=ASSIGN/6

变量同样可提示由用户输入后获得,使用的关键字为PROMPT

PROMPT/TEXT, ‘hello,world’---------------界面出现一行提示 hello world
PROMPT/EDIT, var_1 --------------------出现对话框,把对话框内输入的数据赋值给var_1
PROMPT/CHECK, ‘直径’,var_1-------------出现勾选项,在"直径"后面,如果勾选上,var_1的值为1,反之var_1的值为0
PROMPT/LIST,var_1,“圆度”,“位置度”,“直径公差”-----------出现一个下拉菜单,中间包含圆度\位置度\直径公差,选则一项就将值赋给var_1,例如我在下拉菜单中选择了"位置度",那么字符串变量var_1的值就为"位置度"
PROMPT/TITLE,‘校验程序’------------出现的窗口的标题栏即为’校验程序’
PROMPT/PICTURE,‘filename’------------出现一个图片,filename为此文件和路径和文件名
下面是一个范例的提示窗口,如图


DMIS语句如下:

DECL/CHAR,20,List_var1
DECL/DOUBLE,edit_var1,edit_var2,edit_var3
DECL/INTGR,Check_var1,Check_var2,Check_var3

Tempchar = Prompt/Title,‘孔测量程序’,$
Text,‘孔的数量’,edit,edit_var1,$
Text,‘孔的直径’,edit,edit_var2,$
Text,‘直径公差带’,edit,edit_var3,$
List,List_var1,‘直角坐标系’,‘极坐标系’,$
Check,‘位置度’,Check_var1,Check,‘圆度’,Check_var2,Check,‘直径公差’,Check_var3
4.2.6 分支结构

DMIS和其它语言一样,有逻辑操作符和关系操作符。
逻辑操作符
.AND. 逻辑与
.OR. 逻辑或
.NOT. 逻辑非
关系操作符
.EQ. equal to 等于
.NE. NOT equal to 不等于
.LT. less than 小于
.LE. less than or equal 小于等于
.GT. greater than 大于
.GE. greater than or equal to 大于等于

结构语句上有
条件判断 IF,例如
IF/(NCYCLE .EQ. 10)
i n s t r u c t i o n s E L S E instructions ELSE instructionsELSEinstructions
ENDIF
DO循环 例如
DECL/INTGR,i
DECL/CHAR,20,elnm
DECL/DOUBLE,xx,yy,zz
DO/i,1,3,1
elnm=ASSIGN/CONCAT(‘poi_’,STR(i))
xx=OBTAIN/FA(@elnm),3
yy=OBTAIN/FA(@elnm),4
zz=OBTAIN/FA(@elnm),5
elnm=ASSIGN/CONCAT(‘newpoi_’,STR(i))
F(@elnm)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
FA(@elnm)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
ENDDO
以上表示 DO 和ENDDO之间的内容循环3次。
每循环一次,变量i的值加1,到3后结束。
分枝选择 SELECT CASE
DECL/INTGR,i
DECL/CHAR,50,tx
i=ASSIGN/10
SELECT/i
CASE/10
tx=ASSIGN/CONCAT('THE ACTUAL VALUE OF X IS: ',STR(i))
TEXT/OPER,tx
ENDCAS
CASE/20
tx=ASSIGN/CONCAT('THE ACTUAL VALUE OF X IS: ',STR(i))
TEXT/OPER,tx
ENDCAS
DFTCAS
TEXT/OPER,‘X is not equal to the 2 cases’
ENDCAS
ENDSEL

以上语句判断i,如果为10,执行某项操作。
如果为20,执行某项操作。
程序跳转 JUMPTO
JUMPTO/(CONTINUEFROMHERE)
i n s t r u c t i o n s instructions instructions instructions
(CONTINUEFROMHERE)
i n s t r u c t i o n s instructions instructions instructions
表示运行该句的时候,会跳转到所对应的程序行上继续运行。

DMIS里提供常用的字符串函数和数学函数供程序使用,列出部分仅供参考:

ABS(X) 绝对值
ACOS(X) 反余弦
ASIN(X) 反正弦
ATAN(X) 反正切
ATAN2(Y,X) 取回角度(输入XY坐标,然后返回这个点到坐标原点的角度,以X轴线上为0值开始,两个值不能同时为0,返回值在正负PIE之间)
COS(X) 余弦
DBLE(X) 将数字变量’x’变为双精度型类型变量
DTOR(X) 角度转弧度
EXP(X) 指数函数
INT(X) 取整数部分
LN(X) 自然对数
LOG(X) 以10为底的对数
MN(val1, val2, …) 取出列表值中的最小值
MOD(x,y) x/y的求余运算
MX(val1, val2, …) 取出列表值中的最大值 (这两个以前不知道,居然写了个宏用冒泡法来求,汗~~~)
NINT(X) 四舍五入取整
ORD(x) 顺序返回一个值,如果x为BOOL型,flase返回0,true返回1.如果x为字符型,返回第一个字符的ASCII值
RL(X) 返回实数型数据
RTOD(X) 弧度转角度
SIN(X) 正弦
SQRT(X) 返回平方根
TAN(X) 正切

属性取值、宏程序介绍

取值函数OBTAIN的作用是把之前设定的一些参数通过变量赋值得到.
例如各个元素的坐标值和参数值,在HLL编程中用到很频繁.
以圆为例,圆的定义语句为
F(CIR1) = FEAT/CIRCLE,OUTER,CART, 10, 20, 30, 0, 0, 1,25
上面的定义语句定义了一个X值为10,Y值为20,Z值为30,直径为25,所在平面方向为0,0,1的外圆
那么我的取值语句为,假设前面声明过一个DOUBEL型变量为Demo1
Demo1 = OBTAIN/F(CIR1),X
那么当X为4的时候,Demo1取得的是该圆的X值.
当X为5的时候,Demo1取得的是该圆的Y值.
当X为6的时候,Demo1取得的是该圆的Z值.
当X为7的时候,Demo1取得的是该圆的i值.
当X为8的时候,Demo1取得的是该圆的j值.
当X为9的时候,Demo1取得的是该圆的k值.
当X为10的时候,Demo1取得的是该圆的直径.
很明显,在对元素的参数进行取值的时候,刚好是从元素定义语句的第一个参数依次向后数,如上面的例子,取值的顺序刚好就是元素定义的顺序.
其它元素参数的取得也遵循这个规律.

使用这些变量,在编程计算中有重要作用,下面是常见元素取值的列表:


上面是常用元素的属性列表,数字1234……是OBTIAN函数取得的位置.

宏(Macro)详解

Macro是DMIS中类似于定义一个函数,可以传递一些参数,我们可以这样来理解宏.
我们新做了一个函数,通过CALL来输入对应的参数,即可完成设计的功能.
例如,之前论坛上有一个写曲线投影到平面的程序,大概程序的结构为
定义一个宏,假设为M(SSJ)
CALL/M(SSJ),‘FA(GCV1)’,‘FA(PLN1)’
那么在定义这个宏语句的时候,只需要两个参数:曲线的标签名和投影平面的标签名.
其它的计算和处理都在前面所定义的宏中完成.
宏的好处不言而喻,他使得程序的通用性更强,更模块化,更利于查错.
宏定义的语法为:M(LABEL) = Macro/varname,‘lable’
ENDMAC
以一个简单例子说明
输出圆CIR1的直径\X坐标\Y坐标\Z坐标
通常我们的语句为
DECL/COMMON,DOUBLE,DATAC[4]
DATAC[1] = OBTAIN/FA(CIR1),4
DATAC[2] = OBTAIN/FA(CIR1),5
DATAC[3] = OBTAIN/FA(CIR1),6
DATAC[4] = OBTAIN/FA(CIR1),10
WRITE/DID(DEFAULTSCREEN),DATAC[1]
WRITE/DID(DEFAULTSCREEN),DATAC[2]
WRITE/DID(DEFAULTSCREEN),DATAC[3]
WRITE/DID(DEFAULTSCREEN),DATAC[4]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
但是如果这个用宏定义来做,语句是这样
M(demo) = MACRO/‘CIR1’
DECL/COMMON,DOUBLE,DATAC[4]
DATAC[1] = OBTAIN/FA(CIR1),4
DATAC[2] = OBTAIN/FA(CIR1),5
DATAC[3] = OBTAIN/FA(CIR1),6
DATAC[4] = OBTAIN/FA(CIR1),10
WRITE/DID(DEFAULTSCREEN),DATAC[1]
WRITE/DID(DEFAULTSCREEN),DATAC[2]
WRITE/DID(DEFAULTSCREEN),DATAC[3]
WRITE/DID(DEFAULTSCREEN),DATAC[4]
ENDMAC
CALL/M(demo),(CIR1)
表面上来看,结果没有变,但是代码好象增多了.
如果同样我需要输出CIR2的这些值,我不需要再修改源程序,只需要将CALL语句中的CIR1替换为CIR2即可.
但是如果是第一种代码,我们需要把所有的CIR1替换为CIR2,不仅不方便,而且容易出错.
我再需要输出其它圆的这几项实际值,只需要调用这个宏M(demo)即可以,不用重复再去写代码,保证程序的模块化.
PS: 宏定义的参数有两种,标签名和变量.
在用CALL语句做调用时,同样也只有两种参数.
定义的时候标签名为单引号,变量没有什么限制,例如 M(demo) = macro/‘CIR1’,tempchar
调用宏的时候,标签名为括号,变量无限制,例如CALL/M(demo),(CIR1),tempstring
宏在测量程序上的很有意义,很多写好的程序,可以用宏的方式写出来,方便以后做调用,节省不必要的代码工作.

实际DMIS编写流程。

按照前面介绍的内容,一个完整的DMIS编写流程即为:
1、先进行元素定义 FEAT
2、手动测量 MODE/MAN MEAS
3、建立基准和坐标系 DATDEF DETSET
4、对需要测量和评价的元素,进行理论定义 FEAT
5、测量 MODE/AUTO,PROG MEAS
6、定义公差 TOL
7、评价并输出 OUTPUT

例如下面是一段完整的DMIS程序供参考:

DMISMN/‘DEMO’, 4.0
UNITS/MM, ANGDEC
WKPLAN/XYPLAN
PRCOMP/ON
TECOMP/OFF
FLY/1.0
MODE/PROG, MAN
SNSET/APPRCH, 10.000000
SNSET/RETRCT, 10.000000
SNSET/DEPTH, 0.000000
SNSET/SEARCH, 10.000000
SNSET/CLRSRF, 20.000000
RECALL/D(MCS)
SNSLCT/S(ROOTSN1_1)
GEOALG/CIRCLE, LSTSQR
GEOALG/ARC, LSTSQR
GEOALG/PLANE, LSTSQR

MODE/MAN
F(PLN1) = FEAT/PLANE,CART, 279.697040, 178.902324, -48.890547, -0.008119,$
-0.001582, 0.999966
KaTeX parse error: Can't use function '$' in math mode at position 154: …119, -0.001582,$̲ 0.9999… Measurement points are created through actual points
MEAS/CIRCLE, F(CIR1), 4
PTMEAS/CART, 275.168715, 244.317071, -51.278907, -0.049854, 0.998756,$
0.001176
PTMEAS/CART, 344.255071, 178.193569, -50.822612, 0.999949, -0.006025,$
0.008109
PTMEAS/CART, 276.870009, 112.800233, -51.473224, -0.024002, -0.999710,$
-0.001777
PTMEAS/CART, 212.650249, 177.602113, -51.892097, -0.999854, -0.015012,$
-0.008142
ENDMES
OUTPUT/FA(CIR1), TA(TDIAM41), TA(TPOS2D1)
D(CRD1) = TRANS/XORIG, FA(CIR1), YORIG, FA(CIR1), ZORIG, FA(PLN1)
MODE/PROG,MAN
GOTO/-76.816878, -0.997807, 38.548933
GOTO/-11.405994, -6.057453, 38.548433
GOTO/-11.405627, -6.057423, -5.604340
GOTO/-33.836101, 33.744768, -5.599840
GOTO/-33.835601, 33.743268, -1.500000
GOTO/-33.831589, 33.735719, -1.500000
GOTO/-32.938070, 34.413721, -1.498815
GOTO/-36.417144, 36.952645, -2.500000
GOTO/-36.412147, 36.944657, -3.500000
GOTO/-35.388128, 37.084179, -3.501827
F(CIR2) = FEAT/CIRCLE,INNER,CART, -0.409947, 0.038648, -3.502036, -0.008119,$
-0.001582, 0.999966, 106.893541
KaTeX parse error: Can't use function '$' in math mode at position 319: …380, -0.691461,$̲ -0.006… Measurement points are created through actual points
MEAS/GCURVE, F(GCV1), 4
PTMEAS/CART, -6.062120, 53.182991, -3.501083, 0.162207, -0.986757, -0.000245
GOTO/ -3.215447, 43.460979, -3.501827
PTMEAS/CART, -3.248310, 53.424145, -3.477855, 0.032802, -0.999461, -0.001315
GOTO/ -2.460431, 42.572500, -3.501827
PTMEAS/CART, -2.484479, 53.444907, -3.471621, 0.023398, -0.999725, -0.001392
GOTO/ -1.394909, 42.472014, -3.501327
GOTO/ -0.957400, 51.007904, -3.501327
PTMEAS/CART, -0.994854, 53.484504, -3.459463, 0.036755, -0.999323, -0.001283
ENDMES
GOTO/-4.901483, 42.448972, -3.501827
$$ Measurement points are created through nominal points
MEAS/GCURVE, F(GCV1), 15
PTMEAS/CART, -5.892668, 53.209791, -3.499665, 0.150306, -0.988639, -0.000300
PTMEAS/CART, -5.558148, 53.256792, -3.496875, 0.128304, -0.991735, -0.000500
PTMEAS/CART, -5.222031, 53.296755, -3.494082, 0.108203, -0.994129, -0.000700
PTMEAS/CART, -4.885208, 53.330260, -3.491294, 0.090103, -0.995932, -0.000800
PTMEAS/CART, -4.548536, 53.357957, -3.488517, 0.074203, -0.997243, -0.001000
PTMEAS/CART, -4.210812, 53.380672, -3.485739, 0.060398, -0.998174, -0.001100
PTMEAS/CART, -3.872824, 53.399067, -3.482966, 0.048701, -0.998813, -0.001200
PTMEAS/CART, -3.534659, 53.413874, -3.480197, 0.039201, -0.999230, -0.001300
PTMEAS/CART, -3.196381, 53.425823, -3.477431, 0.031800, -0.999493, -0.001300
PTMEAS/CART, -2.858034, 53.435648, -3.474668, 0.026601, -0.999645, -0.001400
PTMEAS/CART, -2.518972, 53.444097, -3.471902, 0.023600, -0.999720, -0.001400
PTMEAS/CART, -2.180571, 53.451869, -3.469142, 0.022701, -0.999741, -0.001400
PTMEAS/CART, -1.841495, 53.459730, -3.466377, 0.024000, -0.999711, -0.001400
PTMEAS/CART, -1.503116, 53.468383, -3.463615, 0.027501, -0.999621, -0.001400
PTMEAS/CART, -1.164780, 53.478574, -3.460852, 0.033098, -0.999451, -0.001300
ENDMES
GOTO/-0.797396, 42.591019, -3.500000
GOTO/40.984488, -20.268627, -3.501327
GOTO/46.376602, -20.623058, -3.501827
GOTO/41.050489, -15.308194, -3.501327
GOTO/44.906570, -20.008082, -3.615828
GOTO/45.467582, -20.519569, -3.500000

DMIS 5.3 编程基本要义相关推荐

  1. 三坐标检测 Visual DMIS

    Visual DMIS测量软件-基于先进.严谨的算法平台开发,集多年行业经验于一身,通过国际PTB标准认证的坐标测量机通用测量软件,全面满足绝大多数客户测量的需求,为各种规模企业所使用,完成各种尺寸. ...

  2. 不同年龄段的孩子如何选择编程课程?它又能为我们带来什么?

    随着人工智能技术在日常生活中逐步的渗透,人类未来的生活和工作将越来越多的与人工智能技术打交道.而编程作为人类与计算机沟通的工具,是人工智能的技术基础.全球超过24个国家已经将编程作为了基础学科. 很多 ...

  3. 【UG NX MCD 机电一体化概念设计】UG NX MCD+PLCSIM Advanced联合仿真实例(三) 联合调试

    Step0 前言 上一篇中, 我们采用仿真序列的方式,进行了搬运逻辑的尝试,仅仅是固定一个点去放盒子,所以这篇文章将通过PLC程序控制去每一层地垒起来. Step1 MCD创建信号 信号可选择是否为运 ...

  4. 融云开发漫谈:你是否了解Go语言并发编程的第一要义?

    2007年诞生的Go语言,凭借其近C的执行性能和近解析型语言的开发效率,以及近乎完美的编译速度,席卷全球.Go语言相关书籍也如雨后春笋般涌现,前不久,一本名为<Go语言并发之道>的书籍被翻 ...

  5. PC DMIS三坐标产品测量编程视频教程+资料

    PC DMIS三坐标产品测量编程视频教程+资料 链接:https://pan.baidu.com/s/1a6hxE9R-eCvQQf378bCk_A 提取码:qc6i

  6. Linux多线程网络编程要义丨epoll与reactor原理

    linux多线程网络编程要义 1. epoll原理剖析 2. 单reactor原理以及应用 3. 多reactor原理以及应用 [Linux服务器系列]Linux多线程网络编程要义丨epoll与rea ...

  7. ARCOCAD 高级编程(DMIS代码)

    DMISMN/'' $$ *** 程序初始段 *** MODE/MAN RECALL/D(MAC) WKPLAN/XYPLAN UNITS/MM,ANGDEC,TEMPC TECOMP/OFF PTB ...

  8. 经验总结!我们是如何在编程面试中挂掉的

    作者:Michael Lazarski 编译:张晶晶 阅读编程题目不够细致 有时一字之差就会完全改变要求原意,或许你在第一时间并未领会该词要义,又或许以为自己领会到了,然而实际上未必. 改进:将题目多 ...

  9. JavaScript权威Douglas Crockford:代码阅读和每个人都该学的编程

    作者:Peter Seibel 关于JavaScript Seibel:在程序学习之路上有哪些令你后悔的事情? Crockford:我了解一些语言,但却一直没有机会使用.我花了不少时间学习APL并了解 ...

最新文章

  1. Zookeeper的安装与配置
  2. python都学什么啊-Python到底有什么用?为什么那么多人都在学Python?
  3. rat/rats--用有理数形式表示矩阵
  4. 和移动对接短信http协议和cmpp协议那个好_python网络爬虫之HTTP原理,爬虫的基本原理,Cookies和代理介绍...
  5. java嵌套对象,java – 从嵌套流中收集一组对象
  6. JS大小比较(>、<、>=、<=)运算符
  7. haproxy + keepalived + mycat 高可用与负载均衡集群配置 centos7
  8. python selenium实现百度搜索
  9. 解决默写浏览器中点击input输入框时,placeholder的值不消失的方法
  10. react组件卸载调用的方法_react相关基础知识
  11. SpringBoot+Quartz实现动态可配定时任务(动态定时任务)
  12. 干货满满,图文详解 HDFS 的 工作机制 及其原理
  13. Linux终端删除文件夹命令
  14. Ubuntu 安装 VMware 15
  15. 5G消息亮相2021国际数字科技展暨天翼智能生态博览会
  16. 转:移动建站工具(一):分秒钟将Web网站移动化
  17. 硬件茶谈(B站up主爱上半导体)
  18. 1万用户的虚拟服务器,10万用户用什么虚拟主机
  19. MarkDown首行缩进和换行
  20. insert插入语句

热门文章

  1. GameMakerStudio2调用外部dll库
  2. Kindle for Android打开本地mobi文件
  3. 怎么把PDF转换成PPT
  4. 经验分享丨自学多久能达到挖漏洞的水平,漏洞奖金有多少?
  5. ACTION_DATE_CHANGED不响应
  6. 重采样 上采样 下采样
  7. 基于面部表情的情绪识别-论文学习
  8. MYSQL学习整理(4):函数
  9. 商用清洁机器人:科沃斯“破圈”、高仙机器人“纵深”
  10. (干货)备战2021年软考中级网络工程师-04知识产权与标准化