# 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 放行。 - 放行完成后等待 PLC 复位信号 `D1002`,再清 `D1051`、`D1052`、`D1100`。