《C#上位机开发从门外到门内》3-2::Modbus数据采集系统

server/2025/3/19 0:53:10/

在这里插入图片描述

文章目录

    • **1. 项目概述**
      • **1.1 项目背景**
      • **1.2 项目目标**
      • **1.3 技术栈**
    • **2. 系统架构设计**
      • **2.1 系统架构图**
      • **2.2 模块功能**
    • **3. 数据采集模块实现**
      • **3.1 Modbus协议简介**
      • **3.2 数据采集流程**
      • **3.3 代码实现**
    • **4. 数据存储模块实现**
      • **4.1 数据库设计**
      • **4.2 数据存储流程**
      • **4.3 代码实现**
        • **MySQL版本**
        • **InfluxDB版本**
    • **5. 数据可视化模块实现**
      • **5.1 可视化工具选择**
      • **5.2 可视化实现**
        • **ECharts示例**
        • **Grafana示例**
    • **6. 系统部署与测试**
      • **6.1 部署环境**
      • **6.2 测试流程**
    • **7. 总结**

在这里插入图片描述

1. 项目概述

1.1 项目背景

Modbus是一种广泛应用于工业自动化领域的通信协议,支持多种设备之间的数据传输。本项目旨在通过Modbus协议采集传感器数据,并将采集到的数据进行存储和可视化,以实现对工业设备的实时监控和数据分析。
在这里插入图片描述

1.2 项目目标

  1. 通过Modbus协议采集传感器数据。
  2. 将采集到的数据存储到数据库中。
  3. 实现数据的可视化展示,支持实时监控和历史数据分析。

1.3 技术栈

  • 通信协议:Modbus RTU/TCP
  • 编程语言:Python(用于数据采集和存储)
  • 数据库:MySQL/InfluxDB(用于数据存储)
  • 可视化工具:ECharts/Grafana(用于数据可视化)
  • 硬件设备:Modbus传感器、RS485通信模块、工业网关等。

2. 系统架构设计

在这里插入图片描述

2.1 系统架构图

+-------------------+       +-------------------+       +-------------------+
|                   |       |                   |       |                   |
|  Modbus传感器     |<----->|  数据采集模块     |<----->|  数据存储模块     |
|  (温度、压力等)   |       |  (Python脚本)     |       |  (MySQL/InfluxDB) |
|                   |       |                   |       |                   |
+-------------------+       +-------------------+       +-------------------+|                           ||                           |v                           v+-------------------+       +-------------------+|                   |       |                   ||  数据可视化模块   |<----->|  用户界面         ||  (ECharts/Grafana)|       |  (Web/移动端)     ||                   |       |                   |+-------------------+       +-------------------+

2.2 模块功能

  1. 数据采集模块

    • 通过Modbus协议与传感器通信,采集温度、压力、流量等数据。
    • 支持Modbus RTU(RS485)和Modbus TCP两种通信方式。
    • 实现数据的解析和格式化。
  2. 数据存储模块

    • 将采集到的数据存储到MySQL或InfluxDB中。
    • 支持实时数据写入和历史数据查询。
  3. 数据可视化模块

    • 使用ECharts或Grafana实现数据的可视化展示。
    • 支持实时数据监控和历史数据分析。
  4. 用户界面

    • 提供Web或移动端界面,方便用户查看数据和分析结果。

3. 数据采集模块实现

在这里插入图片描述

3.1 Modbus协议简介

Modbus协议是一种主从式通信协议,支持以下功能码:

  • 0x01:读取线圈状态
  • 0x03:读取保持寄存器
  • 0x04:读取输入寄存器
  • 0x06:写入单个保持寄存器

3.2 数据采集流程

  1. 初始化通信参数

    • 设置Modbus通信参数(波特率、数据位、停止位等)。
    • 配置传感器地址和寄存器地址。
  2. 读取传感器数据

    • 使用Modbus功能码读取传感器数据。
    • 解析返回的数据包,提取有效数据。
  3. 数据格式化

    • 将原始数据转换为实际物理量(如温度、压力等)。
    • 添加时间戳和数据标签。

3.3 代码实现

from pymodbus.client.sync import ModbusSerialClient as ModbusClient# 初始化Modbus客户端
client = ModbusClient(method='rtu', port='/dev/ttyUSB0', baudrate=9600, timeout=1)# 连接传感器
if client.connect():print("Connected to sensor")# 读取保持寄存器(功能码0x03)response = client.read_holding_registers(address=0, count=2, unit=1)if not response.isError():# 解析数据raw_value = response.registers[0]temperature = raw_value / 10.0  # 假设数据需要除以10print(f"Temperature: {temperature}°C")else:print("Error reading data")# 关闭连接client.close()
else:print("Failed to connect to sensor")

4. 数据存储模块实现

在这里插入图片描述

4.1 数据库设计

  1. MySQL表结构

    CREATE TABLE sensor_data (id INT AUTO_INCREMENT PRIMARY KEY,sensor_id VARCHAR(50) NOT NULL,value FLOAT NOT NULL,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
    );
    
  2. InfluxDB数据结构

    • Measurement:sensor_data
    • Tags:sensor_id
    • Fields:value
    • Timestamp:自动生成

4.2 数据存储流程

  1. 连接数据库

    • 使用Python的MySQL或InfluxDB客户端库连接数据库。
  2. 写入数据

    • 将采集到的数据插入到数据库中。

4.3 代码实现

MySQL版本
import mysql.connector# 连接MySQL数据库
db = mysql.connector.connect(host="localhost",user="root",password="password",database="sensor_db"
)# 插入数据
cursor = db.cursor()
sql = "INSERT INTO sensor_data (sensor_id, value) VALUES (%s, %s)"
values = ("sensor_1", 25.3)
cursor.execute(sql, values)
db.commit()
print("Data inserted")
InfluxDB版本
from influxdb import InfluxDBClient# 连接InfluxDB
client = InfluxDBClient(host='localhost', port=8086, database='sensor_db')# 写入数据
json_body = [{"measurement": "sensor_data","tags": {"sensor_id": "sensor_1"},"fields": {"value": 25.3}}
]
client.write_points(json_body)
print("Data written to InfluxDB")

5. 数据可视化模块实现

在这里插入图片描述

5.1 可视化工具选择

  1. ECharts

    • 适用于Web端实时数据展示。
    • 支持折线图、柱状图、仪表盘等多种图表类型。
  2. Grafana

    • 适用于历史数据分析和监控。
    • 支持多种数据源(如InfluxDB、MySQL)。

5.2 可视化实现

ECharts示例
<!DOCTYPE html>
<html>
<head><script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script>
</head>
<body><div id="chart" style="width: 600px; height: 400px;"></div><script>var chartDom = document.getElementById('chart');var myChart = echarts.init(chartDom);var option = {xAxis: {type: 'time'},yAxis: {type: 'value'},series: [{data: [],type: 'line'}]};myChart.setOption(option);// 模拟实时数据更新setInterval(function () {var now = new Date();var value = Math.random() * 100;option.series[0].data.push([now, value]);myChart.setOption(option);}, 1000);</script>
</body>
</html>
Grafana示例
  1. 配置InfluxDB数据源。
  2. 创建仪表盘,添加折线图面板。
  3. 设置查询语句:
    SELECT "value" FROM "sensor_data" WHERE "sensor_id" = 'sensor_1'
    

6. 系统部署与测试

在这里插入图片描述

6.1 部署环境

  • 硬件:工业网关、Modbus传感器、RS485通信模块。
  • 软件:Python 3.8、MySQL/InfluxDB、ECharts/Grafana。

6.2 测试流程

  1. 数据采集测试
    • 验证传感器数据是否正确采集。
  2. 数据存储测试
    • 验证数据是否成功写入数据库。
  3. 可视化测试
    • 验证数据是否实时展示在图表中。

7. 总结

在这里插入图片描述

本项目通过Modbus协议实现了传感器数据的采集、存储和可视化,为工业设备的实时监控和数据分析提供了完整的解决方案。通过模块化设计和灵活的技术选型,系统具有良好的扩展性和可维护性,能够满足不同场景的需求。


http://www.ppmy.cn/server/175763.html

相关文章

本地部署Deep Seek-R1,搭建个人知识库——笔记

目录 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 2&#xff1a;部署DeepSeek - R1模型 3&#xff1a;安装Cherry Studio 二、构建私有知识库 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 1.打开Ollama下载安装 未科学上网&#xff0c;I 先打开迅雷再下…

使用 Flask 进行简单服务器改造的详细步骤和代码

以下是一个使用 Flask 进行简单服务器改造的详细步骤和示例代码。Flask 是一个轻量级的 Python Web 框架&#xff0c;非常适合快速搭建 Web 服务器。 1. 安装 Flask 首先&#xff0c;确保你已经安装了 Python&#xff0c;然后使用 pip 来安装 Flask&#xff1a; pip install…

Django连接MySQL

Django连接MySQL 文章目录 Django连接MySQL[toc]一、命令行安装mysql客户端二、下载安装MySQL三、MySQL基本配置四、Django配置 一、命令行安装mysql客户端 1.安装pymysql和mysqlclient&#xff0c;并验证查看 python -m pip install pymysql python -m pip install mysqlcli…

PHP语言的死锁

PHP语言中的死锁现象探析 引言 在现代的计算机科学中&#xff0c;并发编程是一个重要的领域。随着多核处理器的发展&#xff0c;越来越多的应用程序需要同时处理多个任务。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;在处理并发请求时&#xff0c;死锁现象成为了一个…

基于jspm校园安全管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着信息时代的来临&#xff0c;过去信息校园安全管理方式的缺点逐渐暴露&#xff0c;本次对过去的校园安全管理方式的缺点进行分析&#xff0c;采取计算机方式构建校园安全管理系统。本文通过阅读相关文献&#xff0c;研究国内外相关技术&#xff0c;提出了一种集安全教…

PostgreSQL 多数据库集簇配置及多数据库复制方法【流程+代码实例】

PostgreSQL 多数据库集簇配置及多数据库复制方法 1. 多数据库集簇配置 安装下载完postgresql后&#xff0c;系统此时包含一个postgres用户和一个名为postgres的默认数据库。 PostgreSQL 基本命令 服务管理命令 # 停止和启动及重启PostgreSQL服务 sudo systemctl stop postgr…

硬件驱动——51单片机:寄存器、LED、动态数码管

目录 一、51单片机 1.寄存器 二、LED点灯 1.原理 2.封装函数 3.顺序点灯 4.特定位点灯 三、动态数码管 1.原理 2.封装函数 3.0~9跳变 4.顺序移位0~9跳变 一、51单片机 1.寄存器 51单片机共40个引脚&#xff0c;其中P0,P1,P2,P3是四个有8引脚的寄存器&#xff0…

如何在androidstudio开发环境中查看sqlite数据库(按新版本Android Studio Giraffe提供详细步骤和操作说明,附截图,代码)

如何在androidstudio开发环境中查看sqlite数据库&#xff08;按新版本Android Studio Giraffe提供详细步骤和操作说明&#xff0c;附截图&#xff0c;代码&#xff09;鹿溪IT工作室提供_android studio查看数据库-CSDN博客