前言
写上位机软件的人大概都有这种感觉:每个项目都从头造轮子太累了。窗体缩放一团糟、自定义控件每次重画、数据库操作写来写去就那么几个方法、跟 PLC 通讯的代码到处复制粘贴。这套工具库就是把这些年做 Winform 上位机时反复用到的东西抽出来,整理成一个个可以直接拿过去用的模块。不管你是做设备监控、数据采集还是对接 MES,里面大部分功能应该都能用得上。
项目介绍
一套基于 Winform 的上位机通用工具库,涵盖了工业现场软件开发的十个常见场景。从最基础的自适应窗体、自定义控件,到图表绘制、表格操作,再到数据库、通讯协议和 MES 对接,每一块都做了封装。它不是一个大而全的框架,更像是一个工具箱——你需要什么就拿什么,不需要为了用其中一个功能而引入一堆用不上的依赖。
项目功能
模块 | 功能说明 |
FormAdaptive | 让窗体里的控件跟随窗口大小自动缩放,解决不同分辨率下布局错乱的问题 |
CustomControl | 封装了一批常用控件,比如带指示灯的按钮、开关、数字输入框、进度条等 |
MenuControl | 管理主界面的菜单栏、导航树、选项卡布局,支持动态加载和权限过滤 |
Chart | 实时曲线图、柱状图、饼图,适合展示温度变化、产量趋势等 |
Dashboard | 仪表盘风格的数值显示,模拟指针表盘,用于速度、压力、完成率等参数 |
DataGridViewControl | 封装表格的冻结列、导出 Excel、条件格式化、批量编辑等功能 |
Global Storage Data | 全局数据存储方法,支持跨窗体共享变量、实时数据缓存和状态标记 |
Tools | 日志记录、配置文件读写、时间戳转换、串口扫描、CRC 校验等小工具 |
SQL | 数据库操作类,封装了增删改查、事务处理、批量插入、连接池管理 |
Communication | 通讯协议类,目前包含串口、TCP 客户端/服务端、Modbus RTU/TCP 几种常用协议 |
Docking MES System | 对接 MES 系统的通用类,封装了 HTTP 请求、Token 管理、条码上传、工单查询 |
项目特点
拿来就能用:每个模块都是独立的,直接把对应的 .cs 文件拷贝到你的项目里,引用命名空间就能跑起来,不需要配一堆依赖。
窗体自适应不费劲:FormAdaptive 模块一行代码搞定缩放和字体调整,不用在 Designer 里反复调锚点。
工业控件开箱即用:CustomControl 里的指示灯、开关、旋钮都做了双缓冲,不会闪烁,颜色和状态绑定也预留好了接口。
图表和仪表盘做看板正好:实时曲线支持滚动显示,仪表盘可以绑定 PLC 寄存器值,做车间大屏的时候省了不少事。
数据存储不瞎传参数:全局存储用静态字典实现,支持泛型,不用再写一堆构造函数传对象。
数据库操作带防注入:参数化查询是基本功,额外加了慢查询日志和自动重连机制。
通讯层可扩展:串口和 TCP 的基类抽象出来了,新增协议只需要继承重写收发方法。
MES 对接留了样例:封装了常见的请求头、鉴权、超时处理,贴一份实际产线的对接代码做参考。
项目技术
类别 | 具体内容 |
开发框架 | .NET Framework 4.7.2 及以上 / .NET 6/8 Winform |
界面技术 | GDI+ 自定义绘制、双缓冲、窗体消息传递 |
图表引擎 | 自绘折线图 + 可选集成 ScottPlot 或 LiveCharts2 |
数据库 | SQLite、SQL Server、MySQL 三套适配器,统一接口 |
通讯协议 | System.IO.Ports 串口、System.Net.Sockets TCP、NModbus(可选) |
JSON 处理 | Newtonsoft.Json 或 System.Text.Json |
日志 | 自写文件日志,支持按天分割和级别过滤 |
配置存储 | 自定义 IniFile 类 + JSON 配置类两种方式 |
项目效果
第一个是界面适配省心了。之前做一个产线看板软件,客户现场用的工控机分辨率是 1024*768,但设计时用的是 1920*1080,窗体拖过去按钮全跑偏。把 FormAdaptive 加进去之后,窗体打开时自动计算缩放比例,控件位置和大小按比例调整,字体也跟着变,十分钟就把适配问题解决了。
第二个是通讯调试快了。Communication 模块里封装了一个串口调试器的界面组件,带自动枚举 COM 口、波特率、校验位,还支持 Hex 和文本收发。调试 PLC 的时候直接拖一个控件到窗体上,绑好事件就能用,不用每回都开着第三方串口工具来回切换。
第三个是 MES 对接有了模板。之前对接一个客户的 MES 系统,接口返回的 JSON 结构比较奇怪,还有一些特殊的签名算法。在 Docking MES System 模块里封装了一个通用的 HttpHelper 类,把 GET、POST、带证书的请求都做好了,新对接另一个工厂的时候只需要换 URL 和参数映射,代码改动量很小。
第四个是表格批量操作效率高。DataGridViewControl 里封装了粘贴 Excel 数据的功能,从 Excel 里复制几行数据,直接 Ctrl+V 就能粘到 DataGridView 里,省去了写导入向导的功夫。
自定义控件
通讯协议
图表控件
仪表盘