BYD-MES系统上位机是面向比亚迪生产车间的制造执行系统客户端,旨在打通现场设备层与管理层的信息孤岛,实现生产过程的数字化、透明化管控。系统涵盖用户认证、条码验证、生产数据管理、PLC通信、多语言界面及标签打印等核心业务模块,满足汽车制造、电子装配等产线的实时监控与质量追溯需求。
用户认证与权限管理:系统支持在线/离线两种工作模式,适应复杂工业网络环境。登录方式包括密码输入与刷卡识别,用户可根据岗位选择不同凭证。权限体系划分为DEV(开发)、管理员、操作员三级,通过功能按钮的动态启用/禁用实现对生产参数修改、工单下发、报表导出等操作的分级控制。所有登录记录均写入日志,便于审计追溯。
条码验证系统:作为质量防错的关键环节,系统可依据用户自定义规则(如长度、字符类型、校验位、正则表达式)对产品条码进行实时验证。验证类型包括:条码格式规范性、同一工单内的重复性、与MES订单数据的一致性。验证结果通过PLC特定点位(例如D1000触发扫描、D1001-D1005接收条码、D1006返回验证结果、D1007返回错误代码)与产线设备联动,不合格品自动触发报警或剔除动作。提示信息支持简体中文、英文、泰语三种语言,适配比亚迪海外工厂。
生产数据管理:系统实时采集各工位的产量、良品数、返工数,动态计算生产效率、合格率、直通率等KPI指标,并以图表形式展示于车间大屏。配方管理模块允许工艺员按产品型号维护多版本工艺参数(如温度、速度、扭矩等),生产时一键下发至PLC。工单管理涵盖工单创建、发布、生产进度跟踪、完工统计全流程,支持与ERP或MES中央服务器同步。
PLC通信集成:基于HslCommunication库,支持三菱、西门子、欧姆龙等多种PLC协议。系统建立独立通信线程,周期性读取设备状态、故障代码、生产计数,同时接收MES下发的指令(如工单切换、参数调整)。通信链路具备断线重连与心跳检测机制,保障7×24小时稳定运行。
多语言与打印:运行时动态切换界面语言,无需重启应用程序。标签打印集成Seagull BarTender,支持多种模板(产品标签、箱标、托盘标),通过变量替换实现动态数据填充,满足不同产品的标识需求。
本项目采用C#、.NET Framework 4.7.2、Windows Forms技术栈,遵循分层架构与模块化设计,确保代码可维护性与扩展性。
整体架构:分为三层——数据模型层(定义实体类,如BarcodeVerification、WorkOrder)、数据服务层(封装数据库CRUD操作,类如BarcodeVerificationServer)、业务逻辑层(实现核心业务规则,类如MesTool)。界面层仅负责用户交互,通过事件与中间层解耦。
数据库与ORM:数据库选用Access(适用于工控机单机部署),配合SqlSugar ORM框架。通过DBConnSugClie统一管理连接字符串和上下文,支持自动创建表结构、初始化基础数据(用户、权限、配方模板)。SqlSugar的表达式树功能简化了动态查询,性能满足产线高频读写需求。
PLC通信实现:封装HslCommunication的各协议客户端,建立连接池管理多个PLC设备。采用异步轮询(Task.Run + ManualResetEvent)读取D区、M区等关键地址,数据变化时通过事件通知业务层。写入操作采用“发送-确认”模式,超时重试3次。故障信息本地缓存并异步上报MES。
条码验证引擎:实现规则链设计模式——定义IBarcodeRule接口,具体规则如LengthRule、RegexRule、DuplicateRule、CheckDigitRule依次执行,任一失败即返回对应错误码。错误码映射到多语言资源文件(Strings.resx、Strings.zh.resx、Strings.th.resx),通过ResourceManager动态获取提示文本。
多语言动态切换:创建LocalizableForm基类,重写OnLoad,递归遍历所有控件,依据控件Name属性从当前语言资源包中读取翻译文本。语言切换时触发全局事件,所有已打开窗体重载资源,实现界面实时刷新,无需重启。
打印模块:引用BarTender的COM组件(Seagull.BarTender.Print),封装BartenderPrinter类,提供模板加载、变量赋值(SetNamedSubString)、打印数量设置和异步打印接口。打印失败自动记录日志并重试。
日志与异常处理:使用NLog 5.3.2配置滚动文件日志,按日期和级别分割。未捕获异常通过AppDomain.CurrentDomain.UnhandledException全局捕获,记录详细信息并提示用户。数据库操作采用事务包装,异常时回滚。
用户体验优化:主界面全屏显示,适配工业触摸屏;使用双缓冲绘图与BeginUpdate/EndUpdate避免DataGridView闪烁;实时数据采用ObservableCollection绑定,配合INotifyPropert