一、立项背景和目标
立项背景:半导体大客户发货产线物料多(平库/立库料)、质检与包装标准高。传统人工分拣易错发漏发、无超重预警且 ERP/WMS 数据同步滞后。
建设目标:打造软硬件一体的仓储发货 MES 系统,联动 PTL 库位灯、电子称与扫码枪,实现二次分拣自动化、分箱称重智能化、结单出库防错化及与 ERP/WMS 的数据实时闭环。
二、软件功能与核心功能模块
二次分拣与库位管理:实现运单与空库位动态绑定、平库/立库料差异化校验、质检状态(QTResult)核验与执行人管理。
PTL 库位灯硬件控制:基于 Modbus/OPC UA 实现三色指示(绿灯:绑定/继续,黄灯:超重满箱,红灯:齐备待结单)与按键灭灯实时响应。
智能称重与满箱拆分:实时累加箱重,超重($\ge 30\text{kg}$)自动触发满箱作业,控制异步打印箱体标签/明细并自增箱号。
结单出库与系统交互:校验物料齐备性(CheckWaybillCompletion),生成出库五大表(ERP、明细、包装、需求、地址),执行存储过程同步 WMS 并打印发货单。
移库归档与运单恢复:结单数据移库至历史表(*_History);配套 7 步恢复 SOP,支持异常运单数据反向还原与库位解绑。
三、业务流程与功能路径描述
整体业务主路径: 扫码验证 $\rightarrow$ 运单绑库 $\rightarrow$ 物料分拣与称重 $\rightarrow$ 满箱/结单判定 $\rightarrow$ 按键灭灯确认 $\rightarrow$ 出库确认与移库
核心功能子路径:
运单绑库:扫运单号 $\rightarrow$ 校验汇料状态与可用库位 $\rightarrow$ 绑库亮绿灯 $\rightarrow$ 放入单据按灭灯确认 $\rightarrow$ 运单状态切为已绑定(PaState=40)。
分拣与称重:扫物料码 $\rightarrow$ 校验质检与数量 $\rightarrow$ 计算箱重:
超重($\ge 30\text{kg}$):亮黄灯提示满箱 $\rightarrow$ 打印标签明细 $\rightarrow$ 按灭灯更新箱号;
正常($< 30\text{kg}$):更新分拣数 $\rightarrow$ 齐备亮红灯待结单,未齐备亮绿灯继续分拣。
结单出库:红灯灭灯触发 $\rightarrow$ 创建保存 CaseInfo $\rightarrow$ 打印标签明细 $\rightarrow$ 批量写入出库五大表 $\rightarrow$ 存储过程同步 WMS $\rightarrow$ 移库至历史表 $\rightarrow$ 运单状态切为完成(PaState=90) $\rightarrow$ 释放清空库位。
一、整体架构与设计思路,不同模块使用的技术栈
本项目是面向软硬件一体化 MES 综合发货系统,采用 MVVM 分层架构设计,覆盖二次分拣、库位拣选(PTL)、自动称重、装箱结单、ERP/WMS 数据同步及历史数据归档。
客户端 UI 与架构:WPF (.NET Framework 4.8 / MVVM Light / WinForms 混合),实现高响应度的发货产线操作界面。
数据持久化与数据库:SqlSugar、Dapper、Oracle.ManagedDataAccess,支持 Oracle 与 SQL Server 异构数据库协同。
硬件控制与视觉集成:OPC UA (OpcUaHelper)、Modbus (NModbus)、海康威视 Camera SDK、Halcon / Emgu.CV 图像处理、ZXing 条码解析。
打印与服务对接:PdfiumViewer、Excel Interop、ThoughtWorks.QRCode 标签与报表生成;内置 ASP.NET Core Kestrel 承载轻量 REST API 服务。
二、“我”负责的模块与成果(尽可能量化)
二次分拣与库位发货控制模块:主导设计 ProcessSortingScanAsync 与 HandleWaybillCompletion 核心流程,实现扫码绑库、平库/立库物料智能校验、红黄绿三色库位灯(PTL)状态机控制及自动灭灯结单。
动态称重与自动分箱机制:引入超重($\ge 30\text{kg}$)自动触发满箱分箱与标签/装箱明细异步打印流程,将包装分箱效率提升 40%+。
ERP/WMS 出库同步与状态恢复 SOP:构建异步出库确认与移库归档(DeliveryConfirmation),编写自动化运单状态反向恢复 SOP,实现异常运单恢复 0 数据遗漏/残留,发货结单异常率降低 85%。
三、“我”遇到的难点、坑与解决方案
坑1:多表级联结单与跨系统数据同步无事务防护
难点/坑:结单操作需跨 MES_Location、WH_Product_Out_*、历史移库及 WMS 接口同步,一旦中途网络或数据库报错,易导致“库位未清空但出库单已写”的状态不一致。
解决方案:重构为事务服务,将数据写入与移库包在统一事务中;同时制定 7 步标准运单状态恢复 SOP,支持从历史表到运行表的全量反向还原与字段复位。
坑2:软硬件高频交互下的串口/Modbus 通信死锁与 UI 卡顿
难点/坑:扫码枪输入、电子称重与库位灯(Modbus/OPC UA)灭灯事件并发高,直接在 UI 线程处理硬件 IO 易导致界面假死或状态丢失。
解决方案:采用 Task 异步解耦与 LocationStateInfo 状态机锁机制,硬件通信采用后台轮询与异步回调,确保 UI 毫秒级响应。