首页/文章/ 详情

RationalDMIS 2020 DO 循环

1年前浏览287

相关文章,在仿真秀官网搜索:

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


来源:RationalDMIS测量技术
ACT控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-07-15
最近编辑:1年前
山涧果子
大专 签名征集中
获赞 203粉丝 48文章 1203课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈