在三坐标检测中,通常使用循环指令来测量零件上的均布特征。这种方案不仅提高了编程效率,同时也简化了程序结构,增加了程序的可读性。然而,在需要测量均布特征中的任意特征或一组非均布特征时,是否仍然可以使用循环来实现呢?接下来,我们以一个具体例子为例来讨论这几种情况。
第一轮:正常循环
(资料图片仅供参考)
在测量首孔之后,我们使用循环测量其余7个孔,角度间隔为45度。
MECIR (NAM=CER(1), CSY=RIF(1)) //测量首孔
DO (NAM=A, BGN=1, END=7) //循环开始
TRAOBJ (NEW=RIF(A+1), OLD=RIF(A), ANG=45,AXI=+Z, DTY=CSY) //旋转坐标系
CPYOBJ (FRM=CER(1), TO =CER(A+1)) //拷贝得到新元素
MECIR (NAM=CER(A+1), CSY=RIF(A+1)) //测量新元素
ENDDO //循环结束
这种循环语句结构简单,易于理解,适用于常规循环测量。
第二轮:孔组中的任意孔测量
在测量首孔之后,我们需要测量指定的任意孔。例如,我们以第3、6、7孔为例。
~NUM=3,6,7 //定义字符串,包含需要测量的孔序号
CvStrRea (NAM=NUM(1), STR=~NUM, SEP=’,’,REA=NUM_ALL) //将字符串转化为实数变量
MECIR (NAM=CIR(1), CSY=RIF(1)) //测量首孔
DO (NAM=No, BGN=1, END=NUM_ALL) //循环开始
A=NUM(No) //变量赋值,得到需要测量的孔位置
Ang=360/8*(A-1) //变量赋值,得到需要测量的孔角度间隔
TRAOBJ (NEW=RIF(A), OLD=RIF(1), ANG=Ang,AXI=+Z, DTY=CSY) //旋转坐标系
CPYOBJ (FRM=CIR(1), TO =CIR(A)) //拷贝测量元素
MECIR (NAM=CIR(A), CSY=RIF(A)) //测量元素
ENDDO
测量结果如下:
这种循环语句可以实现均布孔中的任意孔测量,只需在循环开始处定义需要测量的孔对应标号即可,操作简单,易于实现。
CvStrRea指令可将字符串中的数值转化为实数变量,该实数变量名带索引,并统计字符串中的实数个数,如下图:
CvStrRea (NAM=NUM(1), STR=~NUM, SEP=’,’, REA=NUM_ALL)
第三轮:非均布特征循环测量
要测量的孔为非均布孔,角度间隔如下:0°,16°,68°,100°,152°,200°,260°,330°。
该循环结构与情况二的结构相似,不同之处在于需要定义理论角度,而在循环内部旋转坐标系角度时,需要用变量赋值。
~Ang=16,68,100,152,200,260,330 //定义理论角度
CvStrRea (NAM=Ang(1), STR=~Ang, SEP=’,’,REA=Ang_ALL)
MECIR (NAM=CIR(1), CSY=RIF(1), MOD=NOE)
DO (NAM=No, BGN=1, END=Ang_ALL)
$Ang=Ang(No)
TRAOBJ (NEW=RIF(No+1), OLD=RIF(1), ANG=$Ang,AXI=+Z, DTY=CSY)
CPYOBJ (FRM=CIR(1), TO =CIR(No+1))
MECIR (NAM=CIR(No+1), CSY=RIF(No+1))
ENDDO
测量结果如下:
我们通过以上三种循环结构,可以轻松解决回转体零件中均布特征及非均布特征的编程问题。更为复杂的循环测量问题也可以在此基础上进行增加,循环结构基本一致。
标签: