DIMS语言简明教程新.docx
《DIMS语言简明教程新.docx》由会员分享,可在线阅读,更多相关《DIMS语言简明教程新.docx(11页珍藏版)》请在冰豆网上搜索。
DIMS语言简明教程新
DMIS语言简明教程
本教程基于DMIS4.0语言编写,简明地介绍了最常用的DMIS指令,希望本教程能对ARCO用户利用DMIS语言编程时提供一些快速简便的指导。
1.1几何元素
几何元素的测量,包括:
元素的定义,测量指令,要测量的点以及测量结束指令。
以下用圆元素的测量举例说明:
1——F(CIRC3)=FEAT/CIRCLE,INNER,CART,-32.5000,38.3494,-25.0000,0.0000,0.0000,1.0000,10.0000
2——MEAS/CIRCLE,F(CIRC3),3
3——PTMEAS/CART,-32.5000,33.3494,-25.0000,0.0000,1.0000,0.0000
3——PTMEAS/CART,-36.8301,40.8494,-25.0000,0.8660,-0.5000,0.0000
3——PTMEAS/CART,-28.1699,40.8494,-25.0000,-0.8660,-0.5000,0.0000
4——ENDMES
1——元素定义;2——测量指令;3——要测量点数(最少3点确定一个圆);4——测量结束指令。
以“F”开始的元素定义为理论元素,以“FA”开始的元素定义为测量元素。
序号:
1—元素名称;2—定义指令;3—定义圆元素;4—定义内圆;5—直角坐标系;6—X理论值;7—Y理论值;8—Z理论值;9—I;10—J;11—K;12—定义圆的理论直径
123456789101112
F(CIRC3)=FEAT/CIRCLE,INNER,CART,-32.5000,38.3494,-25.0000,0.0000,0.0000,1.0000,10.0000
FA(CIRC3)=FEAT/CIRCLE,INNER,CART,-32.5000,38.3494,-25.0000,0.0000,0.0000,1.0000,10.0000
注意:
在编写程序时,元素定义为理论元素,而不定义为测量元素。
测量元素是在测量结束后由软件计算得出。
“MEAS”指令启动测量过程,如果系统是“MODE/AUTO”自动模式,测量机即开始自动测量,按指定的点数采点测量;如果系统是“MODE/PROG”程序模式,所有的PTMEAS采点指令将独立运行,与指定的点数无关。
MEAS/CIRCLE,F(CIRC3),3
“PTMEAS”指令驱动测量机采一个点,它后面包含该测量点的位置(-28.1699,40.8494,-25.0000)和测量方向(-0.8660,-0.5000,0.0000)。
PTMEAS/CART,-28.1699,40.8494,-25.0000,-0.8660,-0.5000,0.0000
“Endmes”结束元素的测量并计算测量结果。
1.2变量定义
DECL/CHAR,80,TCDIRS——定义字符型变量,变量值为80,变量名称为TCDIRS
DECL/INTGR,TCNSLT——定义整型变量,变量名称为TCNSLT
DECL/DOUBLE,TCDIFX,TCDIFY,TCDIFZ——定义双精度型变量,变量名称分别为TCDIFX;TCDIFY;TCDIFZ
DECL/CHAR,80,RESULTS(10)——定义字符型变量,变量值为80,变量指针名称为RESULTS(10)
通过DECL指令定义变量:
DECL/INTGR,IND——定义整型变量,变量名称为IND
DECL/CHAR,80,RESULTS(10)——定义字符型变量,变量值为80,指针变量名称为RESULTS(10)
DO/IND,1,10,1——执行增量为1,变量名称为IND,从1到10的循环程序
RESULTS[IND]=ASSIGN/''——指针变量结果赋值
ENDDO——结束循环程序
可以定义的变量类型:
BOOL逻辑型
CHAR字符型
INTGR整型
REAL实型
VECTOR矢量型
LONG长整型
DOUBLE双精度型
变量类型可以是:
COMMON公共变量
GLOBAL全局变量
LOCAL本地变量
1.3赋值指令
给一个变量赋值,在DMIS中,不能仅使用等号“=”,必须用”ASSIGN/”。
如下举例:
TCDIRS=ASSIGN/'C:
\Programmi\Coord3\ARCO\Data\'—把字符串’C:
\Programmi\Coord3\ARCO\Data\’赋值给变量TCDIRS
TCNSLT=ASSIGN/6——变量TCNSLT的值等于6
1.4信息操作
TEXT/OPER,'MAKESURETHEPARTISONTHEFIXTURE'textOPERmustbeclosedpressingOK
TEXT/MAN,'MEASUPPERHOLE'textMANdisappearautomaticallywhenyoumeasurethe1stpoint
1.5数据和文本输入
TEXT/QUERY,[NMVAR],20,A,L,'Writeyourname'
1.6从测量元素中读取数据
利用OBTAIN指令可以读取测量或理论元素内部的数据.请不要忘记区分‘F’与‘FA’,‘S’与‘SA’,…之间的区别。
F(POI_1)=FEAT/POINT,CART,1.111,2.222,3.333,0,0,0
F(POI_2)=FEAT/POINT,CART,4.444,5.555,6.666,0,0,0
F(POI_3)=FEAT/POINT,CART,7.777,8.888,9.999,0,0,0
FA(POI_1)=FEAT/POINT,CART,1.111,2.222,3.333,0,0,0
FA(POI_2)=FEAT/POINT,CART,4.444,5.555,6.666,0,0,0
FA(POI_3)=FEAT/POINT,CART,7.777,8.888,9.999,0,0,0
DECL/INTGR,i
DECL/CHAR,20,elnm
DECL/DOUBLE,xx,yy,zz
DO/i,1,3
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
在上面的例子中,XX=OBTAIN/FA(POI_1),3,其中的3表示读取POI_1元素中的第三项参数。
该序号具体对应项目,可以参考该元素的定义项目,比如:
F(POI_1)=FEAT/POINT,CART,1.111,2.222,3.333,0,0,0
序号:
12345678
在点元素中,1—“POINT”,2—“CART”,3—-X坐标,4—-Y坐标,5—-Z坐标,6—-I,7—-J,8—K
1.7字符串合并
CONCAT指令用于合并两个或多个字符串或字符串变量
例一:
FILENAME=ASSIGN/CONCAT(PART1,NAME,'.TXT')
例二:
elnm=ASSIGN/CONCAT('newpoi_',STR(i))
1.8SCSNS
用于获得正在使用的测头名称
e.g(举例).
DECL/DOUBLE,PRDIAM——定义双精度型变量PRDIAM
DECL/CHAR,50,SENSOR_NAME——定义字符值为50的字符型变量SENSOR_NAME
SENSOR_NAME=ASSIGN/SCSNS()——给字符型变量SENSOR_NAME赋值测头名称
PRDIAM=OBTAIN/SA(@SENSOR_NAME),10——双精度型变量PRDIAM读取第10个理论测头
1.9文件读写
$$————————————————————————————————————————
$$writepointscoordinatestofile
$$————————————————————————————————————————
DECL/CHAR,50,filnm,elnm
DECL/INTGR,i
DECL/DOUBLE,xx
DECL/DOUBLE,yy
DECL/DOUBLE,zz
TEXT/QUERY,[filnm],50,A,L,'insertfilename'
filnm=ASSIGN/CONCAT('C:
\',filnm,'.TXT']
DID[F1)=DEVICE/STOR,filnm
OPEN/DID[F1],DIRECT,OUTPUT,OVERWR
F(POI_1)=FEAT/POINT,CART,1.111,2.222,3.333,0,0,0
F(POI_2)=FEAT/POINT,CART,4.444,5.555,6.666,0,0,0
F(POI_3)=FEAT/POINT,CART,7.777,8.888,9.999,0,0,0
FA(POI_1)=FEAT/POINT,CART,1.111,2.222,3.333,0,0,0
FA(POI_2)=FEAT/POINT,CART,4.444,5.555,6.666,0,0,0
FA(POI_3)=FEAT/POINT,CART,7.777,8.888,9.999,0,0,0
DO/i,1,3
elnm=ASSIGN/CONCAT('poi_',STR(i))
xx=OBTAIN/FA(@elnm),3
yy=OBTAIN/FA(@elnm),4
zz=OBTAIN/FA(@elnm),5
WRITE/DID[F1],xx
WRITE/DID[F1],yy
WRITE/DID[F1],zz
ENDDO
CLOSE/DID[F1]
$$————————————————————————————————————————
$$readfromfile
$$————————————————————————————————————————
DECL/CHAR,50,filnm
DECL/CHAR,50,xyz
DECL/DOUBLE,xx
DECL/DOUBLE,yy
DECL/DOUBLE,zz
TEXT/QUERY,[filnm],50,A,L,'insertfilename'
filnm=ASSIGN/CONCAT('C:
\',filnm,'.TXT']
DID[F1)=DEVICE/STOR,filnm
OPEN/DID[F1],DIRECT,INPUT
READ/DID[F1],xx
READ/DID[F1],yy
READ/DID[F1],zz
F(POI_10)=FEAT/POINT,CART,xx,yy,zz,0,0,0
FA(POI_10)=FEAT/POINT,CART,xx,yy,zz,0,0,0
READ/DID[F1],xx
READ/DID[F1],yy
READ/DID[F1],zz
F(POI_20)=FEAT/POINT,CART,xx,yy,zz,0,0,0
FA(POI_20)=FEAT/POINT,CART,xx,yy,zz,0,0,0
READ/DID[F1],xx
READ/DID[F1],yy
READ/DID[F1],zz
F(POI_30)=FEAT/POINT,CART,xx,yy,zz,0,0,0
FA(POI_30)=FEAT/POINT,CART,xx,yy,zz,0,0,0
result=ASSIGN/CONCAT(STR[xx],',',STR[yy],',',STR[zz]]
TEXT/OPER,result
CLOSE/DID[F1]
1.10逻辑操作
.AND.与
.OR.或
.NOT.非
1.11关系运算
.EQ.等于
.NE.不等于
.LT.小于
.LE.小于或等于
.GT.大于
.GE.大于或等于
1.12IF语句
IF/[NCYCLE.EQ.10]——如果NCYCLE等于10
$$instructions——结果输出语句
ELSE——否则……
$$instructions——否则的结果输出语句
ENDIF——结束条件如果
1.13DOloop循环语句
DECL/INTGR,i——定义整型变量i
DECL/CHAR,20,elnm——定义字符型变量,变量值为20,变量名称为elnm
DECL/DOUBLE,xx,yy,zz——定义双精度型变量xx,yy,zz
DO/i,1,3,1——变量i等于1开始循环,逐渐加1递增,直到i等于3
elnm=ASSIGN/CONCAT('poi_',STR(i))——合并字符串'poi_',STR(i)赋值给字符变量elnm
xx=OBTAIN/FA(@elnm),3——提取变量元素@elnm的第3项理论值赋值给xx
yy=OBTAIN/FA(@elnm),4——提取变量元素@elnm的第4项理论值赋值给yy
zz=OBTAIN/FA(@elnm),5——提取变量元素@elnm的第5项理论值赋值给zz
elnm=ASSIGN/CONCAT('newpoi_',STR(i))——合并字符串'newpoi_',STR(i)赋值给字符变量elnm
F(@elnm)=FEAT/POINT,CART,xx,yy,zz,0,0,0——变量元素@elnm的实测值定义
FA(@elnm)=FEAT/POINT,CART,xx,yy,zz,0,0,0——变量元素@elnm的理论值定义
ENDDO——结束DO循环
1.14SELECTCASE分支语句
DECL/INTGR,i——定义整型变量i
DECL/CHAR,50,tx——定义字符型变量,变量值为50,变量名称为tx
i=ASSIGN/10——把10赋值给i(i=10)
SELECT/i——选择整型变量i
CASE/10——CASE分支语句,假如i等于10
tx=ASSIGN/CONCAT('THEACTUALVALUEOFXIS:
',STR(i))——合并字符串变量'THEACTUALVALUEOFXIS:
',STR(i)赋值给字符变量tx
TEXT/OPER,tx——程序执行时,字符变量tx的文本信息显示在电脑屏幕上
ENDCAS——结束分支语句
CASE/20——CASE分支语句,假如i等于20
tx=ASSIGN/CONCAT('THEACTUALVALUEOFXIS:
',STR(i))——合并字符串变量'THEACTUALVALUEOFXIS:
',STR(i)赋值给字符变量tx
TEXT/OPER,tx——程序执行时,字符变量tx的文本信息显示在电脑屏幕上
ENDCAS——结束分支语句
DFTCAS——程序命令:
如果并且甚至没有一个CASE声明获得真实值,那么声明从DFTCAS到ENDCAS开始执行;如果声明出现真实值,则在SELECT……ENDSEL区间内的所有CASE……ENDCAS块后必须出现DFTCAS。
TEXT/OPER,'Xisnotequaltothe2cases'——程序执行时,字符串变量'Xisnotequaltothe2cases'的文本信息显示在电脑屏幕上
ENDCAS——结束分支语句
ENDSEL——结束循环SELECT
1.15Jump跳转语句
JUMPTO/[CONTINUEFROMHERE]
$$instructions
$$instructions
[CONTINUEFROMHERE]
$$instructions
$$instructions
1.16数学函数
ABS[X]绝对值
ACOS[X]反余弦
ASIN[X]反正弦
ATAN[X]反正切
ATAN2[Y,X]反正切,根据y/x计算,X和Y的符号代表角度象限
DTOR[X]把角度转换为弧度
RTOD[X]把弧度转换为角度
EXP[X]指数
INT(X]返回一个数的整数部分
NINT(X)返回一个数经过四舍五入后的整数
LEN[str1]返回字符串的长度
INDX[str1,str2]返回字符串的一部分在字符串中的位置
SDATE[]返回当前日期‘yyyy/mm/dd’
STIME[]返回当前时间‘hh:
mm:
ss’
COS[X]RealorDouble[角度为弧度]
SIN[X]RealorDouble[角度为弧度]
TAN[X]RealorDouble[角度为弧度]
SQRT(X]求平方根
STR[X]把一个数值转换为字符串
VAL[X]把一个字符串转化为一个数值
1.17宏(子程序)
宏可以在主程序中,也可以保存在外部程序中。
如果在主程序中,必须把宏写在程序的最前面。
M[foro)=Macro/off_x,off_y,'nome_ci'
DECL/LOCAL,DOUBLE,r_foro,z_mis
r_foro=ASSIGN/6.25
z_mis=ASSIGN/-2.5
F(@nome_ci]=FEAT/CIRCLE,INNER,CART,off_x,off_y,z_mis,0,0,1,r_foro*2
MEAS/CIRCLE,F(@nome_ci],4
GOTO/off_x,off_y,7
PTMEAS/CART,off_x+r_foro,off_y,z_mis,-1,0,0
PTMEAS/CART,off_x,off_y+r_foro,z_mis,0,-1,0
PTMEAS/CART,off_x-r_foro,off_y,z_mis,1,0,0
PTMEAS/CART,off_x,off_y-r_foro,z_mis,0,1,0
GOTO/off_x,off_y,7
ENDMES
ENDMAC
$$instructions
$$instructions
CALL/M[foro],12.5,12.5,[foro1]
$$instructions
$$instructions
通过‘EXTFIL’命令,可以调用保存在外部文件中的宏命令.
EXTFIL/DMIS,'c:
\cim\Macro.dmi'
外部的宏文件也具有“.DMI”后缀名,并以‘DMISMD’指令开头,以‘ENDFIL’指令结尾。
在宏文件中,其语法与常规的DMIS程序完全相同。
DMISMD/'module_name'
M[Macro_1)=Macro/passedtext
TEXT/OPER,CONCAT('Youpassedthefollowingtexttothe宏:
',passedtext]
ENDMAC
M[Macro_2)=Macro/num1,num2
DECL/DOUBLE,sumres
sumres=ASSIGN/num1+num2
TEXT/OPER,CONCAT('Thesumofthe2numbersis:
',STR[sumres]]
ENDMAC
ENDFIL
1.18用变量表示几何元素的名称
要用变量表示元素,测头和坐标系的名称,必须在变量名称之前加上字符串“@”。
F(@nome_po)=FEAT/POINT,CART,off_x-8.25,off_y,0,0,0,1——定义一个变量名称为@nome_po的点元素,其值为off_x-8.25,off_y,0,测量方向为0,0,1
MEAS/POINT,F(@nome_po),1——执行定义的变量名称为@nome_po的点元素指令
PTMEAS/CART,off_x-8.25,off_y,0,0,0,1——测量位置点为off_x-8.25,off_y,0,测量方向为0,0,1
ENDMES——结束测量点