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 获取结果主要有以下方式:

  1. 监视结果文件夹:UCCserver 每完成一个程序,自动将结果文件写入指定目录。上位机脚本用文件系统监视器(如 Python 的 watchdog)监听新文件,解析后入库。这是最简单、最稳定的方式。
  2. 调用 UCCserver API:部分版本提供 COM 或 .NET API,可直接查询最近一次测量的特征结果,避免文件解析的延迟。
  3. 数据库直连:若 UCCserver 配置了结果数据库(如 SQL Server),可直接查询结果表。需注意权限与并发写入问题。

实操建议:首次部署时,先用 UCCserver 手动运行一个包含圆、平面、圆柱的 DMIS 程序,观察结果文件夹中生成的文件名规则与字段顺序。不同版本 UCCserver 的 CSV 列顺序可能不同,务必以实际输出为准,不要硬编码列号。

五、数据采集的触发与同步

自动化采集必须解决“何时取数”的问题。常见同步信号包括:

  • 文件到达事件:结果文件写入完成后触发解析。需判断文件是否写完(可检查文件大小是否稳定或使用临时文件重命名机制)。
  • 程序结束标志:UCCserver 在结果文件中写入 END_OF_MEASUREMENT 或类似标记,脚本读到该标记后才处理。
  • PLC 握手信号:若 CMM 集成在产线中,可由 PLC 在测量完成后给出一个数字量信号,触发上位机取数。

下面这张图展示了从 UCC2 采集测点,到 UCCserver 输出结果,再到自动化脚本入库的完整数据链路与关键接口。

UCC2 / UCCserver 测量数据自动采集链路 物理测量层 触发式测头 TP20 / TP200 扫描式测头 SP25M / REVO 光栅尺 / 伺服 X/Y/Z 位置反馈 UCC2 控制器 实时锁存 / 采样 测点数据流 控制与服务层 UCCserver 服务 DMIS 解析 / 测头管理 特征拟合引擎 圆 / 圆柱 / 平面拟合 结果输出模块 CSV / XML / DMIS / API 结果文件 / 接口调用 自动化采集层 文件监视器 watchdog / 轮询 解析与校验 字段映射 / 公差判定 数据库入库 SQL / MES / QMS 追溯查询 按工件/时间 注:UCC2 负责实时采集,UCCserver 负责结果输出,自动化脚本通过文件或 API 获取结构化数据

六、采集脚本的关键实现要点

以 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 公差判定快速筛选超差

把上述字段与工件序列号关联后,即可实现“从成品追溯到测量程序、测头配置和原始测点”的闭环。触发式与扫描式测头的输出格式虽有差异,但在追溯层面统一为“特征级结果 + 原始数据引用”即可兼容。