最近更新于 2024-12-15 20:28
前言
2024.12.4
公司暂时没有接新品了,我也基本没有什么大工程的工作要做了,手头上的工作也逐步开始完结,趋向于空闲了,可以开始推进学习进程了。现在的计划目标是学习数控车床,加工中心,三坐标,先起步车床和三坐标吧,这里就作为三坐标的学习记录。
现在的感觉就是“开头难”,自学起步挺难的,不像以前搞计算机编程,要学习的话,网上大把的资料,各语言也有很多共同点,有一门基础上手其它的很快 ,只要掌握基本语法,很快就能动手。搞机加工,感觉专业壁垒很高,知识散而杂,网上可以查到的资料也少,起步都要懵逼很久,就感觉摸不着头脑,找不到方向,不知道从哪里开始,要做什么?
海克斯康的软件相关的资料就很少,遇到问题在百度、必应、谷歌搜中文基本没有,搜英文也没有,去海克斯康的社区搜英文,个别能遇到相同的提问,但是没有合适的回答,这种感觉就是用户基数太小了,行业圈子小,用的人比较少,就算有大佬,可能也不怎么在网上活跃。
至于公司里的三坐标测量员,接触后只感觉他们对于计算机不熟悉,对编程不熟悉,只是因为常年使用,熟悉在线连机测量,知道一般怎么测,怎么建坐标系,怎么校验测针,简单的增删修改测量项,就没有更深入多少了。
2024.12.12
最开始是没有分篇章的,只是写到现在字符数有三万多了,博客这里的编辑器都有点承受不了了,编辑状态打字都能明显感觉到延迟,一直在卡顿。我就把文章拆分了,不然编辑起来都很难受。
创建脱机程序
运行软件
右键以管理员身份运行 PC-DMIS 脱机模式(PC-DMIS 使用的某些文件放置在普通用户无法访问的目录,所以建议直接用管理员身份运行,不然后续可能遇到意外的错误)
如果不想每次都右键运行,可以在快捷方式右键-属性-兼容性里勾选以管理员身份运行此程序,后续直接双击运行就是管理员身份
我在多个系统上安装使用过,有些在运行后会在左上角显示一个方框,要点确定才会打开 PC-DMIS 界面,有些运行后直接就打开界面了。
新建程序
点新建程序
给程序设置一个名字;国内一般使用公制单位,选毫米;没连三坐标测量设备,接口默认就是脱机。
温度补偿暂时不用管
配置测头
添加测量机
插入-硬件定义-测量机
有需要也可以添加夹具(插入-硬件定义-快速夹具),可以导入自己的夹具模型,这里只是学习编程,就不用夹具了。只是待测量模型可能就是悬空的。
导入模型
文件-导入
根据自己的模型格式选择,这里就用 PC-DMIS 提供的示例模型,选 IGES
HexMI_DemoBlock_Large.IGS
点处理,再点确定
校验测针(待研究)
赋值
插入-赋值
赋给后是变量名,赋自后是要赋值的内容
操作数类型
操作数类型有 7 种:整数、实数、字符串、点、特征指针、数组或函数,下面的 V1 到 V7 分别对应。
①整数如其名;②实数则类似一般编程语言中的浮点数,即小数;③字符串也如其名;④点也如其名,就是点坐标;⑤特征指针可以用来指向一个特征,比如这里测了一个平面,用 V5 变量指向这个平面,和 C/C++ 的指针类似;⑥数组和一般编程语言里的类似概念;⑦函数也和一般编程语言里概念相似。
变量 V5 是指向平面1这个特征的,可以通过 V5 来获取平面1的 X 坐标,也可以直接从平面 1 获取这个特征包含的信息
这里使用函数 V7,传入 10 和 2,会分别给 X 和 Y,即计算 2 * 10 + 2,得到 22
数组动态特性
PC-DMIS 中的数组可以动态扩容,访问越界也不会报错。
我创建的 V1 数组只有两个元素,通过 LEN 也获取到了大小,但是我尝试访问索引 1000 也没出错,结果为 0。可以看作是无限大小的数组了,没有赋值的索引位置值默认为 0。
赋值/V1=ARRAY(0, 0)
注释/操作者,否,全屏=否,自动继续=否,
"数组V1的大小="+LEN(V1)+",数组V1[1000]="+V1[1000]
如果要追加元素,继续往后续索引位置赋值即可。
我创建的时候只有两个元素,然后直接在索引 100 的位置赋值后,LEN 查看数组大小就变成了 100,查看索引 100 的位置确实成功赋值了,查看索引 99 的位置得到值为 0,因为这个位置没有赋值,默认值就是 0。
赋值/V1=ARRAY(0, 0)
赋值/V1[100]=99
注释/操作者,否,全屏=否,自动继续=否,
"数组V1的大小="+LEN(V1)+",数组V1[100]="+V1[100]+",数组V1[99]="+V1[99]
注释
插入-报告命令-注释
这里的“注释”和一般编程语言里的注释不一样,这里的注释更像是消息框、确认对话框等集合。注释类型:
- 操作者:消息框,在测量程序执行到这个地方会弹出一个消息框;
- 报告:注释内容会显示到测量报告中;
- 输入:输入框,测量程序执行到这个地方,会弹出输入框,可以向测量程序输入内容;
- 文档:这个和一般编程语言里的注释差不多,就是用来给程序添加说明的,增强程序可读性;
- 是/否:确认框,会弹出窗口,可以选择是否,程序内可以获取结果;
- 读数:这里的注释内容可以显示在测头读数窗口中。
显示变量值
字符串内容用英文引号(半角引号),字段之间拼接使用加号。数组使用中括号下标访问元素,下标从1开始,一般编程语言都是 0 下标开始,我接触过的似乎只有 MATLAB 也是从 1 开始的下标。数字要进行字符串拼接,需要先转字符串,不然会直接进行加法运算。
"V1的值为"+V1
V2[1]+V2[2]+V2[3]
STR(V2[1])+STR(V2[2])+STR(V2[3])
V3[1]+V3[2]+V3[3]+V3[4]+V3[5]+V3[6]
只是我发现一个问题,注释内容只有在命令编辑窗口中写入的时候可以正常引用变量值,但如果是在注释窗口中(下图),写入的,执行的时候无法引用变量值,不知道是不是有什么 bug
输入框
通过注释输入的内容可以通过 .INPUT 引用
C1 =注释/输入,否,全屏=否,
"请输入内容:"
注释/操作者,否,全屏=否,自动继续=否,
"用户输入的内容为:" + C1.INPUT
是否框
C1 =注释/是否,否,全屏=否,自动继续=否,
"请确认状态,是或否?"
注释/操作者,否,全屏=否,自动继续=否,
"状态为:" + C1.INPUT
流程控制命令
插入-流程控制命令
基础
运算符
符号 | 含义 |
---|---|
+ | 加号 |
– | 减号 |
* | 乘号 |
/ | 除号 |
^ | 幂 |
% | 余数 |
! | 逻辑非 |
== | 判断相等 |
<> | 判断不等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
AND | 逻辑与 |
OR | 逻辑或 |
( ) | 优先计算括号内 |
函数
数学函数
函数 | 含义 |
---|---|
ABS | 绝对值 |
ROUND | 取整 |
SQRT | 平方根 |
ACOS | 反余弦 |
ASIN | 反正弦 |
ATAN | 反正切 |
COS | 余弦 |
SIN | 正弦 |
TAN | 正切 |
DEG2RAD | 角度转弧度 |
RAD2DEG | 弧度转角度 |
数组函数
函数 | 含义 |
---|---|
EQUAL | 判断两个数组是否相等 |
LEN | 返回数组元素个数 |
MAX | 返回数组中最大元素 |
MIN | 返回数组中最小元素 |
HIT[] | 触测点 |
SORTUP | 对数组升序排序 |
SORTDOWN | 对数组降序排序 |
MAXINDEX | 返回数组最大值索引 |
MININDEX | 返回数组最小值索引 |
MAXINDICES | 返回数组从大大小排序的索引值 |
MININDICES | 返回数组从小到大排序的索引值 |
字符串函数
函数 | 含义 |
---|---|
SYSTEMDATE | dd 日期几号;ddd 星期几;M或MM或MMM或MMMM 月;y或yy或yyy或yyyy 年 |
SYSTEMTIME | h或hh 12小时制;H或HH 24小时制;m或mm 分钟;s或ss秒;t 时间标记A/P;tt时间标记AM/PM |
LOWERCASE | 创建小写字符串 |
UPPErCASE | 创建大小写字符串 |
获取程序信息 GEtPRogrAMINFO
……
条件语句
条件判断这里和一般编程语言的使用逻辑是一样的
IF …
IF 可以独立使用,只有 IF 后的条件成立,后续的命令才执行。
下面的例子中如果输入的值大于 0,就会显示“输入值大于0”
C1 =注释/输入,否,全屏=否,
请输入 一个数字
赋值/INPUT_VALUE=DOUBLE(C1.INPUT)
IF/INPUT_VALUE > 0
注释/操作者,否,全屏=否,自动继续=否,
输入值大于0
END_IF/
IF … ELSE …
ELSE 可以在 IF 后使用,在 IF 条件不满足的时候就执行 ELSE 后的语句。
下面的例子,在上面的基础上修改了,在输入非 0 值显示非正数
C1 =注释/输入,否,全屏=否,
请输入 一个数字
赋值/INPUT_VALUE=DOUBLE(C1.INPUT)
IF/INPUT_VALUE > 0
注释/操作者,否,全屏=否,自动继续=否,
输入值大于0
END_IF/
ELSE/
注释/操作者,否,全屏=否,自动继续=否,
输入值非正数
END_ELSE/
IF … ELSE_IF … (ELSE_IF …)
ELSE_IF 可以在 IF 后使用,在 IF 条件不满足时,再判断是否满足 ELSE_IF 条件,ELSE_IF 可以有多个,不满足条件就继续往后
下面例子判断输入值时正数或为0
C1 =注释/输入,否,全屏=否,
请输入 一个数字
赋值/INPUT_VALUE=DOUBLE(C1.INPUT)
IF/INPUT_VALUE > 0
注释/操作者,否,全屏=否,自动继续=否,
输入值大于0
END_IF/
ELSE_IF/INPUT_VALUE == 0
注释/操作者,否,全屏=否,自动继续=否,
输入值为 0
END_ELSEIF/
下面例子判断输入值是否为正数,是否为0,是否为不小于-1的负数
C1 =注释/输入,否,全屏=否,
请输入 一个数字
赋值/INPUT_VALUE=DOUBLE(C1.INPUT)
IF/INPUT_VALUE > 0
注释/操作者,否,全屏=否,自动继续=否,
输入值大于0
END_IF/
ELSE_IF/INPUT_VALUE == 0
注释/操作者,否,全屏=否,自动继续=否,
输入值为 0
END_ELSEIF/
ELSE_IF/INPUT_VALUE < 0 AND INPUT_VALUE >= -1
注释/操作者,否,全屏=否,自动继续=否,
输入值为负数,且不小于-1
END_ELSEIF/
IF … ELSE_IF … ELSE …
ELSE 也可以在 ELSE_IF 后使用,当 IF 和 ELSE_IF 的条件都不满足时执行
C1 =注释/输入,否,全屏=否,
请输入 一个数字
赋值/INPUT_VALUE=DOUBLE(C1.INPUT)
IF/INPUT_VALUE > 0
注释/操作者,否,全屏=否,自动继续=否,
输入值大于0
END_IF/
ELSE_IF/INPUT_VALUE == 0
注释/操作者,否,全屏=否,自动继续=否,
输入值为 0
END_ELSEIF/
ELSE_IF/INPUT_VALUE < 0 AND INPUT_VALUE >= -1
注释/操作者,否,全屏=否,自动继续=否,
输入值为负数,且不小于-1
END_ELSEIF/
ELSE/
注释/操作者,否,全屏=否,自动继续=否,
输入值为小于-1的负数
END_ELSE/
循环
循环也和一般编程语言的使用逻辑一样
WHILE
WHILE 会先判断条件是否满足,如果满足就执行,直到不满足才停止
下面的例子,创建两个元素个数相同的数组V1、V2,然后循环遍历两个数组,依次两两相加,最后显示结果
赋值/V1=ARRAY(1,2,3,4,5,6)
赋值/V2=ARRAY(23,24,45,45,67,98)
赋值/S=ARRAY(0)
赋值/COUNT=1
WHILE/COUNT <= LEN(V1)
赋值/S[COUNT]=V1[COUNT]+V2[COUNT]
赋值/COUNT=COUNT + 1
END_WHILE/
注释/操作者,否,全屏=否,自动继续=否,
S
DO … UNTIL
DO … UNTIL 会先执行,再判断条件,直到条件满足就停止
赋值/V1=ARRAY(1,2,3,4,5,6)
赋值/V2=ARRAY(23,24,45,45,67,98)
赋值/S=ARRAY(0)
赋值/COUNT=0
DO/
赋值/COUNT=COUNT+1
赋值/S[COUNT]=V1[COUNT]+V2[COUNT]
UNTIL/COUNT >= LEN(V1)
注释/操作者,否,全屏=否,自动继续=否,
S
多路分支语句 SELECT CASE
这个和 C 系语言里的 switch 差不多功能,功能上用条件语句也能实现。
下面例子匹配输入,输入中文数字一、二、三中的一个,注释会弹出显示
C1 =注释/输入,否,全屏=否,
请输入中文数字一到三
SELECT/C1.INPUT
CASE/"一"
注释/操作者,否,全屏=否,自动继续=否,
输入了 1
END_CASE/
CASE/"二"
注释/操作者,否,全屏=否,自动继续=否,
输入了 2
END_CASE/
CASE/"三"
注释/操作者,否,全屏=否,自动继续=否,
输入了 3
END_CASE/
DEFAULT_CASE/
注释/操作者,否,全屏=否,自动继续=否,
输入了其它
END_DEFAULTCASE/
END_SELECT/
GOTO 跳转
这个和 C 系的 goto 跳转功能差不多,PC-DMIS 里没有 continue 和 break,要在循环里跳过和结束就没有直接的实现方式,可以用 GOTO 实现。
下面的例子,用一个数组保存值,如果循环到偶数就跳过不记录
赋值/RESULT=ARRAY(0)
赋值/COUNT=0
WHILE/COUNT < 9
IF/COUNT % 2 == 0
转到/CONTINUE
END_IF/
赋值/RESULT[COUNT]="数字"+COUNT
CONTINUE =标号/
赋值/COUNT=COUNT+1
END_WHILE/
注释/操作者,否,全屏=否,自动继续=否,
RESULT
脱机编程
在已经配置测针和导入模型之后,切换到程序模式
如果没看到按钮,在空白处右键,勾选图形模式就有了(其它菜单可以按需勾选,后面可能也要用)
采集特征的操作
采集特征:按住Shift
不放,用鼠标点选平面/孔等,再点✔确认特征
采集群孔:点选孔所在平面,再按住Shift
选择孔会全选相同大小的孔
采集点:按住Shift
+Ctrl
不放,鼠标点选
采集同一空间平面上的不连续面:按住Shift
不放,点住一个平面不放,拖动到同一空间平面上的其它面
菜单勾选了 QuickMeasure 的话,还可以使用自动特征,这个是指定特征类型,再去采点。前面快捷键操作的方式是直接去采点,由PC-DMIS识别特征是什么类型,但实际操作中一些复杂的形状可能识别错误,就可以先指定特征类型再去采集。
建立工件坐标系
三维坐标系有 6 个自由度,
三轴平移:TX、TY、TZ(决定原点位置)
三轴旋转:RX、RY、RZ(决定坐标轴方向)
建立坐标系就是把这 6 个自由度都固定,这样坐标系在工件上的位置就是确定的。
示例 面-面-点 321 建系
采集上平面为平面1,采集正对的平面为平面2,采集左侧上一个点为点1。
新建坐标系
插入-坐标系-新建
确定RX、RY(X轴旋转、Y轴旋转)【确定Z轴方向】:选平面1,选Z负(正负可以自己决定,只是正反方向而已,后同),点找正
确定TZ(Z轴偏移):选平面1,选Z,点原点
确定RZ(Z轴旋转)【确定X轴和Y轴方向】:选平面2,围绕Z正旋转到Y负,点旋转
确定TY(Y轴偏移):选平面2,选Y,点原点
确定TX(X轴偏移)【确定原点位置】:选点1,选X,点原点
321 这个名字就来源于,第1个特征确定2个轴旋转和1个轴偏移,即为 3;第2个特征确定1个轴旋转和1个轴偏移,即为 2,第3个特征确定1个轴偏移。
原点和坐标轴方向确定后,图示的坐标系就不会浮动了(可以参考这个动画效果,确定一个自由度它就少一个浮动方向)
示例 面-圆柱-圆柱 建系
采集上平面为平面1,采集中心大孔为柱体1,采集一个小孔为柱体2
确定RX、RY【确定Z轴方向】:选平面1,选Z正,点找正
确定TZ:选平面1,选Z,点原点
确定RZ【确定X轴和Y轴方向】:选柱体1和柱体2,围绕Z正旋转到Y正,点旋转
确定TX、TY【确定原点】:选柱体1,选X和Y,点原点
循环控制
采集圆周阵列特征
这里有一圈小孔,采用循环采集(简化程序)
在中心大孔位置建立坐标系
插入-流程控制命令-Looping
这一圈小孔有8个,起始1,终止8,计划从右侧小孔开始逆时针采集,则跳过第3个(建坐标系的时候已经采集了,如果要跳过多个则用英文逗号间隔)。建立的坐标系在这8个孔的中心,那么偏置只需要角度,每次偏置360°➗8个=45°,X、Y、Z方向不需要偏置,然后设置变量标识,这个标识是循环执行号数的变量,在循环中访问这个值的话,就可以知道当前是在循环第几个特征。如果终止号是8,执行完这个标识的值就是9,如果终止号是5,执行完就是6。可以用于获取均布特征数量。
接着采集右侧孔,这个孔就作为第一个孔,然后插入-流程控制命令-End loop结束循环,循环命令会以采集的这个孔开始按照设置开始偏置采集其它的。
ARRAY_HOLES=循环/开始,标识=是,编号=8,开始=1,跳过=3,,
偏置:X 轴=0,Y 轴=0,Z 轴=0,角度=45
柱体3 =特征/触测/圆柱/默认,直角坐标,内,最小二乘方
理论值/<41,0,0>,<0,0,1>,16.4,20
实际值/<41,0,0>,<0,0,1>,16.4,20
目标值/<41,0,0>,<0,0,1>
起始角=0,终止角=360
角矢量=<1,0,0>
方向=逆时针
显示特征参数=否
显示相关参数=是
测点数=5,层数=3,深度=2,终止补偿=2,螺距=0
采样方法=样例点
样例点=3,间隙=0
避让移动=两者,距离=10
查找孔=无效,出错=否,读位置=否
显示触测=否
循环/终止
遍历获取群孔的X坐标
赋值/CYLINDER_DIAMETER=ARRAY(0)
赋值/COUNT=1
WHILE/COUNT < ARRAY_HOLES
赋值/CYLINDER_DIAMETER[COUNT]=柱体3[COUNT].X
赋值/COUNT=COUNT+1
END_WHILE/
注释/操作者,否,全屏=否,自动继续=否,
CYLINDER_DIAMETER
第3个孔没有采集,发现它的值和第2个孔是一样的,这个需要注意
采集线性阵列特征
我这里自己画了一个模型,两排孔,两排之间间隔50,每排4个孔,孔孔间距25。
单个循环控制可以线性均布,如果是矩形阵列,那就可以再嵌套一层循环。一层循环控制行,一层循环控制列。
下面例子中 V1 循环控制换行,1 开始 2 结束,循环一次 y 偏移 -50
V2 循环控制换列,1 开始 4 结束,循环一次 x 偏移 25
最终的测量结果都保存在柱体1这个特征中,通过中括号访问[内层循环索引,外层循环索引],注意这里是反着的,然后我创建了一个二维数组(数组里面放数组),用循环遍历,将行列进行互换后存储
V1 =循环/开始,标识=是,编号=2,开始=1,跳过=,
偏置:X 轴=0,Y 轴=-50,Z 轴=0,角度=0
V2 =循环/开始,标识=是,编号=4,开始=1,跳过=,
偏置:X 轴=25,Y 轴=0,Z 轴=0,角度=0
柱体1 =特征/触测/圆柱/默认,直角坐标,内,最小二乘方
理论值/<12.5,75,100>,<0,0,1>,20,50
实际值/<12.5,75,100>,<0,0,1>,20,50
目标值/<12.5,75,100>,<0,0,1>
起始角=0,终止角=360
角矢量=<1,0,0>
方向=逆时针
显示特征参数=否
显示相关参数=是
测点数=5,层数=3,深度=2,终止补偿=2,螺距=0
采样方法=样例点
样例点=3,间隙=0
避让移动=两者,距离=10
查找孔=无效,出错=否,读位置=否
显示触测=否
循环/终止
循环/终止
赋值/RESULT=ARRAY(ARRAY(0))
赋值/ROW=1
赋值/COL=1
WHILE/ROW < V1
WHILE/COL < V2
赋值/RESULT[ROW,COL]=柱体1[COL,ROW].X
赋值/COL=COL+1
END_WHILE/
赋值/ROW=ROW+1
赋值/COL=1
END_WHILE/
注释/操作者,否,全屏=否,自动继续=否,
RESULT
子程序
插入子程序和调用子程序(插入-流程控制命令)
子程序的概念比较像一般编程语言中自定义函数
简单使用
子程序/FUNCTION1,
=
注释/操作者,否,全屏=否,自动继续=否,
这是子程序1
终止子程序/
子程序/FUNCTION2,
=
注释/操作者,否,全屏=否,自动继续=否,
这是子程序2
终止子程序/
CS1 =调用子程序/FUNCTION1,:,
CS2 =调用子程序/FUNCTION2,:,
子程序传参
创建子程序 FUNCTION1,然后有两个参数 VAL1 和 VAL2,分别提供参数默认值为 VAL1_DEFAULT 和 VAL2_DEFAULT
主程序调用子程序,传入一个参数 "IYATT-yx",可以看到注释显示的结果,传进去的参数被显示了,但没有提供第2个参数,就显示的参数默认值
子程序/FUNCTION1,
VAL1 = "VAL1_DEFAULT" : 值1,
VAL2 = "VAL2_DEFAULT" : 值2,
=
注释/操作者,否,全屏=否,自动继续=否,
"值1="+VAL1
"值2="+VAL2
终止子程序/
CS1 =调用子程序/FUNCTION1,:"IYATT-yx",,
托盘测量(研究中)
检测报告模板
标签模板
文件路径
检测报告中每个模块都标签模板插值的,打开检测报告,将鼠标停留在模块上就会显示
比如鼠标放在标签头上的时候,显示的是 FIEL_HEADER.LBL
鼠标放在位置度部分的时候,显示的 Line2_pos.lbl
放在这个尺寸位置的时候显示的 Line1.lbl
标签模板的路径查看:
编辑-参数设置-设置搜索路径
只要没改过测头路径,默认的标签模板也在这个路径下面的 Reporting 里面
修改文件
编辑标签模板
文件-报告-编辑-标签模板
示例 修改文件头模板
建议备份副本进行修改,选中 FILE_HEADER.LBL 按 Ctrl
+C
复制,再按 Ctrl
+V
粘粘得到副本,选择副本进行编辑
在预览界面双击进入编辑状态
可以看到这其实就是一个表格,每个单元格按照指定格式取值,
在某个单元格上右键可以进入更详细的编辑状态
这里我把序列号的值改为取变量 V1 的值
用下面表达式获取变量值
=VARIABLE("变量名")
按Ctrl
+S
保存,然后关闭标号模板编辑器窗口
在报告上右键将文件头模板修改为我修改的文件
这时候鼠标停留在文件头位置,提示就变成了我设置的文件
(PC-DMIS 可能有什么 bug,修改后的文件名需要和修改前不同,如果不改文件名复制到其它目录,在修改模板更换文件的时候不会生效,必须文件名不同才能修改成功)
然后在程序中插入一个 V1 变量,注意插入的位置要在加载测头和温度补偿的前面,报告里的文件头大概就是在温度补偿这个位置开始渲染的,在之后才赋值,文件头已经渲染好了,就只能读取到上一次执行程序时变量的值
然后执行程序,可以看到序列号改成我这里变量的值了
修改日期、时间案例
下面给一个可以修改报告日期、时间的例子
修改文件头标签模板,把日期位置改为 =VARIABLE("DATE"),时间位置改为 =VARIABLE("TIME"),即日期来自 DATA 变量,时间来自 TIME 变量。
编写程序
有需要可以使用注释输入,这样执行的时候填进去就行
赋值/YEAR=2010
赋值/MONTH="五月"
赋值/DAY=15
赋值/HOUR=18
赋值/MINUTE=23
赋值/DATE=MONTH+" "+DAY+", "+YEAR
赋值/TIME=HOUR+":"+MINUTE
示例 修改位置度模板
显示值
位置度模板用的 LINE2_POS.lbl,拷贝副本进行编辑,下面是列数据原值
=TOL(LINE2_FEATNAME:N,LINE2_OUTTOL:N,0.0,0.0)
=TOL(LINE2_NOMINAL:N,LINE2_OUTTOL:N,0.0,0.0)
=TOL(LINE2_PLUSTOL:N,LINE2_OUTTOL:N,0.0,0.0)
=TOL(LINE2_MINUSTOL:N,LINE2_OUTTOL:N,0.0,0.0)
=TOL(LINE2_MEAS:N,LINE2_OUTTOL:N,0.0,0.0)
=TOL(LINE2_DEV:N,LINE2_OUTTOL:N,0.0,0.0)
=TOL(LINE2_OUTTOL:N,LINE2_OUTTOL:N,0.0,0.0)
=TOL(LINE2_BONUS:N,LINE2_OUTTOL:N,0.0,0.0)
=TOL(LINE2_DEVANG,LINE2_OUTTOL:N,0.0,0.0)
TOL 函数是用来着色的,第一个参数是要着色的对象,这里就是要显示的值(特征名、标称值、上差、下差、测量值、偏差值、超差值、补偿值、偏差角度);
第二个参数都统一放的超差值,只要这个值大于 0,就会进行特殊着色,默认是红色。
后面两个参数默认值是 0.0,就不知道是什么了,用不上就暂时先不管。
然后可以看到存在“字段:N”这种写法,这就是用来遍历的,详细地可以参考后面篇章的 Python 二次开发部分。有些情况下,同种形位公差评价了多个特征,就会一起显示在下面,N 就是遍历第几个。
现在需要替换成呈现自定义的数据,我用一个检测程序中的位置度评价测试,评价了 10 个圆。
我只需要自定义测量值、偏差值、超差值,就创建了 V1、V2、V3 三个变量(数组),分别用于插入模板
赋值/V1=ARRAY(1.1, 2.2, 3.3, 0.15, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10)
赋值/V2=ARRAY(1.1, 2.2, 3.3, 0.15, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10)
赋值/V3=ARRAY(0.9, 1.9, 2.9, 0, 4.9, 5.9, 6.9, 7.9, 8.9, 9.9)
修改副本模板文件,分别替换为
=TOL(LINE2_FEATNAME:N,VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
=TOL(LINE2_NOMINAL:N,VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
=TOL(LINE2_PLUSTOL:N,VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
=TOL(LINE2_MINUSTOL:N,VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
=TOL(VARIABLE("V1["+N+"]",ID:N),VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
=TOL(VARIABLE("V2["+N+"]",ID:N),VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
=TOL(VARIABLE("V3["+N+"]",ID:N),VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
=TOL(LINE2_BONUS:N,VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
=TOL(LINE2_DEVANG:N,VARIABLE("V3["+N+"]",ID:N),0.0,0.0)
TOL 第二个参数用于控制着色,报告中如果某一个特征测量超差,整行都会变红,所以全部都要统一换成自定义的超差值,格式按照 VARIABLE("变量名["+N+"]",ID:N) 写,这样就能遍历自定义数组
然后测量值、偏差值、超差值所在列的 TOL 第一个参数要替换成自定义数据,以显示自己的数据。
然后在报告上更换模板为修改后的副本,可以看到效果。
ActiveX 控件图形(研究中)
报告中这类图形就是 ActiveX 实现的