3. 测量数据自动化采集基础
在 Renishaw 的坐标测量机(CMM)控制体系中,UCC2 控制器与 UCCserver 软件构成了测量数据自动化的“神经中枢”。UCC2 是硬件控制卡/控制器,负责实时驱动电机、读取光栅与测头信号;UCCserver 则是运行在上位机的服务层,负责解析 DMIS 程序、管理测头标定、调度测量任务,并把结果以结构化格式对外输出。理解这两者的分工与数据出口,是后续实现自动化采集与质量追溯的前提。
一、UCC2 与 UCCserver 的角色分工
UCC2 控制器直接连接 CMM 的伺服系统、光栅尺和测头接口。它执行的是实时运动控制与触发信号捕获:当触发式测头(如 TP20、TP200)接触工件时,测头内部电路产生一个电平跳变,UCC2 在微秒级时间内锁存当前 X/Y/Z 光栅坐标,形成“测点”。对于扫描式测头(如 SP25M、REVO),UCC2 或专用扫描模块则以固定频率连续采样,输出的是测点序列而非单点。
UCCserver 运行在 Windows 上位机,通过以太网或专用总线与 UCC2 通信。它承担三类关键任务:第一,接收并解析 DMIS 或原生测量程序;第二,管理测头库、测针配置与标定数据;第三,将测量结果写入文件或通过接口对外发布。自动化采集的核心,就是找到 UCCserver 的“结果出口”,并理解其数据格式。
关键认知:UCC2 负责“采到点”,UCCserver 负责“给出结果”。自动化采集通常不直接与 UCC2 对话,而是通过 UCCserver 提供的文件、API 或数据库接口获取结构化数据。
二、触发式测头的输出格式
触发式测头每次触发产生一个离散测点。UCCserver 对外输出的典型格式包括:
- 文本结果文件(.txt / .csv):每行一个测点或一个特征结果,字段通常包括特征名、理论值、实测值、偏差、上下公差、判定状态。
- DMIS 输出:以
FEAT/、MEAS/、OUTPUT/等语句记录测量过程与结果,适合与程序绑定追溯。 - XML / JSON:部分 UCCserver 版本支持结构化输出,便于上层 MES 或 QMS 直接解析。
以圆特征为例,触发式测量一个孔,UCCserver 可能输出如下 CSV 片段(示例数据,非实测):
Feature,Type,Nominal_X,Nominal_Y,Nominal_D,Actual_X,Actual_Y,Actual_D,Dev_X,Dev_Y,Dev_D,Status
HOLE_01,CIRCLE,50.000,30.000,10.000,50.012,29.988,10.015,0.012,-0.012,0.015,PASS
其中 Dev_D 为直径偏差,Status 由 UCCserver 根据公差自动判定。自动化脚本只需按行解析,即可把每个特征的结果写入数据库。
三、扫描式测头的输出格式
扫描式测头(如 SP25M 配合 UCCserver 的扫描模块)输出的是连续点云或按特征拟合后的结果。与触发式不同,扫描数据量可达每秒数百至数千点,因此 UCCserver 通常提供两种输出粒度:
- 原始点云:以
.xyz或.csv格式输出,每行X,Y,Z,I(I 为强度或测头偏转量),用于后续形貌分析。 - 拟合特征结果:UCCserver 在内部完成圆、圆柱、平面等拟合后,输出与触发式类似的特征级结果,但额外包含圆度、圆柱度、直线度等形状公差。
扫描结果的典型 CSV 表头可能为:
Feature,Type,Actual_X,Actual_Y,Actual_Z,Actual_D,Roundness,Cylindricity,Status
BORE_02,CYLINDER,120.005,45.002,0.000,25.008,0.004,0.007,PASS
注意:扫描式测头的“实测值”通常是拟合后的中心或直径,而非单个触点。自动化采集时,若需要原始点云,应确认 UCCserver 的扫描输出选项已开启“保存原始点数据”。
四、自动获取测量结果的三种典型路径
根据产线自动化程度,从 UCCserver 获取结果主要有以下方式:
- 监视结果文件夹:UCCserver 每完成一个程序,自动将结果文件写入指定目录。上位机脚本用文件系统监视器(如 Python 的
watchdog)监听新文件,解析后入库。这是最简单、最稳定的方式。 - 调用 UCCserver API:部分版本提供 COM 或 .NET API,可直接查询最近一次测量的特征结果,避免文件解析的延迟。
- 数据库直连:若 UCCserver 配置了结果数据库(如 SQL Server),可直接查询结果表。需注意权限与并发写入问题。
实操建议:首次部署时,先用 UCCserver 手动运行一个包含圆、平面、圆柱的 DMIS 程序,观察结果文件夹中生成的文件名规则与字段顺序。不同版本 UCCserver 的 CSV 列顺序可能不同,务必以实际输出为准,不要硬编码列号。
五、数据采集的触发与同步
自动化采集必须解决“何时取数”的问题。常见同步信号包括:
- 文件到达事件:结果文件写入完成后触发解析。需判断文件是否写完(可检查文件大小是否稳定或使用临时文件重命名机制)。
- 程序结束标志:UCCserver 在结果文件中写入
END_OF_MEASUREMENT或类似标记,脚本读到该标记后才处理。 - PLC 握手信号:若 CMM 集成在产线中,可由 PLC 在测量完成后给出一个数字量信号,触发上位机取数。
下面这张图展示了从 UCC2 采集测点,到 UCCserver 输出结果,再到自动化脚本入库的完整数据链路与关键接口。
六、采集脚本的关键实现要点
以 Python 为例,一个最小可用的采集脚本需要处理以下环节:
import csv, time, os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
RESULT_DIR = r"C:\UCCserver\Results"
class ResultHandler(FileSystemEventHandler):
def on_created(self, event):
if event.src_path.endswith(".csv"):
time.sleep(0.5) # 等待文件写入完成
with open(event.src_path, newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
if row.get("Status") in ("PASS", "FAIL"):
save_to_db(row) # 自定义入库函数
这段代码的核心逻辑是:监听结果目录,发现新 CSV 后延迟 0.5 秒再读取,避免读到半截文件;然后用 DictReader 按列名解析,而不是按列号,从而兼容不同 UCCserver 版本的列顺序差异。
常见陷阱:UCCserver 在测量过程中可能先创建文件再逐步写入。若脚本在文件创建瞬间就读取,会得到不完整数据。务必加入“文件大小稳定”或“延迟读取”判断。另外,若结果文件被 UCCserver 独占锁定,读取会抛出异常,需加入重试机制。
七、结果字段的追溯意义
自动化采集不只是“把数拿出来”,更要保证数据可追溯。建议在入库时至少保留以下字段:
| 字段 | 来源 | 追溯用途 |
|---|---|---|
| 工件序列号 | DMIS 程序变量或 PLC 传入 | 绑定具体工件 |
| 程序名 / 版本 | UCCserver 结果文件头 | 确认测量方案 |
| 测头 / 测针配置 | UCCserver 标定记录 | 排除测头差异 |
| 特征名与实测值 | 结果文件行 | 质量判定 |
| 测量时间戳 | 文件创建时间或 UCCserver 记录 | 时序追溯 |
| 判定状态 | UCCserver 公差判定 | 快速筛选超差 |
把上述字段与工件序列号关联后,即可实现“从成品追溯到测量程序、测头配置和原始测点”的闭环。触发式与扫描式测头的输出格式虽有差异,但在追溯层面统一为“特征级结果 + 原始数据引用”即可兼容。