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

【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识

STM32-FOC(1)STM32 电机控制的软件开发环境
STM32-FOC(2)STM32 导入和创建项目
STM32-FOC(3)STM32 三路互补 PWM 输出
STM32-FOC(4)IHM03 电机控制套件介绍
STM32-FOC(5)基于 IHM03 的无感方波控制
STM32-FOC(6)基于 IHM03 的无感FOC 控制
STM32-FOC(7)MCSDK Pilot 上位机控制与调试
STM32-FOC(8)MCSDK Profiler 电机参数辨识

【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识

    • 1. 开发环境
    • 2. 硬件连接
    • 3. 创建电机控制项目
      • 3.1 配置电机控制包
      • 3.2 图形化配置
      • 3.3 代码编辑、编译与调试
    • 4. 电机参数辨识和使用
      • 4.1 电机参数辨识
      • 4.2 使用辨识的电机参数

P-NUCLEO-IHM03 STM32电机控制套件,为三相、低压和低电流的 BLDC 或 PMSM 电机提供电机控制解决方案。此前我们已经学习了使用 IHM03 电机控制套件开发无感 FOC 电机控制程序的基础操作。

从 MCSDK6.2.0 之后,用户需要自己生成工程编译固件(firmware)将 电机参数下载到目标板上。本节以 MCSDK 6.3 为例,详细介绍使用 MCSDK Profile 辨识电机参数的工程。


1. 开发环境

  1. 硬件要求
  • Windows PC
  • X-NUCLEO-IHM16M1 电机驱动扩展板
  • STM32 Nucleo 开发板
  • 直流电源,输出电压 12 VDC
  • 三相直流无刷电机
  • USB Type-A 或 Type-c 至 Micro-B 连接线缆
  1. 系统要求:
  • Windows 操作系统(Windows 7、Windows 8 和 Windows 10)、Linux 64-bit 或 macOS
  • USB Type-A 或 Type-c 至 Micro-B 连接线缆,用于将STM32 Nucleo板连接到 PC
  1. 开发工具
  • STM32 电机控制 SDK:X-CUBE-MCSDK
  • STM32 图形化配置工具:STM32CubeMX
  • 集成开发环境 IDE,可以选择一下三者之一:
    • STM32 集成开发环境(STM32CubeIDE)
    • Keil 开发套件(MDK-ARM-STR)
    • IAR 嵌入式开发环境(IAR-EWARM)

2. 硬件连接

  1. X-NUCLEO-IHM16M1 电机驱动板必须通过位于两侧的 CN7 和 CN10 连接器插接到 NUCLEO-G431RB 控制板上, 堆叠如下图所示。
    NUCLEO-G431RB 板上的两个按钮(蓝色用户按钮B1和黑色重置按钮B2)必须保持未覆盖状态。

在这里插入图片描述

  1. 将三条电机线 U、V、W 连接到 X-NUCLEO-IHM16M1 电机驱动板上的 CN1连接器。

  2. 配置 NUCLEO-G431RB 控制板上的跳线:

  • 从 USB 为 NUCLEO-G431RB 供电时,要将JP5 的 5V-STLK 源设为 [1-2] 位置(跳线安装在 pin1、pin2 针脚);
  • JP8 的 VREF 设为 [1-1] 位置(跳线安装在 pin1、pin1 针脚);
  • JP6(IDD)设为 ON 状态(安装 2针跳线)。

在这里插入图片描述

  1. 配置控制板和驱动板的跳线,以选择所需的控制算法(如六步方波):
    NUCLEO-IHM16M1 电机驱动板的跳线设置:
  • J5 设为 ON 状态(安装 2针跳线);
  • J6 设为 ON 状态(安装 2针跳线);
    NUCLEO-G431RB 控制板的跳线设置:
  • JP4 和 JP7 设为 OFF 状态(不安装跳线);
  • J2 设为 [2-3] 位置(跳线安装在 pin2、pin3 针脚);
  • J3 设为 [1-2] 位置(跳线安装在 pin1、pin2 针脚)。

注意:更改控制模式之前,必须关闭电源电压。
在这里插入图片描述

  1. 将 12V/2A 直流电源连接到 NUCLEO-G431RB 控制板上的 CN1 连接端口(mini-USB),或连接到 X-NUCLEO-IHM16M1 电机驱动板上的 J4 连接器(电源插座),并通电。

3. 创建电机控制项目

3.1 配置电机控制包

  1. 打开 电机控制软件开发套件(Motor Control WorkBench),创建新项目。
    单击"New Project"按钮,弹出"New Project"对话框。
    在 “General Info” 菜单中进行设置:
    • 在 “Project name” 输入项目名称,例如 “MotorProfiler”;
    • 在 “Num.Motors” 选择电机数量为 单电机:1 Motor;
    • 在 “Driving Algorithm” 选择驱动控制算法为 FOC;
    • 在 “Hardware Mode” 选择 Modular 模式。

在这里插入图片描述


  1. 进入 “Motors” 菜单,根据 IHM03 电机控制套件的配置,从菜单中选择一款用使用的电机参数接近的电机型号(推荐以电压为参考进行选择),例如 GimBal GBM2804H-10。

在这里插入图片描述

  • 点击所选电机表单右下角 “Save as” 图标按键,将其另存为 自定义的电机型号,打开 “Save as…” 窗口如下;
  • 输入电机 Name 和 Description,例如修改 Name 为 KJ100;
  • 根据使用的电机的规格参数修改 Motor parameters,例如修改极对数为 5。

在这里插入图片描述


  1. 进入 “Power board” 菜单,根据 IHM03 电机控制套件的配置,选择驱动板为 X-NUCLEO-IHM16M1 电机驱动板。

在这里插入图片描述


  1. 进入 “Control board” 菜单,根据 IHM03 电机控制套件的配置,选择控制板为 NUCLEO-G431RB 控制板。

在这里插入图片描述


  1. 完成项目配置后,点击窗口右下方 “>>OK” 按钮,就会自动生成一个电机控制项目,并显示项目视图如下。
    视图的内容取决于用户配置的电路板和电机的信息。
    如果用户的配置有错误(无效),则会弹出一个对话框,通知用户这些选择不允许创建项目,并要求用户修改配置。
    在这里插入图片描述

  1. 在左侧菜单 “Project Steps” 中勾选 “Application Configuration” 选项框,点击选中,再勾选 “Motor Profiler” 选项框。

在这里插入图片描述

点击 “>>OK” 确认,返回电机控制项目视图。

在这个界面,还可以对电机直接进行控制,具体使用方法将在以后的文章中介绍。


  1. 项目生成。
  • 选择菜单 “Generate the project” 按键,根据配置参数生成项目。
  • 跳出 “Project generation” 窗口,选择 STM32CubeMX 版本、固件版本(Firmware Package Version),Target Toolchain 为 STM32CubeIDE。
  • 默认使用 HAL 驱动。
  • 点击 “GENERATE” 按键,生成代码。

注意选择的固件包的版本,如果没有安装相应版本的固件包,则会自动下载。

如下图所示,项目生成完成后,点击 “RUN STM32CubeMX” 按键,打开 STM32CubeMX 进行图形化配置。

在这里插入图片描述


3.2 图形化配置

在 Motor Control WorkBench)中生成项目,点击 “RUN STM32CubeMX” 按键,打开 STM32CubeMX,如下图所示。

参考点灯实验程序,可以将PA5 管脚设置为 GPIO_Output——这与电机控制无关,只供参考。

在这里插入图片描述


点击 “Project Manager” 菜单按钮,进入工程配置界面。

  • 输入项目名称为 “MotorProfiler”,选择项目的保存路径。
  • 将Toolchain / IDE 设为 STM32CubeIDE(根据用户安装和使用的 IDE 选择,也可以选择 EWARM、MDK-ARM、MakeFile、CMake 等IDE工具)。
  • 点击右上角 “GENERATE CODE” 生成代码。

在这里插入图片描述

加载完毕后,弹出代码生成提示窗口,如下图所示。点击 “OPEN PROJECT”,进入 STM32CubeIDE。


3.3 代码编辑、编译与调试

  1. 打开 STM32CubeIDE,导入 MotorProfiler 项目。
    如果是从 CubeMX 代码生成提示窗口点击“ OPEN PROJECT”,则进入 STM32CubeIDE后自动打开 IHM03_02 项目。

  2. 在左侧 Project Explorer 中,选择 IHM03_01 – Application – User,打开主程序 main.c ,中断服务程序 tm32g4xx_it.c,stm32g4xx_mc_it.c ,如下图所示。

在这里插入图片描述

如果要加入 LED2 闪烁功能,则要在主程序 main.c 的 while(1) 循环中添加以下程序(这与电机控制无关,只供参考):

  /* Infinite loop */while (1){/* USER CODE BEGIN WHILE */HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);/* Insert delay 500 ms */HAL_Delay(500);/* USER CODE END WHILE */}

  1. 程序编译
  • 用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。
  • 点击工具栏中 “Build Debug” 按键对程序代码进行编译。
  1. 程序下载烧录到目标板
  • 点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。
  • 不需要程序的运行与调试。

4. 电机参数辨识和使用

4.1 电机参数辨识

  1. 回到 电机控制软件开发套件(Motor Control WorkBench),点击菜单按钮 “Motor Pilot”,打开 ST Motor Pilot 应用程序。点击 “Launch Profiler” 。

在这里插入图片描述

  1. 通过串口与上位机(PC)通讯。
  • 打开上位机(PC)的设备管理器,查看 ST Link 对应的串口的端口号(如本设备串口为 COM9)。
  • 在 ST Motor Pilot 中,在 “Port” 设置 ST Link 对应的串口位置(如 COM9),再点击按键 “Connect” 连接。
  • 连接成功后,ST Motor Pilot 显示控制板和驱动板的型号和参数。如下图所示。
    在这里插入图片描述
  1. 在窗口右侧 “Pole pairs” 输入电机的极对数(本例为 5),最大速度(本例设为 1600)及最大电流(本例设为 2.0APK)。

  2. 如果不确定所使用电机的极对数,可以点击窗口右侧 “Pole pairs” 右侧 “Detect pole pairs” 检测电机的极对数。通过将电机轴旋转一圈找到有几个稳定位置来检测电机的极对数。
    (1)弹出 “Pole pairs detection” 窗口,点击 “Start” 按键;
    (2)窗口提示输入检测电流值,建议设为最大电流的 10%(本例设为 0.2Apk);
    (3)窗口提示在固定部分和旋转部分上做标记(便于确定“将电机轴旋转一圈”这一过程);
    (4)窗口提示“Spin your motor manually, the number of pole pairs is the number of notches you will feel during a complete mechanical rotation of the motor.”
    用手轻轻地缓慢旋转电机(轴),手会感觉到一定的阻力(需要用一点力量才能使电机旋转),当旋转一定角度时会感觉到一个平衡点(接近该点时手上的阻力减小,远离该点时阻力变大)。将电机轴旋转一圈,一共有多少个这样的平衡点,电机的极对数就是平衡点的数量。
    (5)将检测到的极对数(电机旋转一圈的平衡点数量)输入到 Pole pairs detection。
    在这里插入图片描述

在这里插入图片描述

  1. 点击“Start profile”开始辨识电机参数。

应用程序自动进行电机参数辨识,包括启停电机和以不同的转速运行,图中的蓝色进度条会显示程序运行的过程。当进度条执行到 100%时,完成电机参数辨识过程。获得的电机电气模型参数和机械模型参数显示在图中。
在这里插入图片描述

  1. 点击“Save” 保存辨识获得的电机参数。
    根据提示,输入电机名(例如 KJ100),将电机参数保存在 hardware\motor 文件夹的 KJ100.json 文件中。今后就可以 MCSDK 在创建项目时选择该电机,即可自动调用该电机的参数值。

在这里插入图片描述


4.2 使用辨识的电机参数

使用辨识的电机参数,有两种方法。

  • 一种方法是从 MCSDK 新建项目,在选择电机时选中刚才添加的电机,则自动从 hardware\motor 文件夹的 KJ100.json 文件中读取电机参数。然后可以参考本系列中文(5)、文(6)实现无感方波控制或 FOC 控制。

STM32-FOC(5)基于 IHM03 的无感方波控制
STM32-FOC(6)基于 IHM03 的无感FOC 控制

在这里插入图片描述
该用户自定义电机 KJ100 的详细参数(参数辨识结果)如下图所示。
在这里插入图片描述

  • 另一种方法是对于已有的项目,在源程序中直接修改电机参数进行设置。
    打开电机参数定义文件 pmsm_motor_parameters.h,找到其中的电机电气参数定义部分 “MOTOR ELECTRICAL PARAMETERS”,按照电机参数辨识结果将电机参数修改如下:

  • 将极对数 POLE_PAIR_NUM 修改为 5;

  • 将定子电阻 RS 修改为 3.4 (ohm);

  • 将定子电感 LS 修改为 0.00058 (H)。

修改后的程序如下。

  * @file    pmsm_motor_parameters.h
/*     * @file    parameters_conversion.h *//* Define to prevent recursive inclusion -------------------------------------*/
#ifndef PMSM_MOTOR_PARAMETERS_H
#define PMSM_MOTOR_PARAMETERS_H/*************************** Motor Parameters ***************************//***************** MOTOR ELECTRICAL PARAMETERS  ******************************/
/* GimBal GBM2804H-100T */
/*
#define POLE_PAIR_NUM           7 // Number of motor pole pairs
#define RS                      5.3 // Stator resistance , ohm
#define LS                      0.001058 // Stator inductance, H
*//* MyMotor KJ-100 */
#define POLE_PAIR_NUM           5 // Number of motor pole pairs
#define RS                      0.44 // Stator resistance , ohm
#define LS                      0.00014 // Stator inductance, H

重新编译程序,将程序下载烧录到目标板 NUCLEO-G431RB 。

  • 检查 IHM03 套件硬件连接和电源连接。
  • 驱动板、控制板上电后:
    • LED2 灯闪烁(如果加入闪灯程序)。
    • 按下蓝色按键 B1,电机开始运行。
    • 按下黑色按键 B2,电机停止运行。

至此,我们就完成了对新电机的参数设置。

在这里插入图片描述


参考资料:

  1. P-NUCLEO-IHM03 STM32电机控制套件
  2. UM2505 - STM32G4 Nucleo-64 boards (MB1367), STMicroelectronics/意法半导体, 2021
  3. UM2538 - STM32 motor-control pack using the FOC algorithm for three-phase, low-voltage, and low‑current motor evaluationl, STMicroelectronics/意法半导体, 2023
  4. 许少伦等,STM32G4入门与电机控制实战,电子工业出版社,2023

版权声明:
欢迎订阅youcans@qq 原创作品 【动手学电机驱动专栏】
转载必须标注原文链接:(https://blog.csdn.net/youcans/category_12645064.html)
Copyright@youcans 2024
Crated:2024-11

相关文章:

【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识

STM32-FOC(1)STM32 电机控制的软件开发环境 STM32-FOC(2)STM32 导入和创建项目 STM32-FOC(3)STM32 三路互补 PWM 输出 STM32-FOC(4)IHM03 电机控制套件介绍 STM32-FOC(5&…...

JavaWeb后端开发知识储备2

目录 1.HttpClient 2.微信小程序开发 3.Spring Cache 4.Spring Task 4.1cron表达式 4.2入门案例 1.HttpClient 简单来说,HttpClient可以通过编码的方式在Java中发送Http请求 2.微信小程序开发 微信小程序的开发本质上是前端开发,对于后端程序员来…...

Java Stream API - 高效数据处理的核心工具_01

文章目录 概述:高效数据处理的核心工具1. 流的创建1.1 从集合创建流1.2 从数组创建流1.3 直接创建流 2. 中间操作:流的转换和处理2.1 map():映射操作2.2 filter():过滤操作2.3 flatMap():扁平化映射操作2.4 sorted()&a…...

【计算机网络】网段划分

一、为什么有网段划分 IP地址 网络号(目标网络) 主机号(目标主机) 网络号: 保证相互连接的两个网段具有不同的标识 主机号: 同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号 互联网中的每一台主机,都要隶属于某一个子网 -&…...

HTML和CSS 表单、表格练习

HTML和CSS 表格练习 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML表格练习</title>…...

ByteBuffer模拟拆包输出消息字符串

以下代码模拟网络编程中的粘包现象&#xff0c;用\n进行分割消息块 源码 public static void main(String[] args) {ByteBuffer byteBuffer1 ByteBuffer.allocate(60) ;byteBuffer1.put("Hello World\nWhat is you name?\nI am Licky!\nHo".getBytes());splice(byt…...

Java FastJson 踩坑记录

newtonsoft.json 第一次用。java 转的json给newtonsoft.json解析&#xff0c;一直解析不出来。 直到写这个文章的时候&#xff0c;我都还觉得是newtonsoft.json和fastjson都有问题。 先看java JSONField(name"Rank​Value") public long Rank1​1000; JSONField(na…...

深入理解 Java 阻塞队列:使用场景、原理与性能优化

在并发编程中&#xff0c;线程安全的队列是解决线程间任务传递和调度的关键工具之一。阻塞队列&#xff08;BlockingQueue&#xff09;作为一种线程安全的队列&#xff0c;实现了在并发环境下对共享数据的安全访问&#xff0c;广泛应用于生产者-消费者模型、任务调度和多线程计…...

Python常用高阶函数:map()、filter()、reduce()

Python常用高阶函数&#xff1a;map()、filter()、reduce() 高阶函数是一类以函数作为参数或者返回值的函数&#xff0c;能够显著提高代码的简洁性和灵活性。在Python中&#xff0c;map()、filter()和reduce()是三种非常常用的高阶函数&#xff0c;它们常被用来对列表或其他可…...

多目标优化算法:多目标极光优化算法(MOPLO)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码

一、极光优化算法 极光优化算法&#xff08;Polar Lights Optimization, PLO&#xff09;是2024年提出的一种新型的元启发式优化算法&#xff0c;它从极光这一自然现象中汲取灵感。极光是由太阳风中的带电粒子在地球磁场的作用下&#xff0c;与地球大气层中的气体分子碰撞而产…...

【大数据学习 | Spark-Core】关于distinct算子

只有shuffle类的算子能够修改分区数量&#xff0c;这些算子不仅仅存在自己的功能&#xff0c;比如分组算子groupBy&#xff0c;它的功能是分组但是却可以修改分区。 而这里我们要讲的distinct算子也是一个shuffle类的算子。即可以修改分区。 scala> val arr Array(1,1,2,…...

ShuffleNet:一种为移动设备设计的极致高效的卷积神经网络

摘要 https://arxiv.org/pdf/1707.01083 我们介绍了一种名为ShuffleNet的计算效率极高的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;该架构专为计算能力非常有限的移动设备&#xff08;例如10-150 MFLOPs&#xff09;而设计。新架构利用两种新操作&#xff1a;逐…...

AIGC-------AIGC在社交媒体内容生成中的应用

AIGC在社交媒体内容生成中的应用 引言 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;社交媒体平台上的内容创作方式发生了巨大变化。AIGC使得内容创作的门槛大大降低&#xff0c;从而让更多的人能够参与到社交媒体内容的创作中&#xff0c;同时也使…...

提取图像中的高频信息

三种方法 1. 傅里叶变换提取高频和低频【有损】2. 傅里叶变换提取振幅和相位【无损】3. 小波变换【不涉及恢复代码】代码1.代码2代码3 1. 傅里叶变换提取高频和低频【有损】 环境&#xff1a;集群210.30.98.11效果: 2. 傅里叶变换提取振幅和相位【无损】 环境&#xff1a;集…...

js函数声明

在 JavaScript 中&#xff0c;函数是一等公民&#xff08;first-class citizen&#xff09;&#xff0c;这意味着函数可以作为变量、参数和返回值使用。JavaScript 提供了多种定义函数的方式&#xff0c;以下是几种常见的方法&#xff1a; 1. 函数声明&#xff08;Function De…...

语言模型中的多模态链式推理

神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…...

【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

CTF之密码学(Polybius密码)

棋盘密码&#xff0c;也称为Polybius密码或方格密码&#xff0c;是一种基于替换的加密方法。以下是对棋盘密码的详细解析&#xff1a; 一、加密原理 棋盘密码使用一个5x5的方格棋盘&#xff0c;其中填充了26个英文字母&#xff08;通常i和j被视为同一个字母并放在同一个格子中…...

java excel 导入各种踩坑

在 Java 中处理 Excel 导入时&#xff0c;常见的问题&#xff08;即“踩坑”&#xff09;很多&#xff0c;下面列举了处理 Excel 导入时可能遇到的一些问题&#xff0c;并给出了解决方案和优化技巧。 1. POI 库与版本问题 Apache POI 是处理 Excel 的常用库&#xff0c;但是不…...

优化表单交互:在 el-select 组件中嵌入表格显示选项

介绍了一种通过 el-select 插槽实现表格样式数据展示的方案&#xff0c;可更直观地辅助用户选择。支持列配置、行数据绑定及自定义搜索&#xff0c;简洁高效&#xff0c;适用于复杂选择场景。完整代码见GitHub 仓库。 背景 在进行业务开发选择订单时&#xff0c;如果单纯的根…...

js版本之ES5特性简述【String、Function、JSON、其他】(二)

目录 String相关方法 string.charAt() string.charCodeAt() string.concat() string.match() string.search() string.replace() string.split() string.trim() string.slice() string.substr() string.substring() Function相关方法 arguments.length function…...

【redis】哈希类型详解

哈希类型详解 一、哈希类型的介绍二、哈希类型的常用命令2.1 HSET2.2 HGET2.3 HEXISTS2.4 HDEL2.5 HKEYS2.6 HAVLS2.7 HGETALL2.8 HMGET2.9 HLEN2.10 HSETNX2.11 HINCRBY2.12 HINCRBYFLOAT 三、哈希类型命令小结四、哈希类型内部编码五、哈希类型应用场景 一、哈希类型的介绍 …...

每日练题之动态规划(子序列问题讲解 1.最长递增子序列 2.摆动序列)

前言&#xff1a; 需要对「子序列」和「子数组」这两个概念进行区分&#xff1b; 子序列&#xff08;subsequence&#xff09;&#xff1a;子序列并不要求连续&#xff0c;但是我们调出来的顺序必须和原数组的顺序相同。例如&#xff1a;序列 [4, 6, 5] 是 [1, 2, 4, 3, 7, 6,…...

JSON 性能测试 - WastJson 性能也很快

WAST 是一个高性能 Java 工具集库包&#xff0c;包括 JSON、YAML、CSV、HttpClient、JDBC 和 EL 引擎. WastJson 无论是小中大文本各种数据类型等性能都没有明显的短板&#xff0c;除了推广外可以说是六边形战士&#xff0c;更多测试参考 wast-jmh-test: wast性能测试 (并非所…...

Windows 软件之 FFmpeg

文章目录 前言1 FFmpeg 视频处理1.1 编解码1.2 其它视频编辑命令1.3 视频抽帧 2 FFmpeg 音频处理3 FFmpeg 图片处理3.1 编解码3.2 拼接图片3.3 图片合成视频 附录1&#xff1a;mediainfo.ps1 前言 FFmpeg 是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的…...

接口的扩展

1. 接口中新增的方法 JDK7之前接口中只能定义抽象方法。 JDK8的新特性&#xff1a;接口中可以定义有方法体的方法。&#xff08;默认、静态&#xff09; JDK9的新特性&#xff1a;接口中可以定义有私有方法体的方法。 有方法体的方法&#xff1a;接口升级时&#xff0c;为了兼容…...

Vue ECharts 基本数据图表绘制详解:让数据飞起来

1. 引言 1.1 什么是数据可视化 大家好&#xff0c;欢迎来到数据可视化的世界&#xff01;如果你以为数据就是冷冰冰的数字&#xff0c;那你就大错特错了。数据&#xff0c;可是有灵魂的&#xff01;只要给它一副好看的外衣&#xff0c;比如我们今天要聊的图表&#xff0c;它们…...

目录遍历漏洞-CVE-2021-41773

目录 简介 原理 例子 Apache路径穿越漏洞 环境搭建 漏洞原理 漏洞利用 简介 目录遍历漏洞&#xff08;也称为路径遍历漏洞&#xff09;是一种由于Web服务器或Web应用程序对用户输入的文件名称的安全性验证不足而导致的安全漏洞。 原理 目录遍历漏洞允许攻击者在未授权…...

ajax (一)

什么是 AJAX [ˈeɪdʒks] &#xff1f; 概念&#xff1a;AJAX是浏览器与服务器进行 数据通信 的技术&#xff0c;动态数据交互 怎么用AJAX? 1. 先使用 axios [k‘sio ʊ s] 库&#xff0c; 与服务器进行 数据通信 ⚫ 基于 XMLHttpRequest 封装、代码简单、月下载量在 1…...

cocos creator 3.8 物理碰撞器Collider+刚体RigidBody 8

遇到一个朋友&#xff0c;你来就行的朋友&#xff0c;我过去了&#xff0c;管吃管住&#xff0c;这样的朋友真的很难求。 最近离职了&#xff0c;很难想象&#xff0c;一份策划书一天能给你改n次&#xff0c;一周能郁闷&#xff0c;上一个功能没搞完&#xff0c;让你搞下一个功…...

[Python3学习笔记-基础语法] Python3 基础语法

本篇文章详细介绍Python3的基础语法&#xff0c;主要包括编码、标识符、Python保留字、注释、行缩进、多行语句、Number类型、字符串、空行、print打印等。 这些是Python最基础的东西&#xff0c;掌握好了才能更好的学习后续的内容。 有兴趣共同结伴学习Python的朋友&#xff0…...

自制游戏:监狱逃亡

第一个游戏&#xff0c;不喜勿喷&#xff1a; ​ #include<bits/stdc.h> #include<windows.h> using namespace std; int xz; int ruond_1(int n){if(xz1){printf("撬开了&#xff0c;但站在你面前的是俄罗斯内务部特种部队的奥摩大帝&#xff0c;你被九把加…...

Linux的开发工具(三)

条件编译 预处理本质&#xff1a;对代码进行裁剪 像网易云音乐有vip和普通用户&#xff0c;可以通过条件编译来&#xff0c;这样只用写一份代码&#xff0c;也只用维护一份代码&#xff0c;是vip就走vip代码&#xff0c;不是就普通用户代码&#xff0c;条件编译来动态裁剪。 …...

飞书会话消息左右排列

飞书会话消息左右排列 1. 飞书登录后&#xff0c;点击头像&#xff0c;弹出菜单有个按钮设置 2. 3....

【数据结构-表达式解析】力扣227. 基本计算器 II

给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将字符串作为数学表达式计算的内置函数&#…...

vue2面试题10|[2024-11-24]

问题1&#xff1a;vue设置代理 如果你的前端应用和后端API服务器没有运行在同一个主机上&#xff0c;你需要在开发环境下将API请求代理到API服务器。这个问题可以通过vue.config.js中的devServer.proxy选项来配置。 1.devServer.proxy可以是一个指向开发环境API服务器的字符串&…...

列表和字典索引的区别

对于 列表&#xff1a; 索引是自动生成的&#xff0c;由 Python 内部管理。你不能直接为列表中的某个元素设置“自定义索引”。 对于 字典&#xff1a; 键是完全由用户定义的。你可以通过 字典【键】 值 的方式主动创建或更新键值对。 lst [a, b, c] lst[0] x # 修改已…...

【源码】Sharding-JDBC源码分析之SQL中分片键路由ShardingSQLRouter的原理

Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...

JavaFX 实现 Loading 效果的组件与案例详解

JavaFX 中的 Loading 组件概述 JavaFX 提供了两个用于显示任务进度的核心组件&#xff1a; ProgressIndicator&#xff1a;以圆形动画的形式展示任务进度&#xff0c;适用于未定义进度的任务。ProgressBar&#xff1a;以水平条的形式展示任务进度&#xff0c;适用于可以量化进…...

Elasticsearch:如何部署文本嵌入模型并将其用于语义搜索

你可以按照这些说明在 Elasticsearch 中部署文本嵌入模型&#xff0c;测试模型并将其添加到推理提取管道。它使你能够生成文本的向量表示并对生成的向量执行向量相似性搜索。示例中使用的模型在 HuggingFace上公开可用。 该示例使用来自 MS MARCO Passage Ranking Task 的公共…...

李继刚:提示词(Prompt)的本质是表达的艺术

看了李继刚在 AI 创新者大会的演讲《提示词的道与术》&#xff0c;收获很大&#xff0c;我分享一下学习笔记。  李继刚&#xff1a;提示词&#xff08;Prompt&#xff09;的本质是表达的艺术 一、提示词的本质是表达 本意、文意和解意的概念&#xff1a; 本意&#xff1a;指…...

10 —— Webpack打包模式

开发模式&#xff1a;development &#xff1b;场景&#xff1a;本地开发 生产模式&#xff1a;production &#xff1b; 场景&#xff1a;打包上线 这两种模式如何设置给webpack&#xff1a; 方式1.webpack.config.js 配置文件设置mode选项 module.exports { mode:produc…...

OpenSSH 安装

OpenSSH windows安装 启用可选功能安装 OpenSSH&#xff08;推荐方法&#xff09; 步骤一&#xff1a;打开 “设置” 应用 点击 “开始” 菜单&#xff0c;选择 “设置” 图标&#xff08;看起来像一个齿轮&#xff09;。 步骤二&#xff1a;进入 “应用” 部分 在设置窗口中&…...

国标GB28181设备管理软件EasyGBS国标GB28181视频平台:RTMP和GB28181两种视频上云协议的区别

在当今信息化高速发展的社会中&#xff0c;视频监控技术已经成为各行各业不可或缺的一部分。无论是城市安全、交通管理&#xff0c;还是企业安全、智能家居&#xff0c;视频监控都发挥着至关重要的作用。然而&#xff0c;随着监控点数量的急剧增加&#xff0c;海量视频数据的存…...

Image fusion meets deep learning: A survey and perspective译文

摘要 图像融合是指从不同的源图像中提取和组合最有意义的信息&#xff0c;旨在生成一个更有信息量和有利于后续应用的单图像。深度学习的发展极大地推动了图像融合的发展&#xff0c;而神经网络强大的特征提取和重建能力使融合结果充满希望。最近&#xff0c;几种最新的深度学…...

多维高斯分布的信息熵和KL散度计算

多维高斯分布是一种特殊的多维随机分布&#xff0c;应用非常广泛&#xff0c;很多现实问题的原始特征分布都可以看作多维高斯分布。本文以数据特征服从多维高斯分布的多分类任务这一理想场景为例&#xff0c;从理论层面分析数据特征和分类问题难度的关系注意&#xff0c;本文分…...

物体网格弹性变形---Unity中实现

在游戏引擎场景中的3D物体是由一定数量的点、面组成的&#xff0c;如下图&#xff1a; 要使这些物体变形就是改变3D物体每个顶点状态。 1.首先在Unity场景中增加一个球体&#xff0c;如下图 3D组件默认拥有MeshFilter、meshRenderer、Collider组件&#xff0c;分别用来获取Mes…...

什么是Sass,有什么特点

Sass 概述 什么是 Sass&#xff1f; Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;是一种 CSS 预处理器&#xff0c;它扩展了 CSS 的功能&#xff0c;使其更加强大和灵活。Sass 允许开发者使用变量、嵌套规则、混合宏、继承等高级特性&#xff0c;从而编写…...

Spring注入Map学习

Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…...

Java 基础知识 (集合框架 + 并发编程 + JVM 原理 + 数据结构与算法)

文章目录 一.集合框架1. 常见集合接口及其特点List 接口Set 接口Map 接口 2. ArrayList 和 LinkedList 的区别和适用场景ArrayListLinkedList 3. HashSet 和 TreeSet 的特点和用法HashSetTreeSet 4. HashMap 和 TreeMap 的实现原理和使用注意事项HashMapTreeMap 5. 集合遍历方式…...