4. MODUS编程与自动化输出

MODUS 是 Renishaw 三坐标测量机常用的测量与编程环境,它的核心价值不只是“驱动测头采点”,而是把测量策略、评价逻辑和结果输出组织成可重复执行的程序。对于质量追溯而言,真正需要自动化的不是单次测量动作,而是从程序启动、特征评价、公差判断到报告落盘、结构化数据导出的完整链路。本节围绕这条链路,说明如何用 MODUS 编写可复用程序,并配置自动保存报告、导出 CSV/XML/JSON,以及通过变量和条件输出控制“哪些数据在什么情况下被写出”。

一、程序结构:从测量特征到输出结果

一个可自动输出的 MODUS 程序通常包含四层内容。第一层是测量准备:选择测头系统、校验测针、建立零件坐标系。第二层是特征测量:按图纸定义测量点、扫描路径或自动特征,例如圆、平面、圆柱、位置度基准等。第三层是评价与公差:对特征计算直径、位置、形状误差,并与名义值和公差带比较。第四层是输出与归档:把评价结果写入报告文件,同时导出结构化数据,供后续 SPC 或 MES 使用。

在 MODUS 中,程序一般以类似 BASIC 的脚本形式组织,变量、循环、条件判断和文件操作都可以直接使用。下面是一个简化的程序骨架示例,用于说明变量定义、测量调用和输出控制的关系:

Dim partID As String
Dim okCount As Integer
Dim csvPath As String

partID = "PN-2024-001"
csvPath = "D:\Quality\Reports\" & partID & "_result.csv"

' 调用测量子程序
Call MeasureFeature("CIRCLE_1")
Call EvaluatePosition("CIRCLE_1", 0.05)

' 条件输出:仅当位置度超差时写报警行
If PositionDev > 0.05 Then
    WriteCSV(csvPath, partID, "POSITION", PositionDev, "NG")
Else
    WriteCSV(csvPath, partID, "POSITION", PositionDev, "OK")
End If

这段代码的关键不在语法本身,而在于它体现了自动化输出的三个要素:变量承载数据、条件决定分支、文件路径决定归档位置。实际编程时,变量名应尽量与图纸特征或质量特性对应,避免使用 a、b、c 这类无法追溯的命名。

二、自动保存报告:让每次测量都有落盘记录

MODUS 支持在程序结束时自动生成测量报告,常见格式包括 PDF、RTF 或 HTML。配置自动保存时,需要明确三件事:报告模板、保存路径和文件命名规则。报告模板决定显示哪些特征、公差和图形;保存路径通常按零件号、批次号或日期分目录;文件命名规则则建议包含零件号、序列号、时间戳和操作员,避免覆盖。

例如,可以设置路径为 D:\Quality\Reports\2024-06-15\PN-2024-001_SN001_143022.pdf。其中日期目录便于按天归档,文件名中的序列号和时间戳保证唯一性。若使用变量拼接路径,建议在程序开头统一定义根目录变量,后续只引用变量,这样更换存储位置时只需改一处。

自动保存报告时,建议同时保留原始测量点数据和评价结果。报告用于人工查看,结构化数据用于系统追溯,两者互补,不应只保留其中一种。

三、导出 CSV/XML/JSON:三种格式的定位

CSV、XML 和 JSON 在质量追溯中承担不同角色。CSV 适合表格化、轻量级的数据交换,例如把每个特征的名称、名义值、实测值、偏差和判定结果写成一行,便于 Excel 或 SPC 软件直接读取。XML 适合层级化、带标签的数据描述,例如一个零件包含多个特征,每个特征又包含多个评价项,XML 的嵌套结构能自然表达这种关系。JSON 则更适合与现代 Web 系统、MES 或数据库接口对接,字段名和值以键值对形式组织,解析方便。

在 MODUS 中导出 CSV 通常通过文件写入函数逐行拼接;导出 XML 需要按标签结构组织字符串;导出 JSON 则要注意引号、逗号和括号的配对。下面给出一个 CSV 行示例和对应的 JSON 对象示例,便于对比字段组织方式:

CSV:
PN-2024-001,SN001,CIRCLE_1,DIAMETER,10.02,10.00,0.02,OK
PN-2024-001,SN001,CIRCLE_1,POSITION,0.03,0.00,0.03,OK

JSON:
{
  "partID": "PN-2024-001",
  "serialNo": "SN001",
  "features": [
    {
      "name": "CIRCLE_1",
      "items": [
        {"type": "DIAMETER", "actual": 10.02, "nominal": 10.00, "dev": 0.02, "judge": "OK"},
        {"type": "POSITION", "actual": 0.03, "nominal": 0.00, "dev": 0.03, "judge": "OK"}
      ]
    }
  ]
}

选择哪种格式,取决于下游系统。如果只是本地留档和人工查看,CSV 足够;如果要与 MES 或质量平台集成,JSON 更常见;如果对方系统要求带标签的层级数据,则用 XML。实际项目中也可以同时导出两种格式,但应避免为了“齐全”而导出大量无人使用的字段。

四、变量与条件输出:控制数据写出的时机和内容

变量和条件输出是 MODUS 自动化从“固定模板”走向“智能判断”的关键。变量可以保存测量结果、公差上限、零件号、批次号、操作员、设备编号等。条件输出则根据变量值决定是否写出某条记录、写出什么判定、是否触发报警文件或邮件通知。

常见的条件输出策略有三种。第一种是按判定结果输出:合格写 OK 行,超差写 NG 行,并附加偏差值。第二种是按阈值分级输出:例如偏差在公差 80% 以内写“正常”,80% 到 100% 写“预警”,超过 100% 写“超差”。第三种是按批次或数量输出:每测量 N 件写一次汇总行,或只在首件和末件写完整报告。下面用一个判断路径示意变量如何影响输出分支:

MODUS 变量与条件输出判断路径 测量结果变量 PositionDev / Diameter 公差变量 TolUpper / TolLower 判定变量 Judge = OK / NG 条件判断 If PositionDev > Tol Then ... OK 分支 写 CSV 行:判定 OK 报告标记绿色 预警分支 偏差 > 80% 公差 写预警行 + 提示 NG 分支 写超差行 + 报警 触发复检标记 输出目标 自动报告 PDF/HTML | 结构化 CSV/XML/JSON | 报警日志 | MES 接口

图中展示了从测量结果变量、公差变量到判定变量,再进入条件判断并分流到 OK、预警、NG 三个输出分支的过程。实际编程时,可以把判定阈值也定义为变量,例如 warnRatio = 0.8,这样调整预警线时不需要修改多处判断语句。

五、实操建议与常见问题

编写自动化输出程序时,建议先在单件模式下验证变量取值和文件路径,再切换到自动循环。常见问题包括:路径中的反斜杠未转义导致文件写入失败;CSV 字段中包含逗号或换行符未加引号,导致列错位;JSON 最后一个字段多出逗号,导致解析失败;条件判断使用了未初始化的变量,导致分支异常。排查时可以先输出变量值到日志文件,确认数据在判断前已经正确赋值。

另一个容易被忽视的点是编码与换行。如果 CSV 需要被中文 Excel 打开,建议使用 UTF-8 with BOM 或 GBK 编码,并统一使用 CRLF 换行。JSON 和 XML 则建议使用 UTF-8 无 BOM,避免接口解析时出现多余字符。文件写入完成后,应检查文件是否存在、大小是否大于 0,并在程序中记录写入时间,便于追溯。

自动输出程序一旦投入批量运行,任何路径变更、模板修改或字段增减都可能影响下游系统。建议对程序版本、报告模板和导出格式进行编号管理,并在变更后先用试件验证,再恢复自动循环。

综合来看,MODUS 编程与自动化输出的核心思路是:用变量把测量结果和判定条件从固定文本中解放出来,用条件分支控制不同状态下的输出内容,用报告和 CSV/XML/JSON 分别满足人工查看与系统追溯的需求。掌握这条链路后,测量程序就不再只是一次性操作记录,而成为质量数据自动流转的起点。