当前位置: 首页 > news >正文

C# Modbus RTU 数据采集系统代码功能说明(基于原始代码解读)

C#上位机开发源码 上位机项目源代码 采用基于RS485通讯总线的ModbusRtu协议,支持用户权限管理、sqlite数据库、实时曲线、历史曲线、历史报表、导出Excel、主界面布局可调带记忆等功能

一、项目核心定位与技术框架

本项目是基于C#开发的工业级数据采集上位机系统,采用RS485总线的Modbus RTU协议实现与下位设备的通讯。从代码实现来看,系统核心定位为中小型工业场景的数据监控平台,技术栈选择聚焦实用性:

  • 开发框架:.NET Framework(Windows Forms)
  • 通讯协议:Modbus RTU(基于NModbus库扩展)
  • 数据存储:SQLite(嵌入式数据库,无需独立部署)
  • 可视化组件:自带Chart控件(曲线绘制)、DataGridView(数据展示)
  • 辅助工具:log4net日志组件、基础IO操作(配置存储)

代码整体采用面向对象设计,通过类封装实现功能模块化,但未严格遵循分层架构,部分业务逻辑与UI层存在耦合(如FrmMain中直接包含数据采集逻辑),更符合小型项目的快速开发特点。

二、核心功能模块代码实现解析

(一)Modbus RTU通讯模块

通讯功能是系统核心,代码集中在Modbus目录及相关适配器类中,实现了完整的设备数据读写能力:

  1. 协议基础定义(Modbus.cs)
    - 定义核心功能码常量(如ReadCoils=1ReadHoldingRegisters=3等)
    - 设定通讯参数默认值:超时时间1000ms、重试次数3次
    - 定义数据长度限制:离散量最大2040点,寄存器最大127个
  1. 串口通讯适配(SerialPortAdapter.cs)
    - 封装System.IO.Ports.SerialPort类,提供串口打开/关闭、数据读写基础操作
    - 实现IDisposable接口,确保资源释放
    - 关键方法:Open()(打开串口并清理缓冲区)、Read()(带超时的字节读取)
  1. RTU协议传输(ModbusRtuTransport.cs)
    - 核心功能:RTU帧构建与解析,包含CRC校验实现
    -BuildMessageFrame():拼接从站地址+PDU+CRC校验码
    -ReadResponse():读取响应帧并验证CRC(通过ChecksumsMatch()方法)
    - 处理帧间隔:通过WaitForData()方法确保帧间时序正确
  1. 主站操作封装(ModbusSerialMaster.cs)
    - 提供设备读写的上层API,如:
    -ReadCoils(ushort startAddress, ushort numberOfPoints):读取线圈状态
    -ReadHoldingRegisters(ushort startAddress, ushort numberOfRegisters):读取保持寄存器
    -WriteSingleRegister(ushort registerAddress, ushort value):写入单个寄存器
    - 内部通过IModbusTransport接口与传输层交互,降低耦合

(二)数据存储与管理模块

数据存储基于SQLite实现,代码集中在SQLLiteHelp.cs及相关数据模型类,实现了数据持久化与查询功能:

  1. 数据库操作工具(SQLLiteHelp.cs)
    - 封装SQLite核心操作,提供:
    -GetDataSet(string sql):执行查询并返回数据集
    -Update(string sql):执行增删改操作
    - 自动处理数据库连接的打开与关闭
    - 数据库文件默认存储路径:程序运行目录下的data.db
  1. 核心数据表结构(通过SQL语句定义)
    -TBDataRecord:存储实时/历史数据,包含:
    -CollectTime(采集时间,主键)
    - 21个监测参数字段(如data1data21
    -TB
    AlarmRecord:存储报警记录,包含报警时间、类型、描述等
    -UserManagement:用户信息表,字段包括用户名、密码、权限等级
  1. 内存数据缓存(DataStore.cs)
    - 模拟设备内存映射,缓存四类数据:
    - 线圈(Coils)、离散输入(Inputs)、保持寄存器(HoldingRegisters)、输入寄存器(InputRegisters)
    - 提供ReadData()WriteData()静态方法,支持数据分片读写
    - 实现数据边界校验,防止越界访问

(三)用户权限管理模块

权限管理功能通过简单的用户名密码验证实现,代码集中在登录表单及用户管理相关类:

  1. 登录验证(FrmLogin.cs)
    - 核心逻辑:输入用户名密码后,查询UserManagement表验证合法性
    - 验证通过后,将用户信息存入CommonMethods.LoginUser静态变量(全局共享)
    - 权限区分:管理员(可进行用户管理)与普通用户(仅查看数据)
  1. 用户管理功能
    -FrmChangeUser.cs:管理员可新增/删除用户,包含用户名唯一性校验
    -FrmChangePwd.cs:支持密码修改,需验证原密码正确性
    - 权限控制:主界面(FrmMain)根据登录用户权限动态启用/禁用菜单(如普通用户无用户管理权限)

(四)数据可视化模块

数据可视化包含实时曲线、历史曲线和数据报表,代码分布在多个表单类中:

  1. 实时曲线(FrmShowChart.cs)
    - 基于Chart控件实现,采用样条曲线(Spline)展示
    - 数据缓存:使用Queue存储最近100个数据点,超出自动移除最早数据
    - 动态刷新:通过定时器(Timer)定时更新曲线,X轴随数据滚动
  1. 历史曲线(FrmSeriesQuery.cs)
    - 支持按时间范围查询历史数据,通过Chart控件绘制
    - 多参数展示:可同时选择多个参数(最多5个),用不同颜色曲线区分
    - 数据来源:从TB_DataRecord表查询指定时间范围数据
  1. 历史报表(FrmReportQuery.cs)
    - 通过DataGridView展示历史数据,支持时间范围筛选
    - 导出功能:将表格数据导出为Excel文件(.xls格式),通过StreamWriter写入制表符分隔的文本内容

(五)主界面布局与记忆功能

主界面(FrmMain.cs)采用MDI容器设计,实现布局自定义与记忆:

  1. 界面组成
    - 包含4个子窗口:数据展示(FrmShowData)、实时曲线(FrmShowChart)、故障信息(FrmShowAlarm)、日志信息(FrmShowInfo)
    - 菜单栏提供功能入口:用户管理、串口控制、数据查询、工具等
  1. 布局记忆实现
    - 关闭主界面时,通过BinaryFormatter序列化子窗口的Bounds属性到obj.obj文件
    - 启动时反序列化该文件,恢复子窗口位置和大小
    - 核心代码:SaveFormLocation()(保存)和LoadFormLocation()(加载)方法

三、关键流程代码解析

(一)设备数据采集流程

  1. 串口配置:用户在FrmPortSelect选择串口参数(端口、波特率等)
  2. 连接设备:FrmMain中调用ModbusSerialMaster.CreateRtu(serialPort)创建主站实例
  3. 定时采集:通过Timer组件(默认500ms间隔)触发采集:
    csharp
    // 伪代码示意
    private void timer1_Tick(object sender, EventArgs e)
    {
    // 读取保持寄存器(功能码3)
    var data = master.ReadHoldingRegisters(slaveAddress, startAddress, count);
    // 解析数据并更新内存缓存
    UpdateLiveData(data);
    // 写入数据库
    SaveToDatabase(data);
    }
  4. 数据展示:实时更新FrmShowData的DataGridView和FrmShowChart的曲线

(二)报警处理流程

  1. 报警数据来源:通过ReadCoils读取离散量状态(报警开关量)
  2. 状态解析:使用BitArray解析线圈数据,判断报警状态
  3. 报警记录:状态变化时写入TB_AlarmRecord表,并更新FrmShowAlarm的ListBox
  4. 报警清除:提供手动清除功能(工具菜单->清除故障信息)

(三)Excel导出流程

  1. 用户在FrmReportQuery点击"导出"按钮
  2. 生成文件名:包含当前时间(如报表_202201181030.xls
  3. 数据写入:
    csharp
    // 伪代码示意
    using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.GetEncoding("gb2312")))
    {
    // 写入表头
    sw.WriteLine("时间\t参数1\t参数2...");
    // 写入数据行
    foreach (DataRow row in dataTable.Rows)
    {
    sw.WriteLine($"{row["CollectTime"]}\t{row["data1"]}...");
    }
    }

四、代码设计特点与局限

(一)设计特点

  1. 实用性优先:功能实现直接高效,符合工业场景对稳定性的基本需求
  2. 模块化封装:核心功能(通讯、存储、可视化)通过类封装,便于维护
  3. 轻量部署:采用SQLite数据库,无需额外安装数据库服务
  4. 操作便捷:布局记忆、参数配置等细节设计提升用户体验

(二)存在局限

  1. 架构耦合:业务逻辑与UI层耦合较深(如FrmMain包含过多功能),不利于大规模扩展
  2. 异常处理:部分代码异常捕获不完善,工业环境下可能存在稳定性风险
  3. 多设备支持:当前代码更适用于单设备或少量设备,未实现完善的多设备管理机制
  4. 数据加密:用户密码明文存储(SQLite表中直接保存),存在安全隐患

五、适用场景

从代码实现来看,该系统适用于:

  • 中小型工业设备监控(如单机设备、小型生产线)
  • 对数据采集频率要求不高(秒级)的场景
  • 需要基础数据追溯与报表功能的应用
  • 环境相对稳定的工业现场(抗干扰处理有限)

总结

本系统通过C#实现了一套完整的Modbus RTU数据采集解决方案,核心功能覆盖设备通讯、数据存储、可视化展示、用户管理等关键环节。代码风格偏向实用主义,虽在架构设计上存在一定局限,但对于中小型工业场景能够满足基本需求,且具备较好的可维护性和二次开发基础。

C#上位机开发源码 上位机项目源代码 采用基于RS485通讯总线的ModbusRtu协议,支持用户权限管理、sqlite数据库、实时曲线、历史曲线、历史报表、导出Excel、主界面布局可调带记忆等功能

http://www.jsqmd.com/news/420376/

相关文章:

  • 联合体用于通讯协议解析与封装--元宝生成
  • 2026年2月出口美洲市场:哪些门窗厂商出口澳洲信誉最佳? - 2026年企业推荐榜
  • 系统巡检:规范设备升级、路由配置与配置管理全流程指南
  • 分形时间正则化:给 Navier–Stokes 方程装上“多尺度快门”
  • 宝马“具身AI产线”迭代:Hexagon AEON人形机器人正式落地莱比锡工厂
  • 运行指标量化:企业本地连通、专网性能与使用率达标评估指南
  • 本地HTTPS证书免费 使用本地私有IP而不是域名作为站点,IIS部署站点
  • 【ROS/ROS2与实时Linux系列】第二十七篇 ROS/ROS 2容错与故障恢复策略
  • 毕业论文ai生成工具有哪些?实测8款AI论文生成工具,精准高效提升10倍! - 掌桥科研-AI论文写作
  • 宝马大规模人形机器人试点项目复盘与反思:斯帕坦堡试点为何成功,Figure 02为何必须“退役”
  • 你以为AI记住了你,其实没有:大模型记忆机制拆解
  • 2026年青岛自媒体运营推广公司5强推荐榜单发布 - 精选优质企业推荐榜
  • 基于单片机电磁流量计模拟仿真设计
  • 2026年湖南抖音短视频代运营公司排行榜TOP5发布 - 精选优质企业推荐榜
  • 【ROS/ROS2与实时Linux系列】第二十八篇 ROS 2 `launch`系统:实时任务启动编排
  • 用实力说话 降AIGC软件 千笔·降AI率助手 VS 学术猹 更适合继续教育
  • 基于单片机带时间及声光提示的八路抢答器设计
  • 清洁度萃取设备怎么选?专家推荐这几家源头厂家-苏州西恩士工业 - 工业干货社
  • 2026冲刺用!AI论文写作软件 千笔·专业学术智能体 VS Checkjie,专科生专属高效神器!
  • 用过才敢说! 降AIGC软件 千笔·专业降AI率智能体 VS 万方智搜AI,继续教育首选
  • Claude Code Skills 开发实战:从零构建智能 Agent 工具链
  • 2026年宿迁自媒体运营推广公司TOP5推荐榜单发布 - 精选优质企业推荐榜
  • 2026最新污水处理设备/气浮机/纯水设备/低温蒸发器/反渗透设备推荐:多维技术加持,这家企业实力领跑 - 十大品牌榜
  • 交稿前一晚!AI论文写作软件 千笔·专业论文写作工具 VS 万方智搜AI
  • 全自动折光仪核心技术及其在多行业中的应用研究
  • 【ACM出版、往届已检索、增设评优】第三届粤港澳大湾区教育数字化与计算机科学国际学术会议(EDCS 2026)
  • 写作小白救星 AI论文软件 千笔·专业学术智能体 VS WPS AI
  • C++ 对象地址、拷贝构造、浅拷贝、返回值优化(RVO)完整知识链总结
  • 2026年福建自媒体运营推广公司排行榜正式公布 - 精选优质企业推荐榜
  • 必学收藏!AI Agent框架从理论到实践:279行代码带你入门大模型智能体开发