【动手学电机驱动】 STM32-FOC(7)MCSDK Pilot 上位机控制与调试

news2024/12/22 23:31:26

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

【动手学电机驱动】 STM32-FOC(7)MCSDK Pilot 上位机控制与调试

    • 1. 准备工作
      • 1.1 开发环境
      • 1.2 硬件连接
    • 2. 基于 IHM03 的无感FOC 控制
      • 2.1 配置电机控制包
      • 2.2 图形化配置
      • 2.3 代码编辑、编译与调试
    • 3. 使用 MCSDK Pilot 控制与调试
      • 3.1 加载上位机 GUI
      • 3.2 从上位机控制电机运行
      • 3.3 从上位机监控电机运行
    • 4. 速度环控制器
      • 4.1 电流环 PI 控制器
      • 4.2 速度电流双闭环 PI 控制器


P-NUCLEO-IHM03 STM32电机控制套件,为三相、低压和低电流的 BLDC 或 PMSM 电机提供电机控制解决方案。此前我们已经学习了使用 IHM03 电机控制套件开发无感 FOC 电机控制程序的基础操作。
本节在使用 IHM03 电机控制套件开发无感速度环电机控制程序的基础上,详细介绍基于 MCSDK6.0 的速度环控制与调试方法。


1. 准备工作

1.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)

1.2 硬件连接

硬件连接的操作步骤简述如下。详细操作过程可以参见 STM32-FOC(5)基于 IHM03 的无感FOC 控制 第2部分。

  1. 根据使用的 STM32 Nucleo 开发板和操作模式,检查跳线位置和安装选项。
  2. 通过 ST-morpho连接器连接(CN7、CN10)X-NUCLEO-IHM16M1 驱动板与 STM32 NUCLEO 开发板。
  3. 将 3-pin 插接端子插入连接器 CN1 的 3/4/5 输出端,以连接无刷电机。
  4. 使用 USB 连接线将 STM32 Nucleo 开发板连接到 PC,并下载相应的预编译代码。
  5. 使用 12V 直流电源为电路板供电,可以选择以下二者之一:
    – 使用连接器 CN1 的 2(VIN)和 1(接地)接入 12VDC电源;
    – 使用 J4 插孔(2.1/2.5 mm,尖端正极)接入12VDC电源。
  6. 使用 STM32 电机控制 SDK(X-CUBE-MCSDK)开发和运行应用程序。

2. 基于 IHM03 的无感FOC 控制

基于 IHM03 的无感FOC 控制的操作步骤简述如下。详细操作过程可以参见 STM32-FOC(5)基于 IHM03 的无感FOC 控制 第3部分。

2.1 配置电机控制包

  1. 打开 电机控制软件开发套件(Motor Control WorkBench),创建新项目。
    单击"New Project"按钮,弹出"New Project"对话框。
    在 “General Info” 菜单中,设置项目名称为 IHM03_03,选择单电机(1 Motor)、FOC驱动控制算法、Modular 模式。

  2. 硬件配置。
    在 “Motors” 菜单选择电机为 GimBal GBM2804H-100T,在 “Power board” 菜单选择驱动板为 X-NUCLEO-IHM16M1 电机驱动板,在 “Control board” 菜单选择控制板为 NUCLEO-G431RB 控制板。

  3. 修改配置的电路板和电机的信息。
    如果配置的硬件信息与实际产品参数有差异,可以点击相应的模块(蓝色模块),进入该模块的参数配置页面进行修改。
    在本例中,电机 GimBal GBM2804H-100T 的默认设置(具体参数与SDK版本有关)为最大电压 10Vdc、最大电流 0.8Apk。这与本套件的配置不一致,因此要点击图中 Motor 蓝色模块,进入电机参数设置页面,将最大电压设为 14.8Vdc、最大电流设为 2.1Apk。

  4. 完成项目配置后,自动生成一个电机控制项目,并显示项目视图。


在这里插入图片描述


  1. 配置速度位置控制方案。

点击项目视图中的 “Speed Sensing” 蓝色模块,进入速度位置管理界面。在 Main Sensor – Sensor Selection 选项中,选择 Sensor-less(Observer+PLL),即采用无传感器(使用位置观测器+PLL获取实时的转子位置)进行控制。


  1. 项目生成。

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


2.2 图形化配置

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

  1. 将PA5 管脚设置为 GPIO_Output,可以控制 LD2 灯的开关闪烁。
    LD2 闪灯与电机控制无关,但可以用来确认程序烧录和运行是否正常,帮助初学者分析和排除故障。

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

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

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


2.3 代码编辑、编译与调试

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

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

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

    /* USER CODE BEGIN 3 */
	HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
	/* Insert delay 500 ms */
	HAL_Delay(500);

在这里插入图片描述

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

程序烧录完成后,显示内容如下。

STMicroelectronics ST-LINK GDB server. Version 7.8.0
...


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 19]
Download in Progress:

File download complete
Time elapsed during download operation: 00:00:01.011

Verifying ...
Download verified successfully 
Shutting down...
Exit.
  1. 程序的运行与调试
  • 对照 2.1 检查 IHM03 套件硬件连接和电源连接。
  • 接通 12Vdc电源。
  • 点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。
    • LED2 灯闪烁(如果加入闪灯程序)。
    • 按下蓝色按键 B1,电机开始运行。
    • 按下黑色按键 B2,电机停止运行。

3. 使用 MCSDK Pilot 控制与调试

3.1 加载上位机 GUI

MC SDK 提供 UI 库,用于界面调试通讯使用,与 Workbench 之间的交互。

  1. 打开电机控制软件开发套件(Motor Control WorkBench),单击工具栏的 “Motor Pilot” 按钮,启动电机导向应用程序 ST Motor Pilot。

  2. 在 ST Motor Pilot 中,点击菜单 “GUI – Load GUI”,根据项目内容选择相应的 QML 图形界面文件,加载上位机程序。

QML(Qt Meta-Language)是一种基于JavaScript的声明性语言,用于描述用户界面和应用程序的行为。它是Qt框架的一部分,广泛应用于跨平台应用程序开发。QML由于其高度的模块化和可重用性,特别适合于嵌入式系统的开发。在QML能够帮助开发者以声明性的方式构建用户界面,这样就可以在不需要深入了解底层图形渲染机制的情况下,创建出性能良好的界面。

如下图所示,加载上位机 GUI 文件 MC_FOC_SDK.qml。

请添加图片描述

  1. 连接上位机。

P-NUCLEO-IHM03 STM32电机控制套件 通过串口与上位机(PC)通讯。
3.1 打开上位机(PC)的设备管理器,查看 ST Link 对应的串口的端口号(例如下图中串口为 COM3)。
在这里插入图片描述

3.2 在 ST Motor Pilot 中,在 “Port” 设置 ST Link 对应的串口位置,再点击按键 “Connect” 连接。
3.3 连接成功后,ST Motor Pilot 显示电机的运行状态和参数,包括:电机转速,直流母线电压,温度,功率,运行状态,故障代码等。如下图所示,电机处于 “IDLE” 状态。

在这里插入图片描述


3.2 从上位机控制电机运行

在 ST Motor Pilot 的左下角的 “Control” 布局框内,设有电机运行的控制按钮。

  • 控制环路包含 “SPEED”、“TORQUE” 两个选项。默认选项为 “SPEED”,采用速度环控制;可选选为 “TORQUE”,采用力矩环(电流环)控制。
  • 点击 “Start” 按钮,启动电机运行;
  • 点击 “Stop” 按钮,停止电机运行;
  • 点击 “Stop ramp” 按钮,停止爬坡。
  1. 点击 “Start” 按钮启动,电机旋转。点击 “Stop” 按钮,停止电机运行。

左侧运行状态栏 显示运行状态为 “RUN”,故障灯全灭 指示无故障;
电机转速表(Speed Control)显示当前的转速测量值;
指示计(Measures)显示电压、温度、功率值;
状态栏(Global Configuration)显示运行状态。

在这里插入图片描述

  1. 寄存器
    点击菜单栏中的 “Registers” 按钮,切换到寄存器显示界面,显示设定的寄存器参数的实时值。

在这里插入图片描述


3.3 从上位机监控电机运行

  1. 实时监控

在 寄存器显示界面,选择需要实时监控的参数,点击该参数所在行的 “Configure” 按钮,可以绘制实时变化图。

  • 选择速度参考值 SPEED_REF(ID=153),点击对应的 “Configure” 按钮,选择 “Send to new plot” 后按 “Apply”,自动建立绘图框 plot1,将 SPEED_REF 绘制到 plot1 绘图框。
  • 选择速度测量值 SPEED_MEAS(ID=89),点击对应的 “Configure” 按钮,选择 “plot1” 后按 “Apply”,将 SPEED_MEAS 也绘制到 plot1 绘图框。

点击 “Start” 按钮启动,点击 “Stopt” 按钮停止,plot1 绘图框实时显示 速度参考值 SPEED_REF、速度测量值 SPEED_MEAS 的运行曲线如下图所示。

在这里插入图片描述

  1. 调节电机运行速度

在上位机调节电机运行的速度参考值,通过电流环可以控制电机转速。

在 ST Motor Pilot 的转速表下方的 “Speed Ramp” 布局框内,用户可以设置电机速度参考值(Target Speed RPM)和斜坡时间(Speed ramp duration),控制电机运行。

6.1 在电机运行过程中,在 “Target Speed RPM” 选框输入转速参考值,斜坡时间不修改(默认值为0),在 plot1 绘图框观察实时显示的 速度参考值 SPEED_REF、速度测量值 SPEED_MEAS 的运行曲线,如下图所示。

在这里插入图片描述

6.2 在电机运行过程中,在 “Target Speed RPM” 选框输入转速参考值,同时在 “Duration” 选框输入斜坡时间,在 plot1 绘图框观察实时显示的 速度参考值 SPEED_REF、速度测量值 SPEED_MEAS 的运行曲线。

如下图所示,斜坡时间(Duration)主要影响转速参考值的变化时间,相应地也会影响速度参考值变化时的速度测量值的超调量。

在这里插入图片描述

  1. 调节速度环控制器参数

在 ST Motor Pilot 中,用户可以调整速度环、力矩环、磁链环的 PI 控制器参数。

  • 在 ST Motor Pilot 左下方点击 “Advanced Configuration”,打开右侧的状态栏。
  • 状态栏选择 Currents_Speed 状态,显示速度环 PI 控制器(Speed PI regulator)的参数 Kp、Ki。
  • 本项目中 Kp 默认值为 2730,将其修改为 300,Ki 默认值为 562 不变。

点击 “Start” 启动电机。在 plot1 绘图框观察实时显示的 速度参考值 SPEED_REF、速度测量值 SPEED_MEAS 的运行曲线,如下图所示。

减小 Kp 后,速度环的超调量较大。相应地,电流过冲大,容易触发过流保护。由此,速度环 控制器参数,对于电机的运行非常重要。下节将简单介绍速度环参数整定的基本原则和方法。

在这里插入图片描述
减小 Kp,超调量较大。电流过冲大,容易过流保护。

  1. 故障显示与处理

当电机运行发生故障保护时,自动停止运行,并在状态栏显示故障状态,如下图所示。

在这里插入图片描述

如果故障可以自动恢复,点击状态栏 “Ack Faults” 按钮可以使故障复位,进入空闲状态 “IDLE”。如果故障不能自动恢复,则需要断电重启。


4. 速度环控制器

本节是对电机控制速度环和参数整定的介绍。

4.1 电流环 PI 控制器

电流闭环控制,可以精确的控制电机的 Id、Iq 电流值。

电流环的主要作用是在电机启动过程中能够以最大的电流启动,同时对电网电压的波动起及时抗扰的作用,加快动态系统的响应速度,提高系统的稳定性。

在这里插入图片描述


4.2 速度电流双闭环 PI 控制器

实际应用通常期望控制电机以设定的转速变化,仅靠电流闭环不能实现。需要加入转速闭环,实现对转速的控制。转速控制器的输出为电流控制器的给定,转速控制器的输出要进行限幅,因为转速控制器的输出限幅值决定了所用电机的最大允许电流。

速度控制系统的拓扑结构,是速度外环、电流内环的双闭环控制系统,如下图所示。

在这里插入图片描述

增加𝐾𝑖对电机控制系统的影响与增加弹簧常数相似。系统的阻尼由⻓𝑝增益控制。增加阻尼将减少振荡。


### 4.3 电流环路带宽

电流回路带宽过高会导致电机承受过度的压力,因为高频电流瞬变和噪声会转化为高频扭矩瞬变和噪音。电流环路带宽还有另一个限制:采样频率。

在模拟系统中,电机反馈信号的任何变化都会立即开始对输出控制电压产生影响。但是,使用如图所示的数字控制系统,在PWM周期开始时通过ADC对电机信号进行采样,执行控制计算,并将得到的控制电压存入双缓冲PWM寄存器。这些值在PWM寄存器中处于未使用状态,直到它们在下一个PWM周期开始时被时钟记录到PWM输出。

在这里插入图片描述

由于电流控制器处理的带宽比速度回路高,因此通常是电流回路受 PWM 模块的 SH 效应影响最大。由于PWM 模块 SH与电流回路的信号路径串联,其幅度和相位贡献直接增加了电流控制器的开环响应。

在大多数设计中,可以保留 K p s 2 π L \frac{K_p^s}{2\pi L} 2πLKps至少比采样频率低一个数量级。利用这一假设以及速度环调谐过程的约束,可以编写一个通用的“经验法则”表达式:

10 L δ τ < K p s < 2 π L 10 T s \frac{10 L}{\delta \tau} < K_p^s < \frac{2 \pi L}{10 T_s} δτ10L<Kps<10Ts2πL


参考资料:

  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. UM3027 - How to use STM32 motor-control SDK v6.0 workbenc, STMicroelectronics/意法半导体, 2022
  5. 许少伦等,STM32G4入门与电机控制实战,电子工业出版社,2023

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

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

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

相关文章

华为云前台用户可挂载数据盘和系统盘是怎么做到的?

用户可以选择磁盘类型和容量&#xff0c;其后台是管理员对接存储设备 1.管理员如何在后台对接存储设备&#xff08;特指业务存储&#xff09; 1.1FusionSphere CPS&#xff08;Cloud Provisionivice&#xff09;云装配服务 它是first node https://10.200.4.159:8890 对接存…

Python爬虫知识体系-----requests-----持续更新

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新&#xff1a;https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用1. 安装2. 基本使用3. response常用属性 二、get请求三、post请求四、代理 一、安装和基本使用 1.…

区块链技术在数据安全中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在数据安全中的应用 区块链技术在数据安全中的应用 区块链技术在数据安全中的应用 引言 区块链技术基础 1.1 区块链的…

RK3568平台开发系列讲解(GPIO篇)GPIO的sysfs调试手段

🚀返回专栏总目录 文章目录 一、内核配置二、GPIO sysfs节点介绍三、命令行控制GPIO3.1、sd导出GPIO3.2、设置GPIO方向3.3、GPIO输入电平读取3.4、GPIO输出电平设置四、Linux 应用控制GPIO4.1、控制输出4.2、输入检测4.3、使用 GPIO 中断沉淀、分享、成长,让自己和他人都能有…

电商系统开发:Spring Boot框架实战

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

从电动汽车到车载充电器:LM317LBDR2G 线性稳压器在汽车中的多场景应用

附上LM317系列选型&#xff1a; LM317BD2TG-TO-263 LM317BTG-TO-220 LM317BD2TR4G-TO-263 LM317D2TG-TO-263 LM317D2TR4G-TO-263 LM317TG-TO-220 LM317LBDR2G-SOP-8 LM317LDR2G-SOP-8 LM317MABDTG-TO-252 LM317MABDTRKG-TO-252 LM317MA…

Linux下MySQL的简单使用

Linux下MySQL的简单使用 导语MySQL安装与配置MySQL安装密码设置 MySQL管理命令myisamchkmysql其他 常见操作 C语言访问MYSQL连接例程错误处理使用SQL 总结参考文献 导语 这一章是MySQL的使用&#xff0c;一些常用的MySQL语句属于本科阶段内容&#xff0c;然后是C语言和MySQl之…

前端 JS 实用操作总结

目录 1、重构解构 1、数组解构 2、对象解构 3、...展开 2、箭头函数 1、简写 2、this指向 3、没有arguments 4、普通函数this的指向 3、数组实用方法 1、map和filter 2、find 3、reduce 1、重构解构 1、数组解构 const arr ["唐僧", "孙悟空&quo…

力扣 LeetCode 541. 反转字符串II(Day4:字符串)

解题思路&#xff1a; i可以成段成段的跳&#xff0c;而不是简单的i class Solution {public String reverseStr(String s, int k) {char[] ch s.toCharArray();// 1. 每隔 2k 个字符的前 k 个字符进行反转for (int i 0; i < ch.length; i 2 * k) {// 2. 剩余字符小于 …

鸿蒙版APP-图书购物商城案例

鸿蒙版-小麦图书APP是基于鸿蒙ArkTS-API12环境进行开发&#xff0c;不包含后台管理系统&#xff0c;只有APP端&#xff0c;页面图书数据是从第三方平台(聚合数据)获取进行展示的&#xff0c;包含登录&#xff0c;图书类别切换&#xff0c;图书列表展示&#xff0c;图书详情查看…

卡尔曼滤波:从理论到应用的简介

卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种递归算法&#xff0c;用于对一系列噪声观测数据进行动态系统状态估计。它广泛应用于导航、控制系统、信号处理、金融预测等多个领域。本文将介绍卡尔曼滤波的基本原理、核心公式和应用案例。 1. 什么是卡尔曼滤波&#x…

学习日志011--模块,迭代器与生成器,正则表达式

一、python模块 在之前学习c语言时&#xff0c;我们学了分文件编辑&#xff0c;那么在python中是否存在类似的编写方式&#xff1f;答案是肯定的。python中同样可以实现分文件编辑。甚至还有更多的好处&#xff1a; ‌提高代码的可维护性‌&#xff1a;当代码被分成多个文件时…

CSS 语法规范

基本语法结构 CSS 的基本语法结构包含 选择器 和 声明块,两者共同组成 规则集。规则集可以为 HTML 元素设置样式,使页面结构和样式实现分离,便于网页的美化和布局调整。 CSS 规则集的结构如下: selector {property: value; }选择器(Selector) 选择器用于指定需要应用…

Bag Graph: Multiple Instance Learning Using Bayesian Graph Neural Networks文献笔记

基本信息 原文链接&#xff1a;[2202.11132] Bag Graph: Multiple Instance Learning using Bayesian Graph Neural Networks 方法概括&#xff1a;用图&#xff08;贝叶斯GNN框架&#xff09;来建模袋之间的相互作用&#xff0c;并使用图神经网络&#xff08;gnn&#xff09…

Spark 共享变量:广播变量与累加器解析

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…

前海华海金融创新中心的工地餐点探寻

​前海的工地餐大部分都是13元一份的哈。我在前海华海金融创新中心的工地餐点吃过一份猪杂饭&#xff0c;现做13元一份。我一般打包后回公司吃或直接桂湾公园找个环境优美的地方吃饭。 ​我点的这份猪杂汤粉主要是瘦肉、猪肝、肉饼片、豆芽和生菜&#xff0c;老板依旧贴心问需要…

借助Excel实现Word表格快速排序

实例需求&#xff1a;Word中的表格如下图所示&#xff0c;为了强化记忆&#xff0c;希望能够将表格内容随机排序&#xff0c;表格第一列仍然按照顺序编号&#xff0c;即编号不跟随表格行内容调整。 乱序之后的效果如下图所示&#xff08;每次运行代码的结果都不一定相同&#x…

【C语言指南】C语言内存管理 深度解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 引言 C语言是一种强大而灵活的编程语言&#xff0c;为程序员提供了对内存的直接控制能力。这种对内存…

【Linux网络编程】简单的UDP网络程序

目录 一&#xff0c;socket编程的相关说明 1-1&#xff0c;sockaddr结构体 1-2&#xff0c;Socket API 二&#xff0c;基于Udp协议的简单通信 一&#xff0c;socket编程的相关说明 Socket编程是一种网络通信编程技术&#xff0c;它允许两个或多个程序在网络上相互通信&…

Kafka入门:Java客户端库的使用

在现代的分布式系统中&#xff0c;消息队列扮演着至关重要的角色&#xff0c;而Apache Kafka以其高吞吐量、可扩展性和容错性而广受欢迎。本文将带你了解如何使用Kafka的Java客户端库来实现生产者&#xff08;Producer&#xff09;和消费者&#xff08;Consumer&#xff09;的基…