STM32智能工业自动化监控系统教程
目录
- 引言
- 环境准备
- 智能工业自动化监控系统基础
- 代码实现:实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化
- 应用场景:工业自动化与管理
- 问题解决方案与优化
- 收尾与总结
1. 引言
智能工业自动化监控系统通过STM32嵌入式系统结合各种传感器、执行器和通信模块,实现对工业生产数据的实时监控、自动处理和数据传输。本文将详细介绍如何在STM32系统中实现一个智能工业自动化监控系统,包括环境准备、系统架构、代码实现、应用场景及问题解决方案和优化方法。
2. 环境准备
硬件准备
- 开发板:STM32F4系列或STM32H7系列开发板
- 调试器:ST-LINK V2或板载调试器
- 传感器:如温度传感器、压力传感器、液位传感器、加速度传感器等
- 执行器:如电磁阀、马达、继电器模块
- 通信模块:如Wi-Fi模块、LoRa模块
- 显示屏:如OLED显示屏
- 按键或旋钮:用于用户输入和设置
- 电源:电源适配器
软件准备
- 集成开发环境(IDE):STM32CubeIDE或Keil MDK
- 调试工具:STM32 ST-LINK Utility或GDB
- 库和中间件:STM32 HAL库和FreeRTOS
安装步骤
- 下载并安装STM32CubeMX
- 下载并安装STM32CubeIDE
- 配置STM32CubeMX项目并生成STM32CubeIDE项目
- 安装必要的库和驱动程序
3. 智能工业自动化监控系统基础
控制系统架构
智能工业自动化监控系统由以下部分组成:
- 数据采集模块:用于采集温度、压力、液位、加速度等数据
- 数据处理与控制模块:对采集的数据进行处理和分析,生成控制信号
- 通信与网络系统:实现工业数据与服务器或其他设备的通信
- 显示系统:用于显示系统状态和工业数据
- 用户输入系统:通过按键或旋钮进行设置和调整
功能描述
通过各种传感器采集工业数据,并实时显示在OLED显示屏上。系统通过数据处理和网络通信,实现对工业数据的监测和管理。用户可以通过按键或旋钮进行设置,并通过显示屏查看当前状态。
4. 代码实现:实现智能工业自动化监控系统
4.1 数据采集模块
配置温度传感器
使用STM32CubeMX配置ADC接口:
- 打开STM32CubeMX,选择您的STM32开发板型号。
- 在图形化界面中,找到需要配置的ADC引脚,设置为输入模式。
- 生成代码并导入到STM32CubeIDE中。
代码实现:
#include "stm32f4xx_hal.h"ADC_HandleTypeDef hadc1;void ADC_Init(void) {__HAL_RCC_ADC1_CLK_ENABLE();ADC_ChannelConfTypeDef sConfig = {0};hadc1.Instance = ADC1;hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;hadc1.Init.Resolution = ADC_RESOLUTION_12B;hadc1.Init.ScanConvMode = DISABLE;hadc1.Init.ContinuousConvMode = ENABLE;hadc1.Init.DiscontinuousConvMode = DISABLE;hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion = 1;hadc1.Init.DMAContinuousRequests = DISABLE;hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;HAL_ADC_Init(&hadc1);sConfig.Channel = ADC_CHANNEL_0;sConfig.Rank = 1;sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}uint32_t Read_Temperature(void) {HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);return HAL_ADC_GetValue(&hadc1);
}int main(void) {HAL_Init();SystemClock_Config();ADC_Init();uint32_t temperature_value;while (1) {temperature_value = Read_Temperature();HAL_Delay(1000);}
}
配置压力传感器
使用STM32CubeMX配置ADC接口:
- 打开STM32CubeMX,选择您的STM32开发板型号。
- 在图形化界面中,找到需要配置的ADC引脚,设置为输入模式。
- 生成代码并导入到STM32CubeIDE中。
代码实现:
#include "stm32f4xx_hal.h"ADC_HandleTypeDef hadc2;void ADC2_Init(void) {__HAL_RCC_ADC2_CLK_ENABLE();ADC_ChannelConfTypeDef sConfig = {0};hadc2.Instance = ADC2;hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;hadc2.Init.Resolution = ADC_RESOLUTION_12B;hadc2.Init.ScanConvMode = DISABLE;hadc2.Init.ContinuousConvMode = ENABLE;hadc2.Init.DiscontinuousConvMode = DISABLE;hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc2.Init.NbrOfConversion = 1;hadc2.Init.DMAContinuousRequests = DISABLE;hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;HAL_ADC_Init(&hadc2);sConfig.Channel = ADC_CHANNEL_1;sConfig.Rank = 1;sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;HAL_ADC_ConfigChannel(&hadc2, &sConfig);
}uint32_t Read_Pressure(void) {HAL_ADC_Start(&hadc2);HAL_ADC_PollForConversion(&hadc2, HAL_MAX_DELAY);return HAL_ADC_GetValue(&hadc2);
}int main(void) {HAL_Init();SystemClock_Config();ADC2_Init();uint32_t pressure_value;while (1) {pressure_value = Read_Pressure();HAL_Delay(1000);}
}
配置液位传感器
使用STM32CubeMX配置I2C接口:
- 打打开STM32CubeMX,选择您的STM32开发板型号。
- 在图形化界面中,找到需要配置的I2C引脚,设置为I2C模式。
- 生成代码并导入到STM32CubeIDE中。
代码实现:
#include "stm32f4xx_hal.h"
#include "i2c.h"
#include "liquid_level_sensor.h"I2C_HandleTypeDef hi2c1;void I2C1_Init(void) {hi2c1.Instance = I2C1;hi2c1.Init.ClockSpeed = 100000;hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;hi2c1.Init.OwnAddress1 = 0;hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;hi2c1.Init.OwnAddress2 = 0;hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;HAL_I2C_Init(&hi2c1);
}uint32_t Read_Liquid_Level(void) {return Liquid_Level_Sensor_Read();
}int main(void) {HAL_Init();SystemClock_Config();I2C1_Init();Liquid_Level_Sensor_Init();uint32_t liquid_level;while (1) {liquid_level = Read_Liquid_Level();HAL_Delay(1000);}
}
配置加速度传感器
使用STM32CubeMX配置SPI接口:
- 打打开STM32CubeMX,选择您的STM32开发板型号。
- 在图形化界面中,找到需要配置的SPI引脚,设置为SPI模式。
- 生成代码并导入到STM32CubeIDE中。
代码实现:
#include "stm32f4xx_hal.h"
#include "spi.h"
#include "accelerometer.h"SPI_HandleTypeDef hspi1;void SPI1_Init(void) {hspi1.Instance = SPI1;hspi1.Init.Mode = SPI_MODE_MASTER;hspi1.Init.Direction = SPI_DIRECTION_2LINES;hspi1.Init.DataSize = SPI_DATASIZE_8BIT;hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;hspi1.Init.NSS = SPI_NSS_SOFT;hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;hspi1.Init.TIMode = SPI_TIMODE_DISABLE;hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;hspi1.Init.CRCPolynomial = 10;HAL_SPI_Init(&hspi1);
}void Read_Accelerometer(float* x, float* y, float* z) {Accelerometer_ReadAll(x, y, z);
}int main(void) {HAL_Init();SystemClock_Config();SPI1_Init();Accelerometer_Init();float x, y, z;while (1) {Read_Accelerometer(&x, &y, &z);HAL_Delay(1000);}
}
4.2 数据处理与控制模块
数据处理模块将传感器数据转换为可用于控制系统的数据,并进行必要的计算和分析。
工业自动化控制算法
实现一个简单的工业自动化控制算法,根据传感器数据控制电磁阀和马达:
#define TEMP_THRESHOLD 60.0
#define PRESSURE_THRESHOLD 100
#define LIQUID_LEVEL_THRESHOLD 80
#define ACCELERATION_THRESHOLD 1.5void Process_Industrial_Data(float temperature, uint32_t pressure, uint32_t liquid_level, float x, float y, float z) {if (temperature > TEMP_THRESHOLD || pressure > PRESSURE_THRESHOLD || liquid_level > LIQUID_LEVEL_THRESHOLD || x > ACCELERATION_THRESHOLD || y > ACCELERATION_THRESHOLD || z > ACCELERATION_THRESHOLD) {// 打开电磁阀和马达HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 电磁阀HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // 马达} else {// 关闭电磁阀和马达HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 电磁阀HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // 马达}
}void GPIOB_Init(void) {__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}int main(void) {HAL_Init();SystemClock_Config();GPIOB_Init();ADC_Init();ADC2_Init();I2C1_Init();SPI1_Init();Liquid_Level_Sensor_Init();Accelerometer_Init();float temperature, x, y, z;uint32_t pressure, liquid_level;while (1) {temperature = Read_Temperature();pressure = Read_Pressure();liquid_level = Read_Liquid_Level();Read_Accelerometer(&x, &y, &z);Process_Industrial_Data(temperature, pressure, liquid_level, x, y, z);HAL_Delay(1000);}
}
4.3 通信与网络系统实现
配置Wi-Fi模块
使用STM32CubeMX配置UART接口:
- 打打开STM32CubeMX,选择您的STM32开发板型号。
- 在图形化界面中,找到需要配置的UART引脚,设置为UART模式。
- 生成代码并导入到STM32CubeIDE中。
代码实现:
#include "stm32f4xx_hal.h"
#include "usart.h"
#include "wifi_module.h"UART_HandleTypeDef huart1;void UART1_Init(void) {huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;HAL_UART_Init(&huart1);
}void Send_Industrial_Data_To_Server(float temperature, uint32_t pressure, uint32_t liquid_level, float x, float y, float z) {char buffer[128];sprintf(buffer, "Temp: %.2f, Pressure: %lu, Liquid Level: %lu, X: %.2f, Y: %.2f, Z: %.2f",temperature, pressure, liquid_level, x, y, z);HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);
}int main(void) {HAL_Init();SystemClock_Config();UART1_Init();GPIOB_Init();ADC_Init();ADC2_Init();I2C1_Init();SPI1_Init();Liquid_Level_Sensor_Init();Accelerometer_Init();float temperature, x, y, z;uint32_t pressure, liquid_level;while (1) {temperature = Read_Temperature();pressure = Read_Pressure();liquid_level = Read_Liquid_Level();Read_Accelerometer(&x, &y, &z);Send_Industrial_Data_To_Server(temperature, pressure, liquid_level, x, y, z);HAL_Delay(1000);}
}
4.4 用户界面与数据可视化
配置OLED显示屏
使用STM32CubeMX配置I2C接口:
- 打打开STM32CubeMX,选择您的STM32开发板型号。
- 在图形化界面中,找到需要配置的I2C引脚,设置为I2C模式。
- 生成代码并导入到STM32CubeIDE中。
代码实现:
首先,初始化OLED显示屏:
#include "stm32f4xx_hal.h"
#include "i2c.h"
#include "oled.h"void Display_Init(void) {OLED_Init();
}
然后实现数据展示函数,将工业数据展示在OLED屏幕上:
void Display_Data(float temperature, uint32_t pressure, uint32_t liquid_level, float x, float y, float z) {char buffer[32];sprintf(buffer, "Temp: %.2f C", temperature);OLED_ShowString(0, 0, buffer);sprintf(buffer, "Pressure: %lu", pressure);OLED_ShowString(0, 1, buffer);sprintf(buffer, "Level: %lu", liquid_level);OLED_ShowString(0, 2, buffer);sprintf(buffer, "X: %.2f", x);OLED_ShowString(0, 3, buffer);sprintf(buffer, "Y: %.2f", y);OLED_ShowString(0, 4, buffer);sprintf(buffer, "Z: %.2f", z);OLED_ShowString(0, 5, buffer);
}int main(void) {HAL_Init();SystemClock_Config();I2C1_Init();Display_Init();GPIOB_Init();ADC_Init();ADC2_Init();I2C1_Init();SPI1_Init();Liquid_Level_Sensor_Init();Accelerometer_Init();float temperature, x, y, z;uint32_t pressure, liquid_level;while (1) {temperature = Read_Temperature();pressure = Read_Pressure();liquid_level = Read_Liquid_Level();Read_Accelerometer(&x, &y, &z);// 显示工业数据Display_Data(temperature, pressure, liquid_level, x, y, z);HAL_Delay(1000);}
}
⬇帮大家整理了单片机的资料
包括stm32的项目合集【源码+开发文档】
点击下方蓝字即可领取,感谢支持!⬇
点击领取更多嵌入式详细资料
问题讨论,stm32的资料领取可以私信!
5. 应用场景:工业自动化与管理
智能工厂管理
智能工业自动化监控系统可以用于工厂生产管理,通过实时监测和控制生产过程,提高生产效率和质量。
工业设备监控
在工业设备中,智能工业自动化监控系统可以实现对设备的实时监控和自动管理,确保设备的正常运行和安全。
智能仓储管理
智能工业自动化监控系统可以用于智能仓储管理,通过数据采集和分析,为仓储的管理和优化提供科学依据。
预测性维护
智能工业自动化监控系统可以用于预测性维护,通过自动化控制和数据分析,提前发现和解决设备问题,减少停机时间。
6. 问题解决方案与优化
常见问题及解决方案
传感器数据不准确
确保传感器与STM32的连接稳定,定期校准传感器以获取准确数据。
解决方案:检查传感器与STM32之间的连接是否牢固,必要时重新焊接或更换连接线。同时,定期对传感器进行校准,确保数据准确。
工业数据处理不稳定
优化处理算法和硬件配置,减少数据处理的不稳定性,提高系统反应速度。
解决方案:优化处理算法,调整参数,减少振荡和超调。使用高精度传感器,提高数据采集的精度和稳定性。选择更高效的处理器,提高数据处理的响应速度。
数据传输失败
确保Wi-Fi模块与STM32的连接稳定,优化通信协议,提高数据传输的可靠性。
解决方案:检查Wi-Fi模块与STM32之间的连接是否牢固,必要时重新焊接或更换连接线。优化通信协议,减少数据传输的延迟和丢包率。选择更稳定的通信模块,提升数据传输的可靠性。
显示屏显示异常
检查I2C通信线路,确保显示屏与MCU之间的通信正常,避免由于线路问题导致的显示异常。
解决方案:检查I2C引脚的连接是否正确,确保电源供电稳定。使用示波器检测I2C总线信号,确认通信是否正常。如有必要,更换显示屏或MCU。
优化建议
数据集成与分析
集成更多类型的传感器数据,使用数据分析技术进行工业状态的预测和优化。
建议:增加更多监测传感器,如振动传感器、噪声传感器等。使用云端平台进行数据分析和存储,提供更全面的工业监测和管理服务。
用户交互优化
改进用户界面设计,提供更直观的数据展示和更简洁的操作界面,增强用户体验。
建议:使用高分辨率彩色显示屏,提供更丰富的视觉体验。设计简洁易懂的用户界面,让用户更容易操作。提供图形化的数据展示,如实时工业参数图表、历史记录等。
智能化控制提升
增加智能决策支持系统,根据历史数据和实时数据自动调整工业管理策略,实现更高效的工业管理和控制。
建议:使用数据分析技术分析工业数据,提供个性化的工业管理建议。结合历史数据,预测可能的问题和需求,提前优化控制策略。
7. 收尾与总结
本教程详细介绍了如何在STM32嵌入式系统中实现智能工业自动化监控系统,从硬件选择、软件实现到系统配置和应用场景都进行了全面的阐述。通过合理的技术选择和系统设计,可以构建一个高效且功能强大的智能工业自动化监控系统。
相关文章:
STM32智能工业自动化监控系统教程
目录 引言环境准备智能工业自动化监控系统基础代码实现:实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:工业自动化与管理问题解决方案与优化收尾与总结 1. 引言 智能…...
WPF设置欢迎屏幕,程序启动过度动画
当主窗体加载时间过长,这时候基本都会想添加一个等待操作来响应用户点击,提高用户体验。下面我记录两个方法,一点拙见,仅供参考。 方法1:在App类中使用SplashScreen类。 protected override void OnStartup(StartupEventArgs e)…...
Flink实时开发添加水印的案例分析
在Flink中,处理时间序列数据时,通常需要考虑事件时间和水印(watermarks)的处理。以下是修改前后的代码对比分析: 修改前的代码: val systemDS unitDS.map(dp > {dp.setDeviceCode(DeviceCodeEnum.fro…...
收银系统源码-线上商城diy装修
线下线上一体化收银系统越来越受门店重视,尤其是连锁多门店,想通过线下线上相互带动,相互引流,提升门店营业额。商城商城如何装修呢? 1.收银系统开发语言 核心开发语言: PHP、HTML5、Dart后台接口: PHP7.3后合管理网…...
Linux中nohup(no hang up)不挂起,用于在系统后台不挂断地运行命令,即使退出终端也不会影响程序的运行。
nohup的英文全称是 no hang up,即“不挂起”。这个命令在Linux或Unix系统中非常有用,主要用于在系统后台不挂断地运行命令,即使退出终端也不会影响程序的运行。默认情况下(非重定向时),nohup会将输出写入一…...
【.NET全栈】ASP.NET开发Web应用——站点导航技术
文章目录 前言一、站点地图1、定义站点地图文件2、使用SiteMapPath控件3、SiteMap类4、URL地址映射 二、TreeView控件1、使用TreeView控件2、以编程的方式添加节点3、使用TreeView控件导航4、绑定到XML文件5、按需加载节点6、带复选框的TreeView控件 三、Menu控件1、使用Menu控…...
docker 容器内部UI映射host
方法有很多, 目前我总计一个我自己尝试成功的方法,通过xpra。 Xpra可以看作是screen或tmux的图形版本,支持远程X11应用程序的显示和交互。 在远程服务器上,安装Xpra: sudo apt-get install xpra启动Xpra服务器会话&…...
数仓面试题——DWS层新增维度字段需求
前言 在数据仓库开发中,数据仓库的设计和维护一直是一个备受关注的话题。随着业务需求的不断变化,数据仓库的结构也需要随之调整。 面试过程中,多次被提问:当DWS构建好后,突然来了一个新的需求,需要添加某个…...
Qt实现MDI应用程序
本文记录Qt实现MDI应用程序的相关操作实现 目录 1.MDM模式下窗口的显示两种模式 1.1TabbedView 页签化显示 1.2 SubWindowView 子窗体显示 堆叠cascadeSubWindows 平铺tileSubWindows 2.MDM模式实现记录 2.1. 窗体继承自QMainWindow 2.2.增加组件MdiArea 2.3.定义统一…...
逆向案例二十六——webpack自执行函数是完整的,但我们只需要加载器,某职业技术学校登陆密码逆向
网址:统一身份认证平台 找到登陆包,搜索找到加密位置。 找到加密位置,打上断点 分析,E就是加密结果 进入n.i函数,就是t.i,看一下这个函数,传一个值,然后不变的返回,所以没什么意义 …...
容器安全最佳实践和工具
容器安全最佳实践和工具 什么是容器安全 容器安全是指保护容器化应用程序和基础设施免受潜在威胁和攻击的措施和策略。容器化技术(如Docker、Kubernetes)使得应用程序能够在隔离的环境中运行,这既提供了灵活性,也引入了新的安全…...
牛客周赛 Round 51
目录 A.小红的同余 B.小红的三倍数 C.小红充电 D.小红的gcd E.小红走矩阵 F.小红的数组 这次周赛题目比较简单,算法题也基本上是板子题,出得很好(~ ̄▽ ̄)~ A.小红的同余 思路:签到题&am…...
【Linux】详解加锁实现线程互斥
一、多线程不加线程互斥可能会引发的问题 下面是一个抢标逻辑。抢票为什么会抢到负数:假设当票数为1时,此时四个进程的判断条件tickets都大于0,都会进入抢票操作,第一个进程抢完票以后tickets0并写回内存,第二个进程再…...
Java学习高级四
JDK8开始,接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…...
mmc-utils 的 MMC 测试工具
MMC 工具介绍 有一个名为 mmc-utils 的 MMC 测试工具,由 Ulf Hansson 维护,您可以在以下公共 git 存储库中找到它: mmc/mmc-utils.git - Unnamed repository; edit this file description to name the repository. 功能 mmc-utils 工具可以…...
使用Python Turtle绘制圣诞树和装饰
简介(❤ ω ❤) 在这篇文章中,我们将探索如何使用Python的Turtle模块来绘制一个充满节日气氛的圣诞树,以及一些可爱的装饰品。Turtle是一个受Logo语言启发的图形库,非常适合初学者学习编程和创建图形。 码农不是吗喽(大学生版&…...
非常好的新版网盘系统,是一款PHP网盘与外链分享程序,支持文件预览
这是一款PHP网盘与外链分享程序,支持所有格式文件的上传, 可以生成文件外链、图片外链、音乐视频外链,生成外链同时自动生成相应的UBB代码和HTML代码, 还可支持文本、图片、音乐、视频在线预览,这不仅仅是一个网盘&a…...
针对【module_or_function】的单元测试,全面覆盖可能的【edge_cases】
针对【module_or_function】的单元测试,全面覆盖可能的【edge_cases】 编写单元测试是为了验证代码模块或函数的正确性和鲁棒性。对于module_or_function,首先需要确定这个模块或函数的具体功能和预期输入范围。一个好的单元测试应该包括以下几个步骤&a…...
OTA测试!
OTA测试,全称“Over-The-Air Testing”,是一种无线通信设备的性能测试方法,主要用于评估设备在无线传输环境中的性能表现。以下是关于OTA测试的详细介绍: 一、定义与目的 OTA测试着重进行整机辐射性能方面的测试,以评…...
[H最短路] lc2959. 关闭分部的可行集合数目(Floyd最短路+二进制枚举+模板题)
文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:2959. 关闭分部的可行集合数目 2. 题目解析 看了看题好像还没啥思路,结果一看数据范围,好家伙…n 最大就 10 啊,那不直接闭眼直接 Floyd枚举所有情况即可吗?&…...
pyinstaller用法详解3
本文使用创作助手。 大家好,时隔多日,我又更新了pyinstaller的用法详解! 当然,这一次要比之前更详细,十分详细。 谢谢大家的支持,我们现在开始! 一、快速开始使用pyinstaller 我之前的文章…...
养猫新手不会挑智能猫砂盆?2024最新挑选干货分享!
不得不说智能猫砂盆真的帮了我很大的忙,四年以来我陆陆续续养了很多的猫咪,但是因为需要上班,所以有时候也对铲屎的工作有些力不从心,后面听了朋友的建议,去入手了智能猫砂盆,不得不说买智能猫砂盆也非常的…...
上海理工大学24计算机考研考情分析!初复试分值比55:45,复试逆袭人数不算多!
上海理工大学(University of Shanghai for Science and Technology),位于上海市,是一所以工学为主,工学、理学、经济学、管理学、文学、法学、艺术学等多学科协调发展的应用研究型大学;是上海市属重点建设大…...
Pandas库学习之DataFrame.drop()函数
Pandas库学习之DataFrame.drop()函数 一、简介 DataFrame.drop 是 Pandas 库中一个非常实用的函数,用于删除 DataFrame 中的行或列。通过指定列名或行索引,可以灵活地从数据集中移除不需要的数据。这对于数据清洗和预处理非常有用。 二、语法和参数 D…...
WHAT - 介绍一个不太一样的 UI 组件库 shadcn/ui
目录 一、介绍主要特点核心组件示例代码社区和支持总结 二、copy/paste1. 高度可定制性2. 避免依赖锁定3. 学习和理解4. 简化调试5. 项目需求变化 官方文档:https://ui.shadcn.com/docs 一、介绍 ShadCN (ShadCN/UI) 是一个现代的 React 组件库,旨在提…...
python--实验 11 模块
目录 知识点 模块基础 模块使用方式 自定义模块示例 模块的有条件执行 Python包结构 定义和导入包 常用第三方库及安装 实例代码 第三方库自动安装脚本 Python标准库介绍 PyInstaller 小结 实验 1.(基础题)制作文本进度条。 2.(基础题) 蒙特卡罗方法计算圆周率…...
Vue3+Vite+TS+Axios整合详细教程
1. Vite 简介 Vite是新一代的前端构建工具,在尤雨溪开发Vue3.0的时候诞生。类似于Webpack Webpack-dev-server。其主要利用浏览器ESM特性导入组织代码,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。生产中利用…...
【深度学习入门篇 ⑨】循环神经网络实战
【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…...
宝塔安装RabbitMq教程
需要放开15672端口,默认账号密码为guest/guest...
韦东山嵌入式linux系列-驱动进化之路:设备树的引入及简明教程
1 设备树的引入与作用 以 LED 驱动为例,如果你要更换LED所用的GPIO引脚,需要修改驱动程序源码、重新编译驱动、重新加载驱动。 在内核中,使用同一个芯片的板子,它们所用的外设资源不一样,比如A板用 GPIO A,…...
网站闪图怎么做的/宁波seo关键词优化
一、概述性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不…...
用什么自己做网站/专业网站建设公司
操作方法: 1、按住 SHIFT键 然后对文件或文件夹点击右键,我们就可以看到多了一项 “复制到路径” 选项。 2、只要点击 “复制到路径”,路径就复制到剪贴板中了, 然后就可以粘贴了。...
辽源建站公司/开发外包网站
动态链表之所以称之为动态,因为它的存储管理方便,用的时候申请空间,不用的时候释放掉空间。静态链表的目的就是通过函数实现模拟动态链表中的申请空间和释放空间,同是也要记录下一个节点的位置,那么需要解决几个问题。…...
一站式网络营销/长沙seo推广
相关函数: atof, atoi, atol, strtod, strtoul 表头文件: #include <stdlib.h> 定义函数: long int strtol(const char *nptr, char **endptr, int base) 函数说明: strtol()会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数b…...
做电影网站需要用什么空间/seo整站优化解决方案
今天 在写 laravel 查询 反复修改 查询语句 toSql()打印 出来sql 复制 到数据库上 也是直接查询 但是 laravel 就是报错 后来 反复尝试 都没 问题后来找到 关键了 config/ database.php 文件中 就是它 把他改为false 就没问题了。...
做网站外包的公司好干嘛/seo基础知识包括什么
交流信号采集,通常采用专用的电能芯片和互感器去实现。若能写芯片的驱动程序,实现交流信号的数据采集,还是很容易的,就是硬件成本较高。下面是一个硬件成本较低的、交流电压信号全波整流电路,在实际应用中,…...