过站防呆系统产品设计文档
1. 产品概述
1.1 产品定位
分布式产线数据采集与过站防呆系统,支持多线并行产线的灵活编排与实时防错控制。
1.2 核心能力
- 产线编排:可视化配置产线结构、工序关系、并行/汇合逻辑
- 过站防呆:扫码/设备触发时实时校验产品流向正确性
- 数据采集:串口/网口多协议设备数据解析与上报
- 分布式部署:服务端统一管控,工控机边缘执行
2. 系统架构
2.1 部署架构
┌─────────────────────────────────────────────────────────────┐
│ 服务端 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 产线编排 │ │ 过站防呆 │ │ 数据汇总 │ │
│ │ 工序管理 │ │ 流向校验 │ │ 报表分析 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌──────────────────┼──────────────────┐
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ 工控机-1 │ │ 工控机-2 │ │ 工控机-N │
│ 扫码枪×2 │ │ 拧紧机 │ │ 检漏机 │
│ 网口/TCP │ │ 串口×2 │ │ 串口 │
└───────────┘ └───────────┘ └───────────┘
2.2 职责划分
| 层级 |
核心职责 |
数据存储 |
| 服务端 |
产线/工序编排、防错规则、全局状态、数据分析 |
完整数据库 |
| 工控机 |
设备对接、本地缓存、断网续传、执行上报 |
本工序数据+离线队列 |
3. 核心功能模块
3.1 产线编排模块(服务端)
3.1.1 产线结构定义
- 工序节点:唯一标识、名称、类型(扫码/设备/合并)
- 流向关系:前序/后继工序,支持多对多
- 并行分组:定义哪些工序属于同一线路分支
3.1.2 示例产线配置
产线A:
分支1: OP01-1 → OP02-1 → OP03-1 ─┐
├→ OP04 → OP05
分支2: OP01-2 → OP02-2 → OP03-2 ─┘
分支1: OP06-1 ─┐
├→ OP07 → OP09 → OP10
分支2: OP06-2 ─┘
3.1.3 工控机绑定配置
| 工控机ID |
绑定工序 |
接入方式 |
端口配置 |
| IPC-001 |
OP01-1, OP01-2 |
网口/TCP |
9001→OP01-1, 9002→OP01-2 |
| IPC-002 |
OP06-1 |
串口 |
COM1→拧紧机A, COM2→拧紧机B |
3.2 过站防呆模块
3.2.1 防错规则
- 是否该来:产品当前状态是否允许进入此工序
- 从哪来:是否从正确的上道工序流转而来
- 设备合格:设备检测数据是否满足通过标准
3.2.2 校验流程
扫码/设备触发
│
▼
┌─────────────┐
│ 读取产品SN │
└─────────────┘
│
▼
┌─────────────┐ 否 ┌─────────┐
│ 查询产品状态 │────────→│ 拒绝过站 │
│ 校验工序合法性 │ │ 报警提示 │
└─────────────┘ └─────────┘
│是
▼
┌─────────────┐ 否 ┌─────────┐
│ 校验上道工序 │────────→│ 拒绝过站 │
│ 是否已完成 │ │ 提示错站 │
└─────────────┘ └─────────┘
│是
▼
┌─────────────┐ 否 ┌─────────┐
│ 校验设备数据 │────────→│ 拒绝过站 │
│ 是否合格 │ │ 提示NG │
└─────────────┘ └─────────┘
│是
▼
┌─────────────┐
│ 更新产品状态 │
│ 记录过站日志 │
│ 放行/控制信号 │
└─────────────┘
3.3 数据采集模块(工控机端)
3.3.1 接入方式支持
| 接入方式 |
适用场景 |
配置维度 |
| 网口/TCP |
多工序扫码枪 |
端口→工序一对一绑定 |
| 串口 |
单机设备(拧紧机/检漏机/压装机) |
串口→设备一对一绑定 |
3.3.2 串口协议解析配置
配置结构(每串口独立):
serial_config:
port: "COM1"
baud_rate: 9600
data_bits: 8
stop_bits: 1
parity: "N"
# 帧结构
frame:
type: "fixed_length" # fixed_length / delimiter
length: 20 # 固定长度字节数
# delimiter: "\r\n" # 分隔符方式
# 字段定义(位域解析)
fields:
- name: "screw_id"
start_bit: 0
length: 4
type: "int"
desc: "螺丝编号"
- name: "result"
start_bit: 4
length: 1
type: "bool"
desc: "OK/NG"
- name: "torque"
start_bit: 5
length: 8
type: "float"
scale: 0.01
desc: "扭矩值"
3.3.3 多记录处理
- 单串口连续发送多记录(如多螺丝拧紧结果)
- 按固定记录长度切分流式数据
- 通过字段值(如螺丝编号)区分不同点位
3.4 数据同步模块
3.4.1 同步策略
| 网络状态 |
处理方式 |
| 在线 |
实时上报,服务端即时校验 |
| 离线 |
本地队列缓存,恢复后批量续传 |
3.4.2 断网续传机制
- 本地SQLite存储待同步记录
- 定时检测网络恢复
- 按时间顺序批量上报
- 服务端幂等处理,避免重复
4. 数据模型
4.1 核心实体
产品 (Product)
| 字段 |
类型 |
说明 |
| sn |
string |
产品序列号(唯一) |
| model |
string |
产品型号 |
| status |
enum |
待生产/生产中/已完成/异常 |
| current_op |
string |
当前所在工序 |
| create_time |
datetime |
创建时间 |
| complete_time |
datetime |
完成时间 |
工序 (Operation)
| 字段 |
类型 |
说明 |
| id |
string |
工序唯一标识 |
| name |
string |
工序名称 |
| type |
enum |
扫码/设备/合并 |
| prev_ops |
[]string |
前序工序ID列表 |
| next_ops |
[]string |
后继工序ID列表 |
| line_group |
string |
所属产线分组 |
过站记录 (TraceRecord)
| 字段 |
类型 |
说明 |
| id |
string |
记录ID |
| product_sn |
string |
产品SN |
| operation_id |
string |
工序ID |
| station_id |
string |
工位/工控机ID |
| result |
enum |
通过/拒绝 |
| reject_reason |
string |
拒绝原因 |
| device_data |
json |
设备采集数据 |
| timestamp |
datetime |
过站时间 |
5. 技术方案
5.1 技术栈
| 层级 |
技术选型 |
| 服务端 |
Kratos v2.9.2 + Go 1.22 + gRPC |
| 工控机 |
Go + 串口库(go.bug.st/serial) |
| 数据库 |
PostgreSQL / MySQL |
| 缓存 |
Redis(可选) |
| 消息队列 |
内置队列 / NATS(可选) |
5.2 项目结构
Poka-Yoke/
├── api/ # API定义(Protobuf)
│ ├── server/v1/ # 服务端API
│ └── agent/v1/ # 工控机API
├── cmd/
│ ├── server/ # 服务端入口
│ └── agent/ # 工控机入口
├── internal/
│ ├── server/ # 服务端实现
│ │ ├── biz/ # 业务逻辑(编排/防呆)
│ │ ├── data/ # 数据访问
│ │ └── service/ # 服务接口
│ └── agent/ # 工控机实现
│ ├── device/ # 设备对接
│ ├── sync/ # 数据同步
│ └── config/ # 本地配置
├── configs/ # 配置文件
└── docs/ # 文档
6. 接口设计
6.1 服务端接口
产线管理
POST /v1/production-lines - 创建产线
GET /v1/production-lines/{id} - 获取产线详情
PUT /v1/production-lines/{id} - 更新产线配置
过站校验
数据上报
POST /v1/trace/records - 批量上报过站记录
6.2 工控机接口
配置同步
GET /v1/agent/config - 拉取工控机绑定配置
心跳与状态
POST /v1/agent/heartbeat - 心跳上报
7. 部署方案
7.1 服务端部署
# Docker部署
docker build -t poka-yoke-server .
docker run -d \
-p 8000:8000 \
-p 9000:9000 \
-v /path/to/configs:/data/conf \
poka-yoke-server
7.2 工控机部署
- 独立可执行程序
- 本地配置文件(config.yaml)
- 开机自启服务
8. 迭代规划
Phase 1: 基础框架
Phase 2: 核心功能
Phase 3: 设备对接
Phase 4: 完善优化