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

4.3 KiB
Raw Blame History

PCB 目检放行软件最终工作流程图

1. 通信结构

PLC <--OMRON FINS--> C# 上位机 <--TCP Socket--> 扫码枪1
                                     <--TCP Socket--> 扫码枪2
                               <--SFTP----------> SFTP 服务器
                               <--HTTP----------> 安灯系统

2. 主流程图

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. 双扫码判定

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。