# MES 与 CCD 视觉检测 — 接口说明
> 模块:`MesProductRecordController#ccdcheck`
> 协议:HTTP POST,`application/x-www-form-urlencoded`
> 认证:匿名接口(`application.yml` 中已配置 `anon`)
> 正式地址示例:`http://192.168.9.180:8980/js/a/mes/mesProductRecord/ccdcheck`
> 本地调试示例:`http://127.0.0.1:8980/js/a/mes/mesProductRecord/ccdcheck`
---
## 调用流程
```text
① 01 序号检查 扫码后校验工件是否允许在本工位检测
↓
② 04 测试结果上传 检测过程中/结束后上传明细(有数据就传,没有可跳过)
↓
③ 05 序号过站 上报整件 OK/NG,MES 记录过站结果
```
> 三个命令通过同一 URL、同一参数名 `commandString` 区分,首字段为命令编号(TestType)。
---
## 通用约定
### 请求
| 项目 | 说明 |
|------|------|
| URL | `/js/a/mes/mesProductRecord/ccdcheck` |
| 方法 | `POST` |
| Content-Type | `application/x-www-form-urlencoded` |
| 参数名 | `commandString`(整条命令字符串) |
### 命令字符串格式
- 字段之间用英文分号 `;` 分隔。
- 末尾建议保留分号 `;`(与驭视科技 CCD 标准格式一致)。
- 工位号格式为 `OP` 开头,可带后缀字母区分子工位,例如 `OP290B`、`OP390B`;MES 内部会规范化处理。
### 响应
返回 XML 字符串,正文为 `OK;` 或 `NG;原因;`:
```xml
OK;
```
失败示例:
```xml
NG;工件码不能为空;
```
---
## 命令字段对照(通用头部)
| 序号 | 字段名 | 01 必填 | 04 必填 | 05 必填 | 说明 |
|------|--------|---------|---------|---------|------|
| 0 | TestType | 是 | 是 | 是 | 命令编号:`01` / `04` / `05` |
| 1 | 工号 | 是 | 是 | 是 | 操作员工号 |
| 2 | 序号(工件码) | 是 | 是 | 是 | 产品条码/SN |
| 3 | 工序名称(工位号) | 是 | 是 | 是 | 如 `OP290B` |
| 4 | 资源名称 | 是 | 是 | 是 | 检测设备/工位资源名称 |
| 5 | 设备编码 | 否 | 否 | 否 | 无则传空 |
| 6 | 工治具编码 | 否 | 否 | 否 | 无则传空 |
---
## 1. 序号检查(TestType = 01)
检测前校验工件是否允许在当前工位进行 CCD 检测(工艺路线、质量状态等)。
### 命令格式
```text
01;工号;序号;工序名称;资源名称;设备编码;工治具编码;
```
共 **8** 段(含末尾空段),`split(";", -1)` 后长度为 8。
### 参数示例
```bash
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesProductRecord/ccdcheck' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'commandString=01;EMP001;502402660085119990EBMA100082;OP390;Res001;MACHINE01;Fixture001;'
```
### 返回说明
| 返回内容 | 含义 |
|----------|------|
| `OK;` | 允许检测 |
| `NG;{原因};` | 不允许检测,原因由 MES 工艺/质量校验返回 |
### 备注
- 工号、序号、工序名称、资源名称为必填。
- 设备编码、工治具编码为非必填,没有时传空即可。
---
## 2. 测试结果上传(TestType = 04)
上传 CCD 各测点明细数据,写入 `mes_product_ccd` 表。**有明细就传,没有可不调用。**
### 命令格式
```text
04;工号;序号;工序名称;资源名称;设备编码;工治具编码;测试开始时间;测点明细;
```
共 **10** 段(含末尾空段)。
其中 **测点明细**(第 9 段,`parts[8]`)格式:
```text
序号&拍照序号&检测名称&检测参数&检测值&检测结果&检测时间,序号&拍照序号&...
```
- 多个测点之间用英文逗号 `,` 分隔。
- 单个测点内 7 个字段之间用 `&` 分隔。
- `检测时间` 格式:`yyyy-MM-dd HH:mm:ss`
- `检测结果` 取值:`OK` / `NG`
### 测点字段说明
| 字段 | 说明 | 示例 |
|------|------|------|
| 序号 | 测点编号 | `1` |
| 拍照序号 | 拍照区序号 | `2` |
| 检测名称 | 检测项名称 | `拉铆螺母` |
| 检测参数 | 规格/阈值描述 | `直径:3.5~15高度:1~10` |
| 检测值 | 实测值 | `直径:6.50\|高度:2.22\|` |
| 检测结果 | OK/NG | `OK` |
| 检测时间 | 该测点检测时间 | `2024-05-06 15:19:07` |
### 参数示例(单条测点)
```bash
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesProductRecord/ccdcheck' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'commandString=04;15112184644;502402660085119990E4GA100296;OP290B;OP290B;;;20240506120729;1@1@二维码有无@有无:1~1@502402660085119990E4GA100296重复扫描@OK@2024-05-06 12:03:44;'
```
### 参数示例(多条测点)
```text
04;15112184644;502402660085119990E54A100352;OP290B;OP290B;;;20240506152248;1@1@二维码有无@有无:1~1@502402660085119990E54A100352@OK@2024-05-06 15:19:02,2@2@拉铆螺母@直径:3.5~15高度:1~10@直径:10.59|高度:2.21|@OK@2024-05-06 15:19:07;
```
### 返回说明
| 返回内容 | 含义 |
|----------|------|
| `OK;` | 明细保存成功 |
| `NG;参数错误3;` | 分段数量不是 10 |
| `NG;参数错误4;` | TestType 不是 04 |
| `NG;参数错误5;` | 某个测点字段数不是 7 |
| `NG;检测时间格式错误;` | 检测时间格式不正确 |
| `NG;工件码不能为空;` | SN 为空 |
| `NG;工位号不能为空;` | 工位号为空 |
### 备注
- `测试开始时间` 字段(第 8 段)格式为 `yyyyMMddHHmmss`,当前 MES 实现主要解析第 9 段测点明细,开始时间作记录参考。
- 设备编码、工治具编码无值时保持空位(连续 `;`)。
---
## 3. 序号过站(TestType = 05)
整件检测完成后,向 MES 上报最终 OK/NG 并执行过站。
### 命令格式
```text
05;工号;序号;工序名称;资源名称;设备编码;工治具编码;测试结果;不良现象;
```
共 **10** 段(含末尾空段)。
| 字段 | 说明 |
|------|------|
| 测试结果(第 8 段) | 必填,`OK` 或 `NG` |
| 不良现象(第 9 段) | NG 时必填,填写最主要的一条不良描述;OK 时传空 |
### 参数示例
**过站 OK:**
```bash
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesProductRecord/ccdcheck' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'commandString=05;15112184644;151245P00001213100100025072501024;OP390B;OP390B;;;OK;;'
```
**过站 NG:**
```text
05;EMP001;SN001;Station001;Res001;MACHINE01;Fixture001;NG;无法开机;
```
### 返回说明
| 返回内容 | 含义 |
|----------|------|
| `OK;` | 过站成功 |
| `NG;结果不能为空;` | 未传测试结果 |
| `NG;结果错误;` | 测试结果不是 OK/NG |
| `NG;操作失败;` | MES 内部过站处理异常 |
### 备注
- 工号、序号、工序、资源名称为必填。
- 设备编码、工治具编码为非必填,没有时传空。
- NG 时不良现象必须有值,且建议只传一条最重要的描述。
---
## 附录:标准模板示例
以下为 Excel 原始标准格式示例,便于联调对照。
### 01 模板
```text
01;EMP001;SN001;Station001;Res001;MACHINE01;Fixture001;
```
### 04 模板
```text
04;EMP001;SN001;Station001;Res001;MachineNo;Fixture001;20181002131019;序号1&拍照序号1&检测名称1&检测参数1&检测值1&检测结果1&2024-11-11 11:11:11,序号2&拍照序号2&检测名称2&检测参数2&检测值2&检测结果2&2025-10-22 22:22:22;
```
### 05 模板
```text
05;EMP001;SN001;Station001;Res001;MACHINE01;Fixture001;OK;;
05;EMP001;SN001;Station001;Res001;MACHINE01;Fixture001;NG;无法开机;
```
---
## 附录:MES 侧数据落库
| 命令 | 处理逻辑 | 数据表 |
|------|----------|--------|
| 01 | 调用 `checkQualityCommon` 做进站校验 | — |
| 04 | 批量插入测点明细 | `mes_product_ccd` |
| 05 | 调用 `updateRecordResult` 写过站记录 | 生产记录相关表 |
`mes_product_ccd` 主要字段:工件码、产线编号、工位号、检测设备名称、拍照区序号、测点编号、检测名称、检测参数、检测值、检测结果、检测时间。
---
*文档来源:`docs/ccd/MES与CCD接口.xlsx`(标准格式页),并结合 `MesProductRecordController` / `MesProductCcdService` 实现整理。*