✨ feat(*): 重构PCB放行流程并接入双扫码校验

- 将流程改为 OMRON FINS + TCP 双扫码 + SFTP 文件校验
- 新增文件校验与扫码结果汇总实现,补充对应单测
- 同步更新流程设计文档、配置和系统设置页面文案
This commit is contained in:
2026-05-17 14:08:05 +08:00
parent 9a2211ccaa
commit ce356bffff
37 changed files with 4443 additions and 2436 deletions

149
docs/正式的工作流程 Normal file
View File

@@ -0,0 +1,149 @@
# OMRON 目检放行软件通信流程(FINS + TCP扫码枪)
## 1. 系统通信结构
```text
PLC <--FINS--> C# 上位机 <--TCP--> 扫码枪1
<--TCP--> 扫码枪2
```
* PLC 与上位机:
* 通信协议:OMRON FINS
* 上位机读取 PLC 点位
* 上位机写入 PLC 点位
* 上位机与扫码枪:
* 通信协议:TCP Socket
* 发送触发命令:`T`
* 接收扫码结果字符串
---
# 2. PLC 通信点位定义
## 2.1 PLC -> 上位机(上位机读取)
| 地址 | 名称 | 类型 | 说明 |
| ----- | ------------- | ---- | --------------- |
| D1001 | PcbArrived | Bool | PCB已到位,请求上位机处理 |
| D1002 | PlcReset | Bool | PLC请求上位机清状态/复位 |
| D1003 | PlcAckRelease | Bool | PLC已接收到放行信号(可选) |
预留:
| 地址范围 | 说明 |
| ------------- | ---------------- |
| D1004 ~ D1010 | PLC -> 上位机扩展信号预留 |
---
## 2.2 上位机 -> PLC(上位机写入)
| 地址 | 名称 | 类型 | 说明 |
| ----- | ------------- | ---- | ------------ |
| D1051 | PcBusy | Bool | 上位机正在处理当前PCB |
| D1052 | ReleasePermit | Bool | 放行脉冲信号 |
---
## 2.3 结果寄存器(上位机写入)
| 地址 | 名称 | 类型 | 说明 |
| ----- | ---------- | --- | -------- |
| D1100 | ResultCode | Int | 本次最终结果代码 |
### ResultCode 定义
| 数值 | 含义 |
| -- | ---- |
| 0 | Idle |
| 1 | 处理中 |
| 10 | 正常放行 |
| 20 | NG放行 |
| 90 | 系统故障 |
---
# 3. TCP 扫码枪通信
## 3.1 扫码枪1
### 发送
```text
T
```
### 接收
```text
二维码/条码字符串
```
---
## 3.2 扫码枪2
### 发送
```text
T
```
### 接收
```text
二维码/条码字符串
```
---
# 4. 工序流程图
```mermaid
flowchart TD
A[PLC写入 D1001=PcbArrived=1]
--> B[C#上位机通过FINS读取到位信号]
B --> C[上位机写入 D1051=PcBusy=1]
B --> D[上位机写入 D1100=1 处理中]
D --> E[TCP发送 T 到扫码枪1]
D --> F[TCP发送 T 到扫码枪2]
E --> G[扫码枪1返回扫码结果]
F --> H[扫码枪2返回扫码结果]
G --> I[上位机汇总扫码结果]
H --> I
I --> J{扫码结果判定}
J -->|成功| K[写入 D1100=10 正常放行]
J -->|失败| L[写入 D1100=20 NG放行]
J -->|异常| M[写入 D1100=90 系统故障]
K --> N[写入 D1052=ReleasePermit=1]
L --> N
N --> O[PLC收到放行信号]
O --> P{是否启用确认信号}
P -->|启用| Q[PLC写入 D1003=PlcAckRelease=1]
P -->|不启用| R[进入复位流程]
Q --> R
R --> S[PLC写入 D1002=PlcReset=1]
S --> T[上位机执行复位]
T --> U[写入 D1051=0]
U --> V[写入 D1052=0]
V --> W[写入 D1100=0 Idle]
```