相关文章,在仿真秀官网搜索:
RationalDMIS 2020一平面与两偏置圆找正(原点不在偏置圆上)
RationalDMIS 2020 自学习编程详解
RationalDMIS 2020 编程测量(脱机编程+在线编程)2021)
RationalDMIS 2021 Version高级教程(技术大全) 山涧果子
DMIS5.2标准如下:
使用DO循环语句可以多次反复执行同一段程序,执行的次数可以是设定的数字、变量。
DO…ENDDO语句块
DO…ENDDO语句块以DO开头,ENDDO结尾,可以反复多次执行一组程序行,支持嵌套。
格式如下:
DO/变量, 初始值, 结束值, 步长
$$ DMIS语句
ENDDO
变量:已定义的整数型变量
初始值:循环开始后变量开始计数的数值,为整数值
结束值:变量达到这个值后循环停止,为整数值
步长:变量每循环一次的增加值,可选项,不写默认为1
DO循环在DMIS语句编程中是常用的语句,其语法为:
DO/index,initial,limit,increment
循环体
ENDDO
语句中,index是一个整型变量,initial是这个变量的起始值,limit是这个变量的结束值,increment是这个变量的增幅。
从一个简单常用的例子说起,循环可能是我们在高级应用服务中运用最多的语句,DMIS标准中的循环语句为主字DO
语法格式为:
DO/变量,启始值,终止值,步幅
那么一个语句如果为DO/I,1,10,1的意义就为,执行一个循环,I的值+1,增加10次之后,循环结束。
来看一个实例。
假设我的工件有一个孔,名为CIR1,我需要把它测量5次,取其中的最小值.那么测量部分的循环语句即为
AUTO/AUTO,PROG,MAN
DO/I,1,5
MEAS/CIRCLE,CIR1,4
ENDMES
ENDDO
运行这段语句,测量机就会自动去测量圆CIR1,直到5次结束后位置。
需要注意的地方:
1.所有的变量在使用前都必须声明,上面的I是一个整型变量,每循环一次,I+1
2.每一个DO语句都必须跟一个ENDDO表示该循环的结束.
3.步幅表示每次循环I的增量,如果步副是2,那么下次I就为3,再循环一个为5,以此类推.
示例1:
DO/I,2,30,3
循环体
ENDDO
意义即为 I开始的值为2,运行第一遍循环后I的值变为5,第2遍后变为8,第三遍后变为11…………,到I的值大于30后结束循环
最后一个参数increment可以不写,默认为1。
循环,DO/I,1,10
ENDDO
作用:将DO和ENDDO中间的过程重复10次。如果把测量孔的语句放进去,结果即为连续10次测量该孔。
广泛用在有规则分布的小孔、特征点的检测方面,根据一个特征点,可以对其它所有的特征点进行检测。
关键字:DO
示例2:
下面的例子将提示语句循环执行4次,每次提示循环到第几遍
DO/KNPTN1,1,4,1
$$将数字转化为字符并与提示合并
KNPTC1=ASSIGN/CONCAT('这是第',STR(KNPTN1),'遍循环')
TEXT/OPER, KNPTC1
ENDDO
示例3:
下面的程序控制机器在500X500的范围内走S形轨迹
DECL/LOCAL,REAL,XPOS,YPOS
DECL/LOCAL,INTGR,XN,YN
DO/YN,0,500,100
$$RL函数将整数转换为实数
YPOS=ASSIGN/RL(YN)
DO/XN,0,500,100
XPOS=ASSIGN/RL(XN)
GOTO/XPOS,YPOS,50
ENDDO
ENDDO
示例4:提取数据
把一个变量赋值为任何一个参数的定义。不要忘了“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
使用“EVAL”而不是使用“OUTPUT”时,可以在不输出该数据的情况下,得到需要的数据。
DECL/DOUBLE,tol_value
T(TP)=TOL/POS,2D,1.0000
EVAL/FA(COORD3),TA(TP)
tol_value=OBTAIN/TA(TP),3
示例5;
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
示例6:
M(FIND_NOM) = MACRO/'PT_P'
DECL/LOCAL,DOUBLE,NOMPT[6],ACTPT[6]
DECL/LOCAL,INTGR,I
CONST/POINT,F(@PT_P),PROJPT,FA(PT_P),F(CADM_1)
DO/I,1,6
NOMPT[I] = OBTAIN/F(@PT_P),I+2
ACTPT[I] = OBTAIN/FA(@PT_P),I+2
ENDDO
F(@PT_P)=FEAT/POINT,CART,ACTPT[1],ACTPT[2],ACTPT[3],ACTPT[4],$
ACTPT[5],ACTPT[6]
FA(@PT_P)=FEAT/POINT,CART,NOMPT[1],NOMPT[2],NOMPT[3],NOMPT[4],$
NOMPT[5],NOMPT[6]
ENDMAC
示例7:
MODE/AUTO,PROG,MAN
DECL/COMMON,INTGR,i
DECL/COMMON,CHAR,20,K,TEMPSTRING
DO/i,1,10,1
k = assign/str(i)
tempstring = assign/concat('cir',k)
F(@tempstring) = Feat/circle,outer,cart,0,0,0,0,0,1,25
MEAS/circle,F(@tempstring),4
ENDMES
ENDDO
RationalDMIS程序编辑区右键模版里面——其他——高级语言——DO循环 ,里面有DO语句的模版供拖放参考
MODE/PROG,MAN
DO/KNPTN1, 1, 5 , 1
F(CIR1)=FEAT/CIRCLE,INNER,CART,31.5000,31.5000,-3.0000,0.0000,0.0000,1.0000, 20.0000
$$ Measurement points are created through nominal points
MEAS/CIRCLE, F(CIR1), 4
GOTO/CART, 38.5000, 31.5000, 18.0000
GOTO/CART, 38.5000, 31.5000, 17.0000
PTMEAS/CART, 41.5000, 31.5000, -3.0000, -1.0000, 0.0000, 0.0000
GOTO/CART, 37.9672, 28.8212, -3.0000
GOTO/CART, 36.4497, 26.5503, -3.0000
GOTO/CART, 34.1788, 25.0328, -3.0000
PTMEAS/CART, 31.5000, 21.5000, -3.0000, 0.0000, 1.0000, 0.0000
GOTO/CART, 28.8212, 25.0328, -3.0000
GOTO/CART, 26.5503, 26.5503, -3.0000
GOTO/CART, 25.0328, 28.8212, -3.0000
PTMEAS/CART, 21.5000, 31.5000, -3.0000, 1.0000, 0.0000, 0.0000
GOTO/CART, 25.0328, 34.1788, -3.0000
GOTO/CART, 26.5503, 36.4497, -3.0000
GOTO/CART, 28.8212, 37.9672, -3.0000
PTMEAS/CART, 31.5000, 41.5000, -3.0000, 0.0000, -1.0000, 0.0000
GOTO/CART, 31.5000, 38.5000, 17.0000
ENDMES
ENDDO
DECL/COMMON, INTGR, VAR1,VAR2
VAR2 = PROMPT/'请输入循环次数'
DO/VAR1,1,VAR2
F(CIR2)=FEAT/CIRCLE,INNER,CART,52.4500,11.5500,-3.0000,0.0000,0.0000,1.0000, 6.7960
$$ Measurement points are created through nominal points
MEAS/CIRCLE, F(CIR2), 4
PTMEAS/CART, 50.3645, 14.2328, -3.0000, 0.6137, -0.7895, 0.0000
PTMEAS/CART, 49.7672, 9.4645, -3.0000, 0.7895, 0.6137, 0.0000
PTMEAS/CART, 54.5355, 8.8672, -3.0000, -0.6137, 0.7895, 0.0000
PTMEAS/CART, 55.1328, 13.6355, -3.0000, -0.7895, -0.6137, 0.0000
ENDMES
$$请插入要循环的内容
ENDDO