【算法-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 上位机调试助手的简单使用就介绍到这里,其他的功能大家可以亲自去上手体验,这只是一个非常简单的工具。

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

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

相关文章

嵌入式数据库-Sqlite3

阅读引言: 本文将会从环境sqlite3的安装、数据库的基础知识、sqlite3命令、以及sqlite的sql语句最后还有一个完整的代码实例, 相信仔细学习完这篇内容之后大家一定能有所收获。 目录 一、数据库的基础知识 1.数据库的基本概念 2.常用数据库 3.嵌入式…

wordpress插件,免费的wordpress插件

WordPress作为世界上最受欢迎的内容管理系统之一,拥有庞大的插件生态系统,为用户提供了丰富的功能扩展。在内容创作和SEO优化方面,有一类特殊的插件是自动生成原创文章并自动发布到WordPress站点的工具。这些插件能够帮助用户节省时间和精力&…

Hides for Mac:应用程序隐藏工具

Hides for Mac是一款功能强大的应用程序隐藏工具,专为Mac用户设计。它能够帮助用户快速隐藏当前正在运行的应用程序窗口,保护用户的隐私和工作内容,避免不必要的干扰。 软件下载:Hides for Mac下载 Hides for Mac的使用非常简单直…

初步了解C++

目录 一:什么是C? 二.C发展史 三:C关键字 四:命名空间 4.1命名空间的介绍 4.2命名空间的使用 4.3命名空间的使用 4.3.1使用作用域限定符 4.3.2 使用using将命名空间的某个成员引入 4.3.3使用using把整个命名空间展开 4.4命名空…

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是: 数据库里负责增加,删除,修改,查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…

BC40056 Imports“SolidWorks.Interop.swconst”中指定的命名空间或类型不包含任何公共成员

BC40056 Imports“SolidWorks.Interop.swconst”中指定的命名空间或类型不包含任何公共成员,或者找不到该命名空间或类型。 问题描述原因分析 解决办法 ) 问题描述 严重性 代码 说明 项目 文件 行 警告 BC40056 Imports“SolidWorks.Interop.swconst”中指定的命名…

基于SSM框架的校园失物招领系统:从设计思路到实现细节

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…

Java代码基础算法练习-自定义函数之字符串连接-2024.03.30

任务描述: 写一函数,将两个字符串连接起来,然后在主函数中调用该函数实现字符串连接操作。 任务要求: 代码示例: package M0317_0331;import java.util.Scanner;public class m240330 {public static void main(Stri…

Python 妙用运算符重载——玩出“点”花样来

目录 运算符重载 主角点类 魔法方法 __getitem__ __setitem__ __iter__ __next__ __len__ __neg__ __pos__ __abs__ __bool__ __call__ 重载运算符 比较运算符 相等 不等 ! 大于和小于 >、< 大于等于和小于等于 >、< 位运算符 位与 & 位…

腾讯 tengine 替代 nginx

下载地址 变更列表 - The Tengine Web Server 解压 tar -xvf 安装包.gz 进入到解压目录 cd 解压目录 使用 ./configure 命令来指定安装目录,这边指定安装到 /opt/tengine/install路径下 新建install目录 ./configure --prefix/opt/tengine/install 检查是否有缺失的依…

LM算法探寻——答案在022浙江大学信号与系统

LM算法详解 | 宇尘 (gitee.io) 求函数最小值&#xff0c;从另一个角度理解是求误差最小值。 梯度 最陡梯度下降算法和LMS算法原理介绍及MATLAB实现_lms滤波器中的梯度下降-CSDN博客 均值即平均值 (3 封私信 / 56 条消息) FIR滤波器中的冲激响应怎么理解&#xff1f; 和滤波有…

嵌入式linux学习之交叉编译器安装

交叉编译器介绍 ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译&#xff0c;编译就需要编译器&#xff0c;在 Liux 进行 C 语言开发里面使用 GCC 编译器进行代码编译&#xff0c;但是 Ubuntu 自带的 gcc 编译器是针对 X86 架构的&#xff01;而我们现在要编…

Linux安装python3

Linux安装python3 本文章中使用的安装包等相关文件&#xff1a; 链接: https://pan.baidu.com/s/1C4PTB6IqXtHM6XSOEMkefg 提取码: wyeq 1.编译环境安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc mak…

在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)

问题场景 目前我的环境变量都存储在 /etc/profile 文件中&#xff0c;当我通过远程 SSH 执行一些命令时&#xff0c;提示命令找不到&#xff0c;如下所示&#xff1a; 问题出现原因 这里找到了一张出自尚硅谷的图片&#xff0c;很好的解释了该问题&#xff1a; 这是由于 Linu…

03---java面试八股文——mybatis-------8题

21、MyBatis实现一对一查询 MyBatis 有两种不同的方式加载关联&#xff1a; 嵌套 Select 查询&#xff1a;通过执行另外一个 SQL 映射语句来加载期望的复杂类型。嵌套结果映射&#xff1a;使用嵌套的结果映射来处理连接结果的重复子集。查看mybatis的关联 MyBatis是一种流行的J…

乡村数字化转型:科技赋能打造智慧农村新生态

随着信息技术的迅猛发展&#xff0c;数字化转型已成为推动社会进步的重要引擎。在乡村振兴的大背景下&#xff0c;乡村数字化转型不仅是提升乡村治理能力和治理水平现代化的关键&#xff0c;更是推动农业现代化、农村繁荣和农民增收的重要途径。本文旨在探讨乡村数字化转型的内…

瑞吉外卖实战学习--5、新增员工功能

新增员工功能 效果图1、开发流程2、页面发送ajax请求,将新增员工的信息以json的形式提交给服务器2.1、在填写信息的时候会发现身份校验比较麻烦,可以在validate中将全局的校验方式去掉,方便填写2.3、看到接口未employee2.4、前端代码分析3、服务器接收到提交的数据并调用ser…

(js)循环条件满足时终止循环

(js)循环条件满足时终止循环 功能需求&#xff1a;勾选的字段中若包含“数据标注划分”则显示数据划分&#xff0c;不包含则不显示 包含&#xff1a; 不包含&#xff1a; // 标注划分显示 const markStr 数据标注划分 for (let i 0; i < value.length; i) { //value为勾选…

大话设计模式之策略模式

策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法的行为。这种模式定义了一族算法&#xff0c;将每个算法都封装起来&#xff0c;并且使它们之间可以互相替换。 在策略模式中&#xff0c;一个类的行为或其算法可以在运行时改变。这种模式包含以下角色&#xff1…

数字化时代多系统安全运维解决方案

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…