一套 WinForm 开箱即用的工业数据采集与监控方案

前言

做工业现场的人都有体会,设备通信这件事看起来简单,真要稳定跑起来却全是细节。串口参数对不上、PLC地址填错、通信突然中断没人知道、采集到的数据怎么存怎么查……每个问题都能折腾半天。

本文推荐一套能实实在在解决现场问题的软件,从设备通信到数据存储再到报警提醒,该有的功能基本都配齐了。

项目介绍

一款面向工业现场的轻量级数据采集与监控软件,主要解决 Modbus 设备和西门子 PLC 的通信问题。它采用 C# 编写,界面基于 Windows Forms,数据库用的是 SQL Server,整体结构分成界面层、业务逻辑层和数据访问层三层。

项目最朴素的出发点就是:现场工程师能快速上手,不用写代码就能把设备数据读上来、存下来、看起来。无论是调试阶段挨个测寄存器,还是正式运行后每天看曲线、导报表,都能在一个界面里完成。

项目功能

功能模块

具体说明

用户登录与权限管理

支持多用户登录,区分普通用户和管理员角色,管理员可管理账号和菜单权限

Modbus 通信调试

支持 RTU(串口)和 TCP(网口)两种模式,可读写保持寄存器、输入寄存器、线圈,支持单个或批量操作

西门子 PLC 通信

覆盖 S7-200 到 S7-1500 系列,支持 M、I、Q、DB 等常见存储区的读写

实时数据曲线

选定设备和地址后,实时刷新数据变化曲线,时间轴自动适配,方便观察趋势

历史数据查询与导出

按时间范围查询历史记录,支持导出为 Excel 表格,也支持把曲线存成图片

系统参数配置

配置数据库连接串、采集刷新间隔、各参数的报警上下限

报警记录与管理

实时检测数值超限,生成报警条目,界面中可确认处理,报警记录支持导出

点位配置管理

配置每个采集点的变量名、寄存器地址、数据类型、缩放系数等,支持批量导入导出

设备连接状态监控

后台定时心跳检测,通信异常时自动尝试重连,并在界面给出状态提示

项目特点

项目技术

技术项

选型与说明

开发语言

C#(.NET Framework 4.7.2)

UI 框架

Windows Forms,纯原生控件,兼容性好,运行资源占用低

数据库

SQL Server用参数化查询防止注入

Modbus 通信

NModbus 开源库,稳定可靠,覆盖 RTU 和 TCP 两种链路

PLC 通信

S7.Net 库,针对西门子系列做了封装,调用简单

图表控件


System.Windows.Forms.DataVisualization,内置于 .NET,无需额外授权

Excel 导出

NPOI组件,不依赖Excel COM对象服务器环境也能正常导出

日志组件

Serilog,支持按日期滚动、分级输出,方便现场排查

配置管理

自定义 ConfigManager 类,读写 JSON 配置文件

加密工具

内置 EncryptionHelper,使用随机盐值对用户密码做哈希存储

项目代码

代码整体遵循三层架构,举几个核心类的实际用法。

入口初始化(Program.cs)

static classProgram
{
[STAThread]
static void Main
{
Application.EnableVisualStyles;
Application.SetCompatibleTextRenderingDefault(false);

// 日志先行,后面所有异常都能被捕获
LogManager.Init;
AppDomain.CurrentDomain.UnhandledException += GlobalExceptionHandler.Handle;

// 共享管理器统一创建全局实例
SharedManager.Initialize;

Application.Run(new LoginForm);
}
}

设备读写核心片段(Form1.cs 中读取保持寄存器)

public async Task ReadHoldingRegisters(byte slaveId, ushort startAddress, ushort length)
{
try
{
if (_modbusMaster == null || !_isConnected)
thrownew Exception("设备未连接");

var result = await _modbusMaster.ReadHoldingRegistersAsync(slaveId, startAddress, length);
return result;
}
catch (Exception ex)
{
LogManager.Error($"读取保持寄存器失败: {ex.Message}");
throw;
}
}

数据保存到数据库(DAL/DataAccess.cs)

public bool SaveDataPoint(string deviceName, string address, string value, DateTime timestamp)
{
string sql = @"INSERT INTO DataHistory (DeviceName, Address, Value, CollectTime)
VALUES (@DeviceName, @Address, @Value, @CollectTime)";
using (SqlConnection conn = new SqlConnection(_connectionString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@DeviceName", deviceName);
cmd.Parameters.AddWithValue("@Address", address);
cmd.Parameters.AddWithValue("@Value", value);
cmd.Parameters.AddWithValue("@CollectTime", timestamp);
conn.Open;
return cmd.ExecuteNonQuery > 0;
}
}

报警检测逻辑(BLL/AlarmManager.cs)

public void CheckAlarm(string tagName, double currentValue, double highLimit, double lowLimit)
{
if (currentValue > highLimit)
{
CreateAlarm(tagName, "高报警", currentValue, highLimit);
}
else if (currentValue < lowLimit)
{
CreateAlarm(tagName, "低报警", currentValue, lowLimit);
}
}

项目效果

启动程序后首先看到登录窗口,输入账号密码进入主界面。主界面左侧是菜单树,右侧为功能区域,当前登录用户信息和角色会显示在状态栏。

在 Modbus 调试界面中,选择 RTU 或 TCP 方式,填好串口号或 IP 地址,点击连接,状态指示灯会从灰色变为绿色。接着填入从站地址和寄存器起始地址,点击读取,表格中立即返回数值,并附带采集时间戳。

切换到数据曲线界面,先选设备再选地址,曲线会自动绘制。用鼠标在曲线上拖拽可以框选放大,右键菜单提供还原和导出图片选项。历史查询模式下,选好起止时间,点击查询,表格和曲线同步更新,再点导出 Excel 就能把数据带走。

报警管理界面会实时滚动显示最新报警,未确认的报警有高亮标记,确认后状态变更,整个过程都有操作日志记录。

整体运行下来,CPU 占用和内存都控制在合理范围,在一台普通工控机上连续跑一周没有出现明显性能问题。

项目源码

目录结构如下:

ModbusMaster/
├── BLL/ # 业务逻辑层(报警、设备管理、心跳、数据处理)
├── DAL/ # 数据访问层(SQL操作)
├── Models/ # 实体类(数据点、报警记录、用户信息)
├── Utils/ # 工具类(配置、加密、日志、Excel导出)
├── bin/ # 编译输出
├── obj/ # 临时文件
├── LoginForm.cs # 登录窗口
├── MainForm.cs # 主窗口
├── Form1.cs # Modbus调试工具
├── Form2.cs # PLC通信工具
├── Form3.cs # 曲线与报表
├── ConfigurationForm.cs # 系统配置
├── AlarmManagementForm.cs # 报警管理
├── PointConfigForm.cs # 点位配置
├── UserManagementForm.cs # 用户管理
├── Program.cs # 程序入口
├── config.json # 系统配置文件
└── users.json # 用户数据文件

总结

项目解决工业现场最频繁的通信采集和监控需求,把事情做扎实。从实际反馈来看,这套软件在多个小型自动化改造项目中顶住了压力,现场人员经过简单培训就能独立操作。

如果你手头正好有 Modbus 设备或西门子 PLC 需要调试,或者想搭建一套轻量级的监控系统,不妨参考这个项目的思路。代码结构清晰,核心通信部分可以直接复用,扩展新协议也不算难。技术本身不复杂,关键是把它组合成一个顺手的东西,放在现场真正能跑起来。

展开阅读全文

更新时间:2026-07-22

标签:数码   方案   工业   寄存器   界面   通信   曲线   数据   设备   项目   现场   地址   操作

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302035593号

Top