【算法-PID】
算法-PID
- ■ PID
- ■ 闭环原理
- ■ PID 控制流程
- ■ PID 比例环节(Proportion)
- ■ PID 积分环节(Integral)
- ■ PID 微分环节(Differential)
- ■ 位置式PID,增量式PID介绍
- ■ 位置式 PID 公式
- ■ 增量式 PID 公式
- ■ 积分饱和问题
- ■ PID 算法代码实现
- ■ 控制量相关的结构体
- ■ 位置式 PID 代码
- ■ 增量式 PID 代码
- ■ PID 参数整定
- ■ 采样周期选择
- ■ PID 参数整定方法
- ■ 理论计算整定法
- ■ 工程整定法
- ■ 工程整定法-试凑法
- ■ 工程整定法-临界比例法
- ■ 工程整定法-一般调节法
- ■ PID 各个系数调节的效果
- ■ 实际调参演示
- ■ 正点原子 PID 上位机(ATK_PID.exe)介绍
- ■ 上位机通信协议
- ■ ATK_PID.exe使用方法
■ PID
PID 分别是 Proportion(比例)、 Integral(积分)、Differential(微分) 的首字母缩写。
它是一种结合比例、积分和微分三个环节于一体的闭环控制算法。
■ 闭环原理
■ PID 控制流程
■ PID 比例环节(Proportion)
举例:大棚温控实例来理解这个公式
大棚温控需要调节棚内温度为 30℃,而实际温度为 10℃,此时的偏差 e=20,当 e 确定时, Kp 越大则输出u 越大。
图 8.2.1.1 中 当 Kp 的值越大时,橙色曲线达到目标值的时间就越短,橙色曲线出现了一定幅度的超调和振荡这会使得系统的稳定性下降
然而,在实际的应用中,如果仅有比例环节的控制,可能会给系统带来一个问题: 静态误差。
静态误差是指系统控制过程趋于稳定时,目标值与实测值之间的偏差。
假设我们现在需要调节棚内温度为 30℃,而实际温度为 25℃,此时偏差 e=5, Kp 为固定值,如果此时的输出可以让大棚在半个小时之内升温 5℃,而外部的温差可以让大棚在半个小时之内降温 5℃,也就是说,输出 u 的作用刚好被外部影响抵消了,这就使得偏差会一直存在。
■ PID 积分环节(Integral)
为了消除静态误差,我们引入了积分环节。
积分环节可以对偏差 e 进行积分,只要存在偏差,积分环节就会不断起作用,主要用于消除静态误差,提高系统的无差度。
假设 现在温控系统的比例环节作用被抵消, 存在静态误差 5℃,此时偏差存在,积分环节会一直累计偏差,以此增大输出,从而消除静态误差。从上述公式中可以得知,当积分系数 Ki 或者累计偏差越大时,输出就越大,系统消除静态误差的时间就越短,
当 Ki 的值越大时,其对应的橙色曲线达到目标值的时间就越短,与此同时,橙色曲线出现了一定幅度的超调和振荡,这会使得系统的稳定性下降。因此, 我们在设置积分系数的时候,并不是越大越好,而是要兼顾消除静态误差的时间以及整个系统的稳定性。
我们前面有说过,只要系统还存在偏差,积分环节就会不断地累计偏差。当系统偏差为 0的时候,说明已经达到目标值,此时的累计偏差不再变化,但是积分环节依旧在发挥作用(此时往往作用最大),这就很容易产生超调的现象了。因此,我们需要引入微分环节,提前减弱输出,抑制超调的发生。
■ PID 微分环节(Differential)
微分环节可以反应偏差量的变化趋势,根据偏差的变化量提前作出相应控制,减小超调,克服振荡。 引入微分环节后,比例+积分+微分环节的公式如下:
假设温控系统目标温度为 30℃
时间 | 当前温度 | 偏差 |
---|---|---|
八点 | 15℃ | 15℃ |
九点 | 25℃ | 5℃ |
偏差的变化量= 九点的偏差(第 k 次) -八点的偏差(第 k-1 次) = 5℃ - 15℃ = -10,
结合上述公式可知,此时微分环节会削弱比例和积分环节的作用,减小输出以抑制超调。
■ 位置式PID,增量式PID介绍
增量式 PID 公式输出的只是控制量的增量。
假设
电机实际转速为 50RPM,现在我们要让它加速到 60RPM,
位置式 PID,系统将直接输出 60RPM 对应的控制量(占空比);
增量式 PID,系统将输出提速 10RPM,对应的控制量(占空比),此时我们还需要加上上次(50RPM)的输出。
对比项 | 位置式 | 增量式 |
---|---|---|
输出 | 全量输出 | 仅输出增量 |
偏差 | 需要一直累计偏差 | 只考虑最近 3 次偏差 |
积分作用 | 有 | 无 |
限幅 | 需要进行输出和积分限幅 | 只需要进行输出限幅 |
PID | 优点 | 缺点 |
---|---|---|
位置式 | 位置式 PID 是一种非递推式算法,带有积分作用,适用于不带积分部件的对象。 | 全量计算,计算错误影响很大;需要对偏差进行累加,运算量大 |
增量式 | 只输出增量,计算错误影响小;不需要累计偏差,运算量少,实时性相对较好。 | 积分截断效应大,有稳态误差。 |
■ 位置式 PID 公式
■ 增量式 PID 公式
■ 积分饱和问题
在位置式 PID 中,如果系统长时间无法达到目标值,累计偏差(积分)就会变得很大,此时系统的响应就很慢了。
假设某个电机能达到的最大速度为 300RPM,而我们设置了目标速度为 350RPM,这明显是一个不合理的目标值,
由于系统长时间无法达到目标值,累计偏差(积分)会变得越来越大,逐渐
达到深度饱和的状态,此时我们再设置一个合理范围的目标速度(例如 200RPM),系统就没
有办法在短时间内响应了。
为了避免位置式 PID 中可能出现的积分饱和问题,可采取以下措施:
① 优化 PID 曲线,系统越快达到目标值,累计的偏差就越小;
② 限制目标值调节范围,规避可以预见的偏差;
③ 进行积分限幅,在调整好 PID 系数之后,根据实际系统来选择限幅范围。
■ PID 算法代码实现
■ 控制量相关的结构体
typedef struct
{__IO float SetPoint; /* 目标值 */__IO float ActualValue; /* 期望输出值 */__IO float SumError; /* 偏差累计 */__IO float Proportion; /* 比例系数 P */__IO float Integral; /* 积分系数 I */__IO float Derivative; /* 微分系数 D */__IO float Error; /* Error[1],第 k 次偏差 */__IO float LastError; /* Error[-1],第 k-1 次偏差 */__IO float PrevError; /* Error[-2],第 k-2 次偏差 */
} PID_TypeDef;
■ 位置式 PID 代码
/*
* @brief pid 闭环控制
* @param *PID: PID 结构体变量地址
* @param Feedback_value:当前实际值
* @retval 期望输出值
*/
int32_t increment_pid_ctrl(PID_TypeDef *PID,float Feedback_value)
{PID->Error = (float)(PID->SetPoint - Feedback_value); /* 计算偏差 */PID->SumError += PID->Error; /* 累计偏差 */PID->ActualValue = (PID->Proportion * PID->Error) /* 比例环节 */+ (PID->Integral * PID->SumError) /* 积分环节 */+ (PID->Derivative * (PID->Error - PID->LastError)); /* 微分环节 */PID->LastError = PID->Error; /* 存储偏差,用于下次计算 */return ((int32_t)(PID->ActualValue)); /* 返回计算后输出的数值 */
}
■ 增量式 PID 代码
/*
* @brief pid 闭环控制
* @param *PID:PID 结构体变量地址
* @param Feedback_value:当前实际值
* @retval 期望输出值
*/
int32_t increment_pid_ctrl(PID_TypeDef *PID,float Feedback_value)
{PID->Error = (float)(PID->SetPoint - Feedback_value); /* 计算偏差 */PID->ActualValue +=/* 比例环节 */(PID->Proportion * (PID->Error - PID->LastError))/* 积分环节 */+ (PID->Integral * PID->Error)/* 微分环节 */+ (PID->Derivative * (PID->Error - 2 * PID->LastError + PID->PrevError));PID->PrevError = PID->LastError; /* 存储偏差,用于下次计算 */PID->LastError = PID->Error;return ((int32_t)(PID->ActualValue)); /* 返回计算后输出的数值 */
}
■ PID 参数整定
每一个系统的 PID系数并不是通用的,在不同的系统中运用同样的 PID 系数,其最终所体现的效果可能是相差甚远的。PID 的参数整定(调参)。
■ 采样周期选择
采样周期指的是 PID 控制中实际值的采样时间间隔.我们可以使用理论或者经验方法来确定采样周期:
属性 | 描述 |
---|---|
理论方法: | 香农采样定理。这个定理可以用来确定采样周期可选择的最大值,当采样周期超出了这个最大的允许范围,我们所得到的信号就会失真,也就无法较好地还原信号了。 |
经验方法: | 根据控制对象突变能力选择。假设电机当前转速为 20RPM,我们需要提高它的转速到 30RPM,此电机的转速在 1s 之内最大可以突变 10RPM(即电机速度的突变能力),如果我们每 1ms 采集一次电机转速,那么每一次采集到的速度变化量最大为 10RPM / 1000 =0.01RPM,很明显,此时最大的变化量远远小于当前的速度,这对于我们的 PID 控制效果并没有明显的提升,但是却占用了很多的硬件资源,因此,我们需要根据控制对象的突变能力来选择采样周期。 |
■ PID 参数整定方法
■ 理论计算整定法
依据系统的数学模型,经过理论计算确定 PID 参数。
这种方法是建立在理想化条件下的,其得到的参数不一定能够直接使用, 还需要结合经验以及实际的系统进行调整。
■ 工程整定法
试凑法 ,临界比例法 , 一般调节法
■ 工程整定法-试凑法
1)内容: 结合系统的具体情况以及经验,先试凑几组合理的 PID 系数,同时需要观察系
统的曲线变化,确定每一个系数对于整个系统曲线的大致影响,然后再根据具体的曲线进行
调整。
2)调节思路:
① 先是比例(P),再积分(I),最后是微分(D);
② 按纯比例系统整定比例系数,使其得到比较理想的调节过程曲线,然后再把比例系数缩小 1.2 倍左右,将积分系数从小到大改变,使其得到较好的调节过程曲线;
③ 在这个积分系数下重新改变比例系数,再看调节过程曲线有无改善;
④ 如有改善,可将原整定的比例系数减少,改变积分系数,这样多次的反复,就可得到合适的比例系数和积分系数;
⑤ 如果存在外界的干扰, 系统的稳定性不好, 可把比例、积分系数适当减小, 使系统足够稳定;
⑥ 如果系统存在小幅度超调, 可以将整定好的比例系数和积分系数适当减小, 增大微分系数,以得到超调量最小、调节作用时间最短的系统曲线;
■ 工程整定法-临界比例法
1)内容: 在闭环的控制系统里,将调节器置于纯比例作用下,从小到大逐渐调节比例系
数, 直到系统曲线出现等幅振荡,再根据经验公式计算参数。
2)调节思路:
① 将积分、 微分系数置零,比例度取适当值,平衡操作一段时间, 使控制系统按纯比例作用的方式投入运行。
② 慢慢地增大比例系数,细心观察曲线的变化情况。如果控制过程的曲线波动是衰减的,则把比例系数继续增大;如果曲线波动是发散的,则应把比例系数减小,直至曲线波动呈等幅振荡, 此时记下临界比例系数 δK 和临界振荡周期 Tk 的值。
③ 根据记下的比例系数和周期,采用经验公式,计算调节器的参数。
■ 工程整定法-一般调节法
1)内容:这种方法针对一般的 PID 控制系统所以称之为一般调节法。
2)调节思路:
① 首先将积分、微分系数置零, 使系统为纯比例控制。 控制对象的值设定为系统允许的最大值的 60%~70%, 接着逐渐增大比例系数,直至系统出现振荡;此时再逐渐减小比例系数,
直至系统振荡消失, 然后记录此时的比例系数, 并设定系统的比例系数为当前值的 60%~70%。
② 确定比例系数后,设定一个较小的积分系数,然后逐渐增大积分系数,直至系统出现振荡;此时在逐渐减小积分系数, 直至系统振荡消失,然后记录此时的积分系数,并设定系统的积分系数为当前值的 55%~65%。
③ 微分系数一般不用设定,为 0 即可。若系统出现小幅度振荡, 并且通过 PI 环节无法优化,这可以采用与确定比例、积分系数相同的方法, 微分系数取系统不振荡时的 30%左右。
④ 系统空载、带载联调,再对 PID 参数进行微调,直至满足要求。
■ PID 各个系数调节的效果
PID 各个系数调节的效果 | 描述 |
---|---|
比例系数: | 调节作用快,系统一出现偏差,调节器立即将偏差放大输出。 |
积分系数: | 积分系数的调节会改变输入偏差对于系统输出的影响程度。 积分系数越大,消除静差的时间越短,但是过大的积分系数则会导致系统出现超调现象,这在具有惯性的系统中尤为明显。 |
微分系数: | 微分系数的调节是偏差变化量对于系统输出的影响程度。 微分系数越大,系统对于偏差量的变化越敏感,越能提前响应,进而抑制超调,但是过大的微分系数则会让整个系统出现振荡。 |
■ 实际调参演示
① 先调整比例系数,积分、 微分系数设置为 0,此时的系统只有比例环节参与控制。
首先确定硬件上是否出现了故障,例如电压不稳定、电机堵转等,排除了这些之后,那就说明比例系数调节的过大了,这个时候我们可以把比例系数慢慢地减小,并同时观察曲线的变化。
② 当我们调小**比例系数之后,曲线的大幅度振荡现象消失,**但是曲线依旧存在小幅度的超调现象,并且此时通过调节比例系数已经无法优化曲线,如图 9.2.4.2 所示:
此时,我们可以慢慢地增大微分系数,并同时观察曲线的变化,从而找到最合适的参数。
增大微分系数之后,如果系统的曲线已经较为理想,则说明这个系统只需要比例和微分环节的控制。
③ 如果在纯比例环节的控制下,系统的实际值始终达不到目标值,存在静态误差,如图9.2.4.3 所示
此时,我们可以逐渐增大积分系数, 并同时观察曲线的变化,如果消除静差的时间过长,则可以再适当增大积分系数,但是需要注意兼顾系统的超调量。经过调整之后,如果系统的曲线已经较为理想,则说明这个系统只需要比例和积分环节的控制。
④ 如果系统在比例和积分环节的控制下出现小幅度的超调现象, 此时,我们可以慢慢地增大微分系数,并同时观察曲线的变化,从而找到最合适的参数。以上就是在实际调参中经常遇到的一些问题以及解决方法。然而,在实际应用中,控制系统是多样且复杂的,上述方法只能作为参考,并不是通用的,因此在 PID 调参过程中,大家一定要注意经验的积累。
■ 正点原子 PID 上位机(ATK_PID.exe)介绍
为了方便大家调试 PID 参数以及控制电机, 我们开发了 PID 调试助手上位机,其采用串
口通信, 支持多种波特率, 具有以下功能:
① 16 路波形实时显示;设备状态以及故障显示。
② 总里程、设备位置、电机类型显示。
③ 支持 10 组 PID 参数调节,可以自定义参数调节范围。
③ 支持多种电机控制指令。
大家可以打开 PID 调试助手来查看它的界面,软件的路径: A 盘→6,软件资料→1,软件→6, PID 调试助手→ATK_PID.exe。
■ 上位机通信协议
上位机和下位机(开发板)之间使用整帧传输的方式进行通信, 数据帧采用 CRC16 的校验方式, 下面我们简单介绍一下数据帧的格式,
① 帧头: 一包数据的头部, 固定为 0xC5,长度为 1 个字节。
② 数据类别: 数据的属性,例如电机速度,温度等,长度为 1 个字节。
③ 数据域: 某个数据类别的值,长度为 0~32 个字节。
④ 校验和: 采用 CRC16-MODBUS 校验,校验范围包括帧头、数据类别和数据域,长度为 2 个字节。
④ 帧尾:一包数据的尾部,固定为 0x5C,长度为 1 个字节。具体的协议内容可查阅《PID 调试助手通信协议.pdf》这个文档,路径: A 盘→6,软件资料→1,软件→6, PID 调试助手→《PID 调试助手通信协议.pdf》。
■ ATK_PID.exe使用方法
① 双击 ATK_PID.exe 即可打开上位机.
② 在设备连接处选择下位机对应的 COM 口、波特率,点击“打开”按钮,如果没有显示 COM 口,可以尝试点击蓝色的刷新图标进行刷新,
③ 按需选择波形显示通道和缩放方式,点击“开始”即可显示波形,
④ 观察设备的状态及故障指示,
⑤ 右侧界面可设置、获取参数,下发控制指令及显示系统数据
⑥ 上图 9.3.2.5 中,点击右侧的“参数调整”按钮,即可进入 PID 系数及多种参数设置的界面,
进入到图 9.3.2.6 这个界面之后,我们可以在区域①选择所需的 PID 参数组别(1~10)以及设置相应的 PID 系数。
PID 系数可以在输入框手动输入或者拉动横条来选择所需数值,数值确定完后点击“设置 PID”按钮即可设置 PID 系数,如果选择了自动发送指令,当我们拉动完横条之后,上位机就会自动设置对应的参数,其他的参数设置方法同理。
注意:参数的设置是有默认范围的,如果上位机默认的范围不适用,可以点击上图区域
③的“参数范围设置”按钮, 即可改变参数设置范围,如图 9.3.2.7 所示:
关于 PID 上位机调试助手的简单使用就介绍到这里,其他的功能大家可以亲自去上手体验,这只是一个非常简单的工具。
相关文章:
【算法-PID】
算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节(Proportion)■ PID 积分环节(Integral)■ PID 微分环节(Differential) ■ 位置式PID,增量式PID介绍■ 位置式 PID 公式■ 增量式 PI…...
ros rosbag使用记录
rosbag: 1. rosbag record -a 记录当前所有消息(较少用)2. rosbag record -O bag_name.bag /topic 记录指定消息3. rosbag info 查阅bag文件信息4. rosbag play 播放bag文件内容5. python script 查看bag文件内容参考: 1. rosbag record -a 记…...
WebKit结构揭秘:探秘网页渲染的魔法之源
一、WebKit之心:渲染引擎的魔力 WebKit的渲染引擎是其核心所在,它犹如一位技艺高超的魔法师,将HTML、CSS和JavaScript的魔法咒语转化为绚丽的网页画面。它解析代码,绘制页面,让网页内容跃然屏上,展现出无尽…...
VSCode美化
今天有空收拾了一下VSCode,页面如下,个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多,有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网:Maple-Font 我只安装了下图两个字体,使…...
Runes 生态一周要览 ▣ 2024.3.25-3.31|Runes 协议更新 BTC 减半在即
Runes 生态大事摘要 1、Casey 发布了 Runes 协议文档 RUNES HAVE DOCS,Github 代码库更新到 ord 0.17.0 版本,Casey 表示符文是一个“严肃”的代币协议。 2、Casey 公布了第一个硬编码的创世符文「UNCOMMONGOODS」 3、4月7日香港沙龙|聚焦「…...
瘦身Spring Boot应用(thinJar)
瘦身Spring Boot应用(thinJar) 简介 我们使用Spring Boot提供的spring-boot-maven-plugin打包Spring Boot应用,可以直接获得一个完整的可运行的jar包,把它上传到服务器上再运行就极其方便。 但是这种方式也不是没有缺点。最大的缺点就是包太大了&…...
备战蓝桥杯---贪心刷题1
话不多说,直接看题: 本质是一个数学题: 我们令xi<0表示反方向传递,易得我们就是求每一个xi的绝对值之和min,我们令平均值为a爸。 易得约束条件: x1-x2a1-a,x2-x3a2-a..... 解得x1x1-0,x2x1-((n-1)*a-a2-...an)。…...
《数据结构学习笔记---第九篇》---循环队列的实现
文章目录 1.循环队列的定义 2.循环队列的判空判满 3.创建队列并初始化 4.入队和出队 5. 返回队尾队首元素 6.释放循环队列 1.循环队列的定义 定义:存储队列元素的表从逻辑上被视为一个环。 我们此次实现的循环队列,采用顺序表 typedef struct {int…...
前端调试工具之Chrome Elements、Network、Sources、TimeLine调试
常用的调试工具有Chrome浏览器的调试工具,火狐浏览器的Firebug插件调试工具,IE的开发人员工具等。它们的功能与使用方法大致相似。Chrome浏览器简洁快速,功能强大这里主要介绍Chrome浏览器的调试工具。 打开 Google Chrome 浏览器,…...
vue 加 websocket 聊天
<template><div style="height: 100%; width: 100%; background-color: #fff"><div class="wrap"><!-- 头部 --><div class="titleBox"><imgsrc="@/assets/image/avatar.png"style="argin: 10p…...
uniapp通过蓝牙传输数据 (ios)
在uni-app中,可以通过uni-ble(uni-app官方提供的蓝牙插件)来实现iOS设备上的蓝牙数据传输。 首先,确保已在uni-app的manifest.json文件中添加uni-ble插件的配置: "permission": { "scope.userLocati…...
docker搭建CI/CD环境配置过程中的常见问题
一、Jenkins 1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepo…...
实验四 微信小程序智能手机互联网程序设计(微信程序方向)实验报告
请编写一个用户登录界面,提示输入用户名和密码进行登录; 代码 index.wxml <view class"user"> <form bindreset""> <view>用户名:</view><input type"text"name""/>…...
WPF —— 关键帧动画
wpf动画类型 1<类型>Animation这些动画称为from/to/by动画或者叫基本动画,他们会在起始值或者结束值进行动画处理,常用的例如 <DoubleAnimation> 2 <类型>AnimationUsingKeyFrames: 关键帧动画,功能要比from/to这些动画功…...
Taro + vue3 小程序封装标题组件
分为没有跳转页面的title组件和 有跳转页面的title组件 我们可以把这个封装成一个组件 直接上代码 <template><div class"fixed-title-container"><div class"box"><div class"icon" v-if"isShow" click"…...
babyAGI(6)-babyCoder源码阅读2任务描述部分
废话不多说,我们直接看task的prompt 这里需要注意的是,每个openai_call的temperature都不相同,这也是开发程序时需要调整和关注的一点 1. 初始化代码任务agent 作为babycoder的第一个angent,整个prompt编写的十分值得学习 整个p…...
生成式语言模型预训练阶段验证方式与微调阶段验证方式
生成式语言模型,如GPT-3、BERT等,在预训练和微调阶段都需要进行验证以确保模型性能。下面分别介绍这两个阶段的验证方式: 预训练阶段的验证: 预训练阶段通常使用大量未标注的文本数据来训练模型,以学习语言的一般特性。…...
flink on yarn
前言 Apache Flink,作为大数据处理领域的璀璨明星,以其独特的流处理和批处理一体化模型,成为众多企业和开发者的首选。它不仅能够在处理无界数据流时展现出卓越的实时性能,还能在有界数据批处理上达到高效稳定的效果。本文将简要…...
用TOMCAT部署web项目教程
文章目录 引言I 使用webapps文件夹II 利用server.xmlIII 自定义配置文件IV 预备知识4.1项目的一般结构4.2 contex标签4.3 IDE部署4.4 配置Tomcat服务引言 在开发阶段,一般使用IDE如MyEclipse来部署web项目,不要忘记手动部署的三种方式。 I 使用webapps文件夹 将项目文件夹…...
bash例子-source进程替换、alias不生效处理
#1. source 例子, 进程替换source <(echo alias zls"ls") #上一行 中 echo替换为cat,则得到如下行, 好处是 cat不用处理引号转义问题,而echo则必须处理引号转义问题#写一段复杂脚本,且 不处理引号转义问题 &#x…...
rabbitmq死信交换机,死信队列使用
背景 对于核心业务需要保证消息必须正常消费,就必须考虑消费失败的场景,rabbitmq提供了以下三种消费失败处理机制 直接reject,丢弃消息(默认)返回nack,消息重新入队列将失败消息投递到指定的交换机 对于核…...
gitlab备份与恢复
1.1.1 查看系统版本和软件版本 cat /etc/debian_version cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 1.1.2 数据备份 打开/etc/gitlab/gitlab.rb配置文件,查看一个和备份相关的配置项 sudo vim /etc/gitlab/gitlab.rb gitlab_rails[backup_path] &q…...
HBase详解(1)
HBase 简介 概述 HBase是Yahoo!公司开发的后来贡献给了Apache的一套开源的、分布式的、可扩展的、基于Hadoop的非关系型数据库(Non-Relational Database),因此HBase并不支持SQL(几乎所有的非关系型数据库都不支持SQL),而是提供了一套单独的命令和API操…...
深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度
看这篇前请先把我上一篇了解一下:深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客 前言: 相信很多学习数据结构的人,都会遇到一种情况,就是明明最一开始学习就学习了时间复杂度,但是在后期…...
视频汇聚/安防监控/EasyCVR平台播放器EasyPlayer更新:新增【性能面板】
视频汇聚/安防监控/视频存储平台EasyCVR基于云边端架构,可以在复杂的网络环境中快速、灵活部署,平台视频能力丰富,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云…...
【教程】Flutter 应用混淆
在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…...
STM32中C编程引入C++程序
C具备类的创建思想很实用于实际场景多相似性的框架搭建;同种类型或相似类型的C的优势明显因此进行相互嵌套使用 需要在C中使用C类的话,你可以通过C的“extern "C"”语法来实现。这允许你在C代码中使用C的链接方式,而在C代码中使用…...
MySQL DBA 需要了解一下 InnoDB Online DDL 算法更新
在 MySQL 8.0.12 中,我们引入了一种新的 DDL 算法,该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列,这是来自腾讯游戏的贡献。 然后在 MySQL 8.0.29 中,我们添加了在表中任意位置添加(或删除&…...
多态--下
文章目录 概念多态如何实现的指向谁调谁?例子分析 含有虚函数类的大小是多少?虚函数地址虚表地址多继承的子类的大小怎么计算?练习题虚函数和虚继承 概念 优先使用组合、而不是继承; 继承会破坏父类的封装、因为子类也可以调用到父类的函数;…...
备考ICA----Istio实验16---HTTP流量授权
备考ICA----Istio实验16—HTTP流量授权 1. 环境准备 kubectl apply -f istio/samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f istio/samples/bookinfo/networking/bookinfo-gateway.yaml访问测试 curl -I http://192.168.126.220/productpage2. 开启mtls …...
石家庄做网站备案有哪些公司/新闻发稿渠道
汉企奇点网络ZINI0908期班。(.NET)两位陈老师都很亲切呢 做程序猿预计前期会比较辛苦,但是有付出就会有收获,一分耕耘一分收获,要不断学习,持之以恒,以后学过的课要及时总结、记录、巩固。 程序…...
吉林省网站建设行业需求分析/十大引擎网址
题目:写一个函数返回参数二进制中 1 的个数比如: 15 0000 1111 4 个 1程序原型:int count_one_bits(unsigned int value){// 返回 1的位数 }解题思路:首先写出这个数字的二进制序列并且定义一个计数器,由于数字在计算机…...
营销型企业网站建设教案/百度引擎的搜索方式是什么
首先创建二叉树,然后对二叉树遍历进行了单元测试。只要将相应的注释取消,便可以成功运行。 /******************************************** 二叉树遍历前序、中序、后序的递归和非递归实现 ********************************************/ #include<…...
wordpress成品网站云部落/seoul是什么品牌
有时在网上下载的word 文档会带有保护密码,只能读,现介绍一个简单的方法,解轻松实现编辑。新建一个空白文档,把带有保护的文档内容全选,复制,再贴到新建的空白文档中,即可以。被锁定的文档示例图…...
网站备案没公司/优化快速排名教程
问题描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例:给定数组 nums [-1,2,1,-…...
做教育机构的设计哪些网站好/百度开户推广
北京市软件开发项目概算指南©版权所有International Business Machines Corporation2003。保留所有权利。 大多数软件项目失败。 实际上,Standish小组报告说,超过80%的项目失败,原因是它们超出预算,延迟…...