『7x24小时有问必答』

前言

写上位机软件的人大概都有这种感觉:每个项目都从头造轮子太累了。窗体缩放一团糟、自定义控件每次重画、数据库操作写来写去就那么几个方法、跟 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 里,省去了写导入向导的功夫。
自定义控件
通讯协议

图表控件

仪表盘

数据分页

项目源码

源码按模块划分了文件夹,结构大致如下:
WinformTools/

├── FormAdaptive/               # 窗体自适应核心类,包含缩放计算和控件递归遍历

├── CustomControl/              # 指示灯 Button、开关 ToggleSwitch、旋钮 Knob、数字输入框 NumericBox

├── MenuControl/                 # 菜单栏加载器、树形导航控件、选项卡页面管理器

├── Chart/                          # 实时曲线控件、柱状图控件、辅助类(坐标轴、图例)

├── Dashboard/                    # 仪表盘控件、刻度盘绘制逻辑、数值绑定

├── DataGridViewControl/     # 扩展 DataGridView,支持导出 Excel、列配置、右键菜单

├── GlobalStorage/              # 全局数据字典、事件总线(跨窗体通信)

├── Tools/                          # 日志 LogHelper、配置文件 ConfigHelper、CRC16/32、时间转换

├── SQL/                             # 数据库基类 BaseDBHelper,SQLite/SqlServer/MySql 三个子类

├── Communication/              # 串口 SerialPortHelper、TCP TcpClientHelper、Modbus 封装

└── DockingMES/                  # HttpHelper、TokenManager、MesApiClient 示例代码

每个模块都附带一个简单的示例窗体  .cs,演示怎么调用。数据库相关模块包含建表语句的 SQL 脚本。通讯模块的 Modbus 部分有读写寄存器的完整示例,可以直接连仿真软件测试。
为了防止丢失,可以在评论区留言关键字上位机工具类,即可获取完整源码地址。

总结

写上位机软件这件事,说到底就是跟设备打交道、跟数据库打交道、跟 MES 打交道。这套工具库没有花哨的设计模式,也没有过度抽象,就是把实际项目中频繁遇到的痛点——窗体缩放、控件重绘、通讯调试、表格操作、MES 对接——一个个用手工敲出来的代码解决了。
如果大家也在做 Winform 工业软件,不妨从这里挑几个模块拿去用,至少能省下几天重复劳动的时间。工具类的意义不在于技术多高深,而在于下一次遇到同样的问题时,不用再从头开始。

关键词

Winform上位机窗体自适应自定义控件数据采集Modbus串口通讯MES对接、DataGridView、仪表盘、实时曲线、SQLite、工业自动化、工具类库

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注加群

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码