# 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] ```