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

基于STM32的电能监控系统设计:ModBus协议、RS-485存储和分析电能数据(代码示例)

在这里插入图片描述

一、项目概述

随着智能电网的发展,电能管理的科学性与有效性变得越来越重要。本项目旨在设计并实现一个基于STM32103C8T6单片机的电能监控系统,该系统可以实时采集、存储和分析电能数据,帮助用户实现对电能的高效管理。

项目目标

  • 实时监控:实现对电能数据的实时监控与显示。

  • 数据存储:将采集的数据进行长期存储,便于后续分析。

  • 科学分析:通过数据分析,提供电能使用的科学管理建议。

技术栈关键词

  • 硬件:STM32、MODBUS、RS-485、无线通信

  • 软件:STM32 HAL库、Python、Pandas、MATLAB

二、系统架构

1. 系统架构设计

本系统分为上下位机两部分,上位机负责数据的可视化、存储与分析,下位机负责电能数据的采集与初步处理。

  • 下位机:使用STM32103C8T6作为核心控制器,负责通过传感器采集电流和电压数据。

  • 上位机:PC端应用程序,通过串口与下位机进行数据通信,负责数据的展示与存储。

2. 硬件选择

  • 单片机:STM32103C8T6,具备多种通信接口和足够的计算能力。

    • 传感器:使用ACS712电流传感器和ZMPT101B电压传感器,实现电流和电压的精准测量。
  • 通信模块:

    • RS-485:用于远距离数据传输,适合工业环境。

    • 无线模块:如ESP8266,用于实现无线数据传输。

3. 系统架构图

系统架构图如下:

数据接收
采集电能数据
采集电能数据
485/Wi-Fi
Modbus协议
上位PC机
下位机
电流传感器
电压传感器
数据传输
数据存储与分析

三、环境搭建与注意事项

1. 开发环境搭建

  • 硬件设备:

    • STM32103C8T6开发板

    • ACS712电流传感器

    • ZMPT101B电压传感器

    • RS-485转USB模块

    • ESP8266无线模块

  • 软件工具:

    • 开发环境:Keil MDK或STM32CubeIDE

    • 通信库:Modbus RTU库

    • 数据分析工具:Python、Pandas、Matplotlib

2. 注意事项

  • 电源管理:确保单片机和传感器的电源稳定,避免过压或欠压对系统的影响。

  • 信号完整性:在RS-485通信中,确保线缆的长度和阻抗匹配,减少信号反射和干扰。

  • 数据安全:在无线通信中,考虑使用加密措施以防止数据泄露。

四、代码实现过程

1. 下位机数据采集模块

下位机代码使用C语言编写,主要功能是读取电流和电压数据,并通过Modbus协议发送给上位机。

下位机数据采集代码示例:

#include "stm32f1xx_hal.h"
#include "modbus.h"

float voltage, current, power;

void CollectData() {
    voltage = ReadVoltage();
    current = ReadCurrent();
    power = voltage * current;
    
    // 通过Modbus发送数据
    ModbusSend(power);
}

float ReadVoltage() {
    // 读取电压值的代码
    return GetAnalogValue(VOLTAGE_CHANNEL);
}

float ReadCurrent() {
    // 读取电流值的代码
    return GetAnalogValue(CURRENT_CHANNEL);
}

void ModbusSend(float power) {
    // 使用Modbus协议将功率数据发送到上位机
    uint8_t data[8];
    memcpy(data, &power, sizeof(power));
    Modbus_WriteRegisters(POWER_REGISTER_ADDRESS, data, sizeof(data));
}

void main() {
    HAL_Init();
    Modbus_Init();
    while (1) {
        CollectData();
        HAL_Delay(1000);  // 每秒采集一次数据
    }
}

2. 上位机数据接收与存储模块

上位机使用Python编写,通过串口接收数据并进行存储和分析。

上位机数据接收代码示例:

import serial
import pandas as pd
import time

# 初始化参数
COM_PORT = 'COM3'
BAUD_RATE = 9600
power_data = []

def read_data():
    with serial.Serial(COM_PORT, BAUD_RATE) as ser:
        while True:
            if ser.in_waiting > 0:
                data = ser.read(8)  # 读取8个字节
                power = float.from_bytes(data, byteorder='little')
                process_data(power)

def process_data(power):
    power_data.append(power)
    print(f"Received Power: {power}")
    
    # 保存数据到CSV文件
    df = pd.DataFrame(power_data, columns=['Power'])
    df.to_csv('power_data.csv', index=False)

if __name__ == "__main__":
    read_data()

3. 数据分析模块

在数据存储后,可以使用Python的Pandas库进行数据分析,如计算功率的统计信息、绘图等。

数据分析示例:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
data = pd.read_csv('power_data.csv')

# 计算统计信息
mean_power = data['Power'].mean()
max_power = data['Power'].max()
min_power = data['Power'].min()

print(f"Mean Power: {mean_power}, Max Power: {max_power}, Min Power: {min_power}")

# 绘制功率变化图
plt.plot(data['Power'])
plt.title('Power Consumption Over Time')
plt.xlabel('Time')
plt.ylabel('Power (W)')
plt.grid()
plt.show()

4. 时序图

以下是下位机和上位机之间数据传输的时序图:

上位PC机 下位机 传感器 采集电能数据 发送数据 数据处理与存储 上位PC机 下位机 传感器

五、项目总结

本项目成功实现了基于STM32103C8T6的电能监控系统,系统能够实时采集电流和电压数据,并通过RS-485和无线通信将数据传输至上位机进行存储和分析。

主要功能

  1. 数据采集:通过电流和电压传感器实时采集电能数据。

  2. 数据传输:采用Modbus协议,保证数据传输的安全可靠。

  3. 数据存储与分析:上位机应用程序能够实时接收数据,并将数据存储为CSV文件,方便后续的分析和可视化。

实现过程

  • 硬件选择与环境搭建:根据项目需求选择合适的硬件组件,并搭建开发环境。

  • 编写下位机程序:实现数据采集、处理与传输功能。

  • 上位机程序开发:实现数据接收、存储与分析功能。


http://www.kler.cn/a/420741.html

相关文章:

  • 003-SpringBoot整合Pagehelper
  • Python实现网站资源批量下载【可转成exe程序运行】
  • 第四十四篇 EfficientNetV1、V2模型详解
  • SpringBoot集成Milvus|(实现向量的存储和查询)
  • 【大数据学习 | Spark-SQL】关于RDD、DataFrame、Dataset对象
  • mvc基础及搭建一个静态网站
  • 使用kaggle提供的免费gpu来实现语音克隆
  • Proxy与CGLib代理:深入解析与应用
  • 5.vue3+openlayers加载ArcGIS地图示例
  • Kafka 图形化工具 Eagle安装
  • ios上滚动条不能滑动 滚动卡住的问题
  • HTTP协议详解:从HTTP/1.0到HTTP/3的演变与优化
  • 在超表面中琼斯矩阵的使用
  • vue3+element-plus多选框全选与单选
  • matlab 中的 bug
  • K8S控制台kubernetes-dashboard快速安装
  • RHCE: SELinux
  • 力扣第81题 搜索旋转排序数组 II
  • SHELL脚本2(Linux网络服务器 23)
  • 如何运用Java爬虫获得1688商品详情数据
  • 架构03-事务处理
  • YunSDR通信小课堂-10
  • 扩展欧几里得——acwing
  • dify接入ollama模型报错:max retries exceeded with url
  • Java的反射(Reflection)
  • AWTK fscript 中的 串口 扩展函数