Files
Axi_Omron/docs/2026-05-17-pcb-check-final-workflow.md
yunxiao.zhu c67509ec82 ✨ feat(file-check): 添加 PLC 应答后命中文件删除
* 新增默认关闭的删除开关,仅在收到 PLC 放行应答后执行

* 本地与 SFTP Provider 校验根目录并支持幂等删除

* 补充工作流、设置页和文件删除相关测试与文档
2026-08-01 16:42:28 +08:00

134 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PCB 目检放行软件最终工作流程图
## 1. 通信结构
```text
PLC <--OMRON FINS--> C# 上位机 <--TCP Socket--> 扫码枪1
<--TCP Socket--> 扫码枪2
<--SFTP----------> SFTP 服务器
<--HTTP----------> 安灯系统
```
## 2. 主流程图
```mermaid
flowchart TD
A[PLC: D1001 PcbArrived=1] --> B[上位机通过 FINS 读取到位信号]
B --> C{当前是否空闲且未故障}
C -->|否| C1[忽略本次触发并继续监视]
C -->|是| D[写入 D1051 PcBusy=1]
D --> E[写入 D1100 ResultCode=1 处理中]
E --> F[触发扫码枪1: TCP 发送 T]
E --> G[触发扫码枪2: TCP 发送 T]
F --> H[接收扫码枪1结果]
G --> I[接收扫码枪2结果]
H --> J[汇总双扫码结果]
I --> J
J --> K{是否至少一路扫码成功}
K -->|否| L[调用安灯: 两把扫码枪均失败]
L --> M[记录报警结果]
M --> N[写入 D1100 ResultCode=20 NG放行]
K -->|是| O{两路条码是否都成功且不一致}
O -->|是| P[优先使用扫码枪1条码并记录不一致日志]
O -->|否| Q[使用成功条码]
P --> R[SFTP 查找最终条码对应文件]
Q --> R
R --> S{SFTP 校验结果}
S -->|文件存在| T[写入 D1100 ResultCode=10 正常放行]
S -->|文件未找到且未到重试上限| U[等待配置间隔后重试]
U --> R
S -->|文件未找到达到上限| V[写入 D1100 ResultCode=20 NG放行]
S -->|连接/认证/目录异常| W[写入 D1100 ResultCode=90 系统故障]
T --> X[写入 D1052 ReleasePermit=1]
V --> X
N --> X
X --> Y{是否启用 D1003 PlcAckRelease}
Y -->|启用| Z[等待 PLC 写入 D1003=1]
Y -->|不启用| AA[按放行脉冲时间保持]
Z --> AB[等待 PLC 复位]
AA --> AB
AB --> AC[PLC: D1002 PlcReset=1]
AC --> AD[上位机执行复位]
AD --> AE[写入 D1051=0]
AE --> AF[写入 D1052=0]
AF --> AG[写入 D1100=0 Idle]
AG --> AH[回到空闲监视]
W --> AI[进入故障锁存]
AI --> AJ[等待人工/PLC复位]
AJ --> AC
```
## 3. 双扫码判定
```mermaid
flowchart TD
A[扫码枪1结果 + 扫码枪2结果] --> B{扫码枪1成功?}
A --> C{扫码枪2成功?}
B -->|是| D{扫码枪2也成功?}
B -->|否| E{扫码枪2成功?}
D -->|否| F[使用扫码枪1条码]
D -->|是| G{两路条码一致?}
G -->|是| H[使用共同条码]
G -->|否| I[使用扫码枪1条码并记录不一致]
E -->|是| J[使用扫码枪2条码]
E -->|否| K[双扫码失败]
F --> L[进入 SFTP 校验]
H --> L
I --> L
J --> L
K --> M[安灯报警 + NG放行]
```
## 4. PLC 点位与结果码
### 4.1 PLC -> 上位机
| 地址 | 名称 | 含义 |
| --- | --- | --- |
| D1001 | PcbArrived | PCB 到位,请求处理 |
| D1002 | PlcReset | PLC 请求上位机清状态/复位 |
| D1003 | PlcAckRelease | PLC 已收到放行信号,可选 |
### 4.2 上位机 -> PLC
| 地址 | 名称 | 含义 |
| --- | --- | --- |
| D1051 | PcBusy | 上位机正在处理当前 PCB |
| D1052 | ReleasePermit | 放行脉冲信号 |
| D1100 | ResultCode | 本次最终结果代码 |
### 4.3 ResultCode
| 数值 | 含义 | 是否放行 |
| --- | --- | --- |
| 0 | Idle / 无结果 | 否 |
| 1 | 处理中 | 否 |
| 10 | 正常放行 | 是 |
| 20 | NG 放行 | 是 |
| 90 | 系统故障 | 否 |
## 5. 关键规则
- `D1001` 只作为新板触发信号;流程执行中重复到位不得重入。
- 双扫码采用“任一成功即可”。
- 两把扫码枪都成功但条码不一致时,优先使用扫码枪1条码,并记录扫码枪2条码。
- SFTP 文件校验位于扫码成功之后、PLC 放行之前。
- SFTP 文件未找到达到重试上限后,写入 `ResultCode=20` 并放行。
- SFTP 连接失败、认证失败、根目录不存在等系统异常写入 `ResultCode=90`,不自动放行。
- 两把扫码枪均失败时调用安灯报警;安灯接口失败不阻断 `ResultCode=20` 的 NG 放行。
- `FileCheck.DeleteMatchedFileAfterPlcAck=true` 时,仅在收到 PLC 放行应答后删除本次文件校验精确命中的产品 ID 文件;应答超时、未命中文件或删除失败时不误删其他文件。
- 放行完成后等待 PLC 复位信号 `D1002`,再清 `D1051`、`D1052`、`D1100`。