基于STM32的电解加工机床数据采集可视化Qt系统设计流程

一、项目概述

1.1 项目目标与用途

在现代制造业中,电解加工机床因其高精度和高效率而广泛应用于复杂零件的加工。为了提高加工质量并降低故障率,实时监测加工过程中各项参数(如电流、电压、温度等)变得尤为重要。本项目旨在研发一套基于STM32微控制器的数据采集系统,能够实时采集多种传感器的数据,并将数据传输至上位机进行可视化处理和分析。该系统的主要目标包括:

  • 实时监控:实现对加工过程中的关键参数的实时监控,提高生产效率。

  • 数据分析:为后续的数据分析和加工优化提供基础数据支持。

  • 报警功能:当监测到的参数超过设定的阈值时,及时发出报警通知操作人员,以减少设备损坏和生产事故的发生。

1.2 技术栈关键词

  • 硬件:STM32F103RCT6微控制器、各类电流传感器、电压传感器、温度传感器、RS485通信模块、RS232通信模块。

  • 软件:Qt、Modbus RTU协议、STM32 HAL库、数据可视化工具。

二、系统架构

2.1 系统架构设计

本数据采集系统主要由三个核心部分组成:传感器模块、数据采集模块和上位机。系统架构设计旨在确保数据采集的实时性、准确性和可靠性。

  • 传感器模块:用于采集电解加工过程中所需的各种参数,具体包括电流、电压和温度等传感器。传感器通过RS485接口连接至数据采集模块,确保数据传输的稳定性和抗干扰能力。

  • 数据采集模块:以STM32F103RCT6为核心,负责接收传感器数据、进行数据处理和通过RS232接口将数据传输至上位机。数据采集模块通过Modbus RTU协议与上位机进行通信,确保数据格式的标准化和可解析性。

  • 上位机:使用Qt开发的可视化界面,实时显示传感器数据,支持数据的保存和分析,并具备报警功能,用于在传感器数据超过设定阈值时及时通知操作人员。

2.2 系统架构图

RS485
RS232
Modbus RTU
数据可视化
限位报警
传感器模块
数据采集模块
上位机
用户界面

三、环境搭建与注意事项

3.1 环境搭建

3.1.1 硬件连接
  • STM32F103RCT6微控制器与各类传感器之间采用RS485总线连接,确保数据采集的稳定性和实时性。在总线末端添加适当的终端电阻,以减少信号反射。

  • RS232模块与上位机连接,确保数据的无误传输。

3.1.2 软件开发环境
  • 开发工具:使用STM32CubeIDE或Keil进行STM32的固件开发,确保代码的高效性和可维护性。

  • 上位机开发:使用Qt Creator进行上位机软件的开发,采用Qt Widgets进行用户界面设计。

  • Modbus RTU库:选择开源的Modbus RTU库(如libmodbus)以支持数据通信,确保协议的标准化和兼容性。

3.2 注意事项

  • 电源管理:确保所有设备的电源及接地良好,避免因电源不稳定导致的设备误操作。

  • 通信稳定性:在RS485和RS232通信时,需定期检查连接线和接口,保持良好的接触,以避免数据传输中断。

四、代码实现过程

在本项目中,系统功能模块主要分为以下几个部分:传感器数据采集模块、数据处理与传输模块以及上位机显示与报警模块。以下将详细介绍每个功能模块的实现过程、代码示例及其说明。

4.1 传感器数据采集模块

4.1.1 功能描述

传感器数据采集模块的主要功能是通过RS485接口从多个传感器中实时获取数据。该模块使用STM32F103RCT6微控制器进行控制,定期读取传感器数据并进行初步处理。

4.1.2 硬件连接
  • 传感器通过RS485总线连接至STM32F103RCT6的UART接口。每个传感器都有唯一的地址,以便于区分和选择。

  • RS485收发器需要连接至STM32的GPIO引脚,以控制数据的发送和接收状态。

4.1.3 代码示例

以下是传感器数据采集模块的代码示例:

#include "stm32f1xx_hal.h"// 定义传感器数据结构体
typedef struct {uint16_t current; // 电流uint16_t voltage; // 电压float temperature; // 温度
} SensorData;SensorData sensorData;// UART句柄
extern UART_HandleTypeDef huart1;// 定义传感器地址
#define SENSOR_ADDRESS 0x01// 读取传感器数据
void readSensorData() {uint8_t request[8];uint8_t response[32];// 构建Modbus RTU请求帧request[0] = SENSOR_ADDRESS; // 从站地址request[1] = 0x03;           // 功能码:读寄存器request[2] = 0x00;           // 起始地址高字节request[3] = 0x00;           // 起始地址低字节request[4] = 0x00;           // 读寄存器数量高字节request[5] = 0x03;           // 读寄存器数量低字节// 计算CRCuint16_t crc = calculateCRC(request, 6);request[6] = crc & 0xFF;     // CRC低字节request[7] = (crc >> 8) & 0xFF; // CRC高字节// 发送请求HAL_UART_Transmit(&huart1, request, sizeof(request), HAL_MAX_DELAY);// 接收响应HAL_UART_Receive(&huart1, response, sizeof(response), HAL_MAX_DELAY);// 解析响应数据sensorData.current = (response[3] << 8) | response[4];sensorData.voltage = (response[5] << 8) | response[6];sensorData.temperature = (float)((response[7] << 8) | response[8]) / 10.0; // 假设温度数据以0.1°C为单位
}// CRC校验函数
uint16_t calculateCRC(uint8_t* data, uint8_t length) {uint16_t crc = 0xFFFF;for (uint8_t pos = 0; pos < length; pos++) {crc ^= (uint16_t)data[pos]; // XOR byte into least sig. byte of crcfor (uint8_t i = 8; i != 0; i--) { // Loop over each bitif ((crc & 0x0001) != 0) { // If the LSB is setcrc >>= 1; // Shift right and XOR 0xA001crc ^= 0xA001;} else { // Else just shift rightcrc >>= 1;}}}return crc;
}
4.1.4 代码说明
  • 数据结构:定义了一个SensorData结构体,用于存储传感器采集的电流、电压和温度数据。

  • UART传输:使用UART接口发送Modbus RTU请求,读取传感器的数据。请求帧中包括从站地址、功能码、起始地址和读取数量,并通过calculateCRC函数计算CRC校验码以确保数据的完整性。

  • 响应解析:接收到的响应帧解析后将数据存储到SensorData结构体中。

4.2 数据处理与传输模块

4.2.1 功能描述

数据处理与传输模块的主要功能是对采集到的传感器数据进行处理,并通过RS232接口将数据传送至上位机。该模块还负责实现报警功能,当某一传感器数据超过预设阈值时,系统将触发报警。

4.2.2 代码示例

以下是数据处理与传输模块的代码示例:

#include "stm32f1xx_hal.h"// 定义报警阈值
#define CURRENT_THRESHOLD 500 // 500mA
#define VOLTAGE_THRESHOLD 2200 // 220Vextern UART_HandleTypeDef huart2;// 发送数据到上位机
void sendDataToPC() {uint8_t modbusFrame[8];// 构建Modbus RTU数据发送帧modbusFrame[0] = 0x01; // 从站地址modbusFrame[1] = 0x03; // 功能码modbusFrame[2] = sizeof(SensorData); // 数据长度modbusFrame[3] = (sensorData.current >> 8) & 0xFF; // 电流高字节modbusFrame[4] = sensorData.current & 0xFF; // 电流低字节modbusFrame[5] = (sensorData.voltage >> 8) & 0xFF; // 电压高字节modbusFrame[6] = sensorData.voltage & 0xFF; // 电压低字节modbusFrame[7] = calculateCRC(modbusFrame, 7); // CRC校验// 发送数据HAL_UART_Transmit(&huart2, modbusFrame, sizeof(modbusFrame), HAL_MAX_DELAY);
}// 检查传感器数据并触发报警
void checkAlarm() {if (sensorData.current > CURRENT_THRESHOLD) {// 触发电流报警triggerAlarm("Current exceeds threshold!");}if (sensorData.voltage > VOLTAGE_THRESHOLD) {// 触发电压报警triggerAlarm("Voltage exceeds threshold!");}
}// 报警处理函数
void triggerAlarm(const char* message) {// 通过蜂鸣器或LED灯等方式发出报警HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 假设GPIO_PIN_0为报警输出// 发送报警信息到上位机HAL_UART_Transmit(&huart2, (uint8_t*)message, strlen(message), HAL_MAX_DELAY);
}
4.2.3 代码说明
  • 报警阈值:定义了电流和电压的报警阈值,当传感器数据超过这些值时,将触发相应的报警。

  • 数据发送:使用UART接口通过Modbus RTU协议将传感器数据发送到上位机。数据帧包括从站地址、功能码和数据长度,最后计算并附加CRC校验。

  • 报警功能:在checkAlarm函数中判断电流和电压是否超过设定的阈值,并调用triggerAlarm函数进行报警处理。报警可以通过GPIO引脚控制蜂鸣器或LED灯实现。

4.3 上位机显示与报警模块

4.3.1 功能描述

上位机模块的主要功能是通过Qt开发一个用户界面,实时显示传感器数据,并提供数据保存和报警信息显示的功能。用户可以通过界面设置报警阈值,并接收来自数据采集模块的实时数据和报警信息。

4.3.2 开发环境
  • Qt环境:确保安装Qt Creator和Qt SDK,配置好Qt Widgets模块。

  • Modbus RTU支持:使用libmodbus库或QtModbus库来实现Modbus RTU协议的支持。

4.3.3 代码示例

下面是上位机显示与报警模块的代码示例:

#include <QApplication>
#include <QMainWindow>
#include <QTimer>
#include <QLabel>
#include <QMessageBox>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void readSerialData();void checkAlarmThreshold();private:QLabel *currentLabel;QLabel *voltageLabel;QLabel *temperatureLabel;QSerialPort *serialPort;QTimer *timer;const int currentThreshold = 500; // 电流阈值const int voltageThreshold = 2200; // 电压阈值
};MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {currentLabel = new QLabel(this);voltageLabel = new QLabel(this);temperatureLabel = new QLabel(this);// 设置串口serialPort = new QSerialPort(this);serialPort->setPortName("COM3"); // 根据实际情况修改serialPort->setBaudRate(QSerialPort::Baud9600);serialPort->setDataBits(QSerialPort::Data8);serialPort->setParity(QSerialPort::NoParity);serialPort->setStopBits(QSerialPort::OneStop);serialPort->open(QIODevice::ReadOnly);// 设置定时器,每500毫秒读取一次数据timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &MainWindow::readSerialData);timer->start(500);
}MainWindow::~MainWindow() {serialPort->close();
}void MainWindow::readSerialData() {QByteArray data = serialPort->readAll();// 解析数据并更新UIif (data.size() >= 6) { // 假设数据总是6个字节int current = (data[3] << 8) | data[4];int voltage = (data[5] << 8) | data[6];// Update labelscurrentLabel->setText("Current: " + QString::number(current) + " mA");voltageLabel->setText("Voltage: " + QString::number(voltage) + " V");// 检查报警阈值if (current > currentThreshold) {QMessageBox::warning(this, "报警", "电流超出阈值!");}if (voltage > voltageThreshold) {QMessageBox::warning(this, "报警", "电压超出阈值!");}}
}
4.3.4 代码说明
  • 串口配置:使用QSerialPort类设置与STM32微控制器的串口通信。根据实际情况配置串口号和波特率。

  • 数据读取:通过定时器定期读取串口数据,并解析数据。假设数据格式为固定长度,解析数据后更新界面上显示的电流和电压。

  • 报警功能:检查电流和电压是否超过设定的阈值,如果超过,则弹出报警框提示用户。

五、项目总结

本项目成功研发了一套基于STM32的电解加工机床数据采集系统,主要功能包括:

  1. 数据采集:系统能够通过RS485接口从多种传感器实时采集电流、电压和温度数据。

  2. 数据处理与传输:采集到的数据经过处理后,通过RS232接口以Modbus RTU协议传输至上位机。

  3. 数据可视化:上位机界面实时显示传感器数据,并能根据设定的阈值进行报警。

  4. 报警功能:在电流或电压超出设定范围时,系统能够及时发出报警信号,提示操作人员。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇python的pandas数据分析,分组与聚合使用!

在数据分析中,数据分组与聚合是常用的操作,能够帮助我们从大量数据中提取出有用的信息.我们讨论了描述性统计,了解了如何通过均值、方差等统计量概述数据的特征.而在本篇中,我们将学习如何对数据进行分组和聚合,以便进行更深入的分析.最后,我们将在后续的章节中使用这些分析结果…

PHP政务招商系统——高效连接共筑发展蓝图

政务招商系统——高效连接&#xff0c;共筑发展蓝图 &#x1f3db;️ 一、政务招商系统&#xff1a;开启智慧招商新篇章 在当今经济全球化的背景下&#xff0c;政务招商成为了推动地方经济发展的重要引擎。而政务招商系统的出现&#xff0c;更是为这一进程注入了新的活力。它…

ES(Elasticsearch)SSL集群部署

8.x后ES不在需要自行准备JDK环境&#xff0c;部署的服务包含ES、Kibana、Logstash&#xff0c;使用二进制方式部署&#xff0c;为了提高安全性&#xff0c;加密logstash、kibana及其他客户端到ES间的通信。 1、准备工作 1.1、 es无法使用root用户启动 useradd -m -s /bin/bas…

WebGl 使用uniform变量动态修改点的颜色

在WebGL中&#xff0c;uniform变量用于在顶点着色器和片元着色器之间传递全局状态信息&#xff0c;这些信息在渲染过程中不会随着顶点的变化而变化。uniform变量可以用来设置变换矩阵、光照参数、材料属性等。由于它们在整个渲染过程中共享&#xff0c;因此可以被所有使用该着色…

一文解读PMP认证,到底值不值得考?

随着项目管理在各行各业的普及&#xff0c;PMP证书作为项目管理领域的“金字招牌”备受关注&#xff0c;但PMP证书真的值得你去考取吗&#xff1f; 一、PMP是什么&#xff1f; PMP证书由美国项目管理协会&#xff08;PMI&#xff09;颁发&#xff0c;旨在评估项目管理者的专业…

【C#网络编程】基础概念2

文章目录 网络、数据包和协议网络数据包协议TCP、UDP 地址客户端和服务器套接字 网络、数据包和协议 计算机网络通过通信通道互连的机器组成&#xff0c;通常把这些机器称为主机和路由器&#xff0c;主机是是运行应用程序&#xff08;如 Web 浏览器&#xff09;的计算机。路由器…

决战Linux操作系统

前言&#xff1a; 你是否也曾经为Linux所困扰过&#xff0c;在网上找的资料零零散散&#xff0c;是否学完Linux后还是懵懵懂懂&#xff0c;别怕&#xff0c;这篇博客是博主精心为你准备的&#xff0c;现在&#xff0c;就让我们一起来走进Linux的世界&#xff0c;决战Linux&…

一文详解数据库范式

背景 在开发中&#xff0c;我们经常需要考虑如何设计合适的表结构&#xff0c;而则往往需要考虑数据库的范式。数据库的三范式&#xff08;3NF&#xff09;是数据库设计过程中用来减少数据冗余和提高数据一致性的重要规则。它们分别是第一范式&#xff08;1NF&#xff09;、第二…

SpringSecurity框架核心组件详解

Spring Security 是一个功能强大且灵活的身份验证和访问控制框架&#xff0c;在很多项目中都会采用该框架来实现权限控制功能。 Authentication&#xff08;身份验证&#xff09;&#xff1a;用于验证用户的身份&#xff0c;通常通过用户名和密码进行身份验证。Authorization&…

oracle数据坏块处理(一)-通过rman备份修复

表有坏块时&#xff0c;全表查询会报错&#xff1a; 这时候如果有前面正常的rman备份&#xff0c;那么我们就可以通过rman备份直接对数据文件块做恢复 先对数据文件做个逻辑检查&#xff1a; RMAN> backup check logical VALIDATE DATAFILE EXB_DATA/exb/datafile/cuteinf…

C#中Assembly3个获取路径的方法

在C#中&#xff0c;经常要获取路径 &#xff0c;可以通过Assembly的三个重载方法来获取&#xff0c;如下所示这三个分别是GetCallingAssembly、GetEntryAssembly和GetExecutingAssembly。 string tmpEntryPath Assembly.GetEntryAssembly().Location;string tmpExeasmPath As…

【VUE】会员管理(增删改查)

前端 router/index.js import { createRouter, createWebHistory } from vue-router import {userInfoStore} from "/stores/user.js";const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: /login,name: login,comp…

SpringBoot智能推荐:健康生活新趋势

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于智能推荐的卫生健康系统的开发全过程。通过分析基于智能推荐的卫生健康系统管理的不足&#xff0c;创建了一个计算机管理基于智能推荐的卫生健康系统的方案。…

STM32CubeIDE使用ADC采用DMA重大BUG

问题描述 STM32CubeIDE 1.8.0问题 大牛攻城狮最近调试STM32L151CBT6。由于项目上使用该款芯片做控制电源使用&#xff0c;其中涉及到多路ADC的数据采样。使用STM32CubeIDE 1.8.0版本详细如下图所示 这里大概率是STM32CubeMX版本太低了&#xff0c;从图上看才是6.4.0 注意这里…

五、UI弹窗提示

一、制作弹窗UI 二、创建脚本 1、继承WindowRoot&#xff08;UI基类&#xff09; 获取UI上面的组件 2、初始化 将这个文本失活 3、写一个提示出现的方法 这个派生类中&#xff0c;继承了基类的两个方法&#xff0c;设置显示和设置文本 对应基类的这两个方法 将动画赋值给动…

shell $ 用法

Shell脚本中$符号的几种用法小结_linux shell_脚本之家 Shell 传递参数 | 菜鸟教程 $ 符号说明$0Shell 的命令本身1到9表示 Shell 的第几个参数$?显示最后命令的执行情况$#传递到脚本的参数个数$$脚本运行的当前进程 ID 号$*以一个单字符串显示所有向脚本传递的参数$!后台运行…

25.1 降低采集资源消耗的收益和无用监控指标的判定依据

本节重点介绍 : 降低采集资源消耗的收益哪些是无用指标&#xff0c;什么判定依据 通过 grafana的 mysql 表获取所有的 查询表达式expr通过 获取所有的prometheus rule文件获取所有的 告警表达式expr通过 获取所有的prometheus 采集器接口 获取所有的采集metrics计算可得到现在…

机器学习、深度学习评价指标汇总:TP、TN、FP、FN、AP、mAP、IoU、mAP@3、Prec@10、 Acc@10

系列文章目录 文章目录 系列文章目录一、真正例&#xff08;True Positive&#xff09;、假正例&#xff08;False Positive&#xff09;、真负例&#xff08;True Negative&#xff09;和假负例&#xff08;False Negative&#xff09;是评估分类模型性能的重要概念。1. 定义2…

前端学习-css的元素显示模式(十五)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 什么是元素显示模式 块元素 常见的块元素 块元素的特点 注意 行内元素 行内元素的特点 注意 行内块元素 行内块元素的特点 元素显示模式的转换 语法格…

MySQL 删除数据库

1.使用命令行删除一个数据库 1.1 首先登陆进入 MySQL 操作界面&#xff0c;命令如下&#xff1a; 命令 : mysql -utest -p;1.2 登陆成功之后可以使用如下命令查看当前已有数据库&#xff1a; 命令 : SHOW DATABASES; 执行结果如下图: 如图所示当前已包含 MySQL 系统数据库和…