前言
工业自动化和数据采集领域,如何高效地将现场设备的数据整合并对外提供服务,一直是开发人员关注的重点。本文将介绍一款基于 WinForm 开发的轻量级 MODBUS 数据采集与转发工具,它不仅支持多设备连接,还能将采集到的数据通过 HTTP 协议实时推送,适用于产线监控、远程运维等多种场景。
项目介绍
一个面向中小型制造企业的本地化数据采集解决方案。它采用 C# 语言编写,基于 .NET Framework 平台,使用 WinForm 开发用户界面。
核心目标是打通 MODBUS 设备与上层业务系统之间的数据通道——一边读取 PLC、传感器等 MODBUS 设备的数据,一边通过 HTTP 接口将数据推送给 Web 系统或云平台,实现"边缘采集 + 中心处理"的架构模式。
项目功能
1、支持同时连接多个 MODBUS TCP/IP 设备,每个设备可独立配置 IP 地址、端口号及采集周期;
2、提供图形化界面管理设备列表,包括新增、编辑、删除设备信息;
每个设备可绑定多个变量(如寄存器地址),支持灵活定义采集点;
3、采集到的数据自动通过预设的 HTTP 接口(含主数据接口与订单状态接口)进行转发;
4、内置日志记录模块,便于排查通信异常或调试问题;
5、支持最小化至系统托盘,后台持续运行,不影响用户其他操作。
项目特点
采用服务管理(AppManagementService)与设备线程管理(DeviceThreadManage)分离的设计,确保多设备并发采集时的稳定性;
其次,界面简洁直观,通过 DataGridView 展示设备状态,并用颜色区分按钮功能(绿色修改、蓝色变量、红色删除),提升操作效率;
项目技术
SqlSugar ORM 框架操作 SQLite 或 SQL Server 数据库,用于持久化设备配置与变量定义;
通信层基于成熟的 MODBUS 库,实现稳定可靠的寄存器读写;
多线程管理通过自定义 DeviceThreadManage 类实现,每个设备运行在独立线程中,避免相互阻塞;
UI 交互采用标准 WinForm 控件,结合 CellPainting 自定义按钮样式,兼顾美观与性能;
配置信息(如 API 地址)通过 JSON 文件读取,便于部署时调整,无需重新编译。
项目代码
private async Task EditDeviceAsync(string name,string deviceId) { using (var edit = new DevicesEdit(Enum.ItemChangedType.Update, name)) { edit.ShowDialog(); if (edit.DialogResult == DialogResult.OK) { var device = edit.device; var service = AppManagementService.Get<DeviceService>(); //如果有修改名称,修改后的名称不能与数据库内其它设备的名称一致 if ((name != device.Name) && await service.ExistsDeviceNameAsync(device.Name)) { MessageBox.Show($"修改设备:{name} 失败,原因:已经存在名称为 {device.Name} 的设备", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if ((deviceId != device.DeviceID) && await service.ExistsDeviceIDAsync(device.DeviceID)) { MessageBox.Show($"修改设备:{name} 失败,原因:已经存在设备ID为{device.DeviceID}的设备", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } //获取对应的主键 var oldModel = service.GetAll().Where(x => x.Name == name); foreach (var item in oldModel) { device.Id = item.Id; } if (await service.SaveAsync(device, Enum.ItemChangedType.Update)) { EditDeviceByDataGridView(name,device); MessageBox.Show($"修改设备:{name} 成功", "成功", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { MessageBox.Show($"修改设备:{name} 失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }项目效果
系统列表
编辑设备
项目源码
Gitee:https://gitee.com/liubo123321/devices-collect-app
总结
这款基于 WinForm 的 MODBUS 采集转发工具,虽体量不大,却完整覆盖了工业数据采集的核心链路。它不追求花哨的视觉效果,而是聚焦于稳定性、可维护性与实用性。对于需要快速开发本地数据桥接方案的团队来说,是一个值得参考的示例。
关键词
#WinForm、##MODBUS、#数据采集、#HTTP转发、#SqlSugar、#多设备、#工业自动化、#边缘计算、C#、#设备管理