使用 Arduino 实现 PID 控制器

使用 Arduino 实现 PID 控制器

PID controller implementation using Arduino (microcontrollerslab.com)
In this article, you will learn how to design PID controller using Arduino. PID controller can implemented using both analog and digital electronics. But in this tutorial, you will see the implementation of PID controller using Arduino development board. you will see it is very easy to design a proportional integral derivative controller using a microcontroller board like Arduino than using analog electronics. If you are reading this article, you surely know about feedback control system. Proportional integral derivative controller has many application in motor speed control, digital temperature controller and in many power electronics projects.

在本文中,您将学习如何使用 Arduino 设计 PID 控制器。 PID 控制器可以使用模拟和数字电子技术实现。 但在本教程中,您将看到使用 Arduino 开发板实现 PID 控制器。您会发现,使用 Arduino 等微控制器板设计比例积分导数控制器比使用模拟电子设备更容易。如果您正在阅读这篇文章,那么您一定了解反馈控制系统。 比例积分导数控制器在电机速度控制、数字温度控制器和许多电力电子项目中都有广泛应用。

PID controller design using Arduino

Introduction to PID controller

So let’s start off with the process. To understand PID controller, you first need to understand few concepts of feedback control system. A process in the control theory is a system whereby an applied input generates an output.So let’s take a visual system for example as our process. Our process consists of a throttle actuator which feeds fuel into the engine. Our input to the system is the angle of the gas pedal and our output is the speed or velocity of a vehicle. The greater the angle the faster the vehicle will go. The smaller the angle the slower the vehicle will go. This is an example of open loop control system.Now as far as this process is concerned, the driver’s actuation of the gas pedal is fully responsible for how slow or fast the vehicle will go. But what if we want to regulate speed at a constant velocity without actuating the gas pedal ourself ?

因此,让我们从过程开始。要理解 PID 控制器,首先需要了解反馈控制系统的一些概念。 在控制理论中,过程是一个输入产生输出的系统。 我们的过程包括一个向发动机供油的节气门执行器。 我们对系统的输入是油门踏板的角度,输出是车辆的速度。 角度越大,速度越快。 角度越小,速度越慢。 这就是开环控制系统的一个例子。就这一过程而言,驾驶员对油门踏板的踩踏完全决定了车辆行驶的快慢。 但是,如果我们想在不踩油门踏板的情况下匀速行驶,该怎么办呢?

1 PID control Arduino

This is achieved using a closed loop feedback system commonly known as cruise control.To integrate cruise control to this process we will need to add a few more elements to the system block. First we start off by sensing the speed using a sensor or in this case a speedometer.The sensed speed the speedometer provides is compared with a set point or a desired speed to generate an error term.This error term is then fed into a controller which generates an actuation signal to drive the throttle and thus we have a feedback loop.

要将巡航控制集成到这一过程中,我们需要在系统模块中添加一些元素。 首先,我们使用传感器(在本例中为车速计)感知车速。车速计提供的感知车速与设定点或期望车速进行比较,从而产生误差项。

How PID controller works?

Now let’s say it’s some instance the vehicle is moving at 70 miles per hour. But we set our cruise control set point to 75. The actual speed is fed back and subtracted from our set point and we get a positive error of plus five. This positive error goes into the controller to generate a positive actuation signal to the throttle. Now this will allow more fuel into the engine and will cause the vehicle to go fast enough to reach the desired set point of 75 and our error will converge down to zero. This is the power of negative feedback control.

假设车辆以每小时 70 英里的速度行驶。但我们将巡航控制的设定点设置为 75 英里。 实际速度从我们的设定点反馈并减去后,我们得到了正 5 的正误差。 这个正误差进入控制器,为节气门产生一个正的驱动信号。 现在,这将使更多的燃油进入发动机,并使车辆以足够快的速度达到所需的设定点 75,我们的误差也将收敛为零。 这就是负反馈控制的威力。

Now the same situation can happen vice versa where if the vehicle is going faster than our set point. So let’s say at 80 miles per hour. You’ll get a negative error term of negative 5. And thus our controller will provide a decrease throttle signal to slow down the vehicle back to 75. And again the error will converge down to zero. So it’s pretty apparent from this example that the controllers functionality is to essentially take our error signal and generate a control signal to drive our process. In doing so our actual output should eventually reach our desired set point and thus the error should converge down to zero.

反之亦然,如果车辆的速度超过了我们的设定值。比方说,以每小时 80 英里的速度行驶。 你会得到负 5 的负误差项。 因此,我们的控制器将提供一个减小油门的信号,使车辆减速至 75。 误差将再次趋于零。 因此,从这个例子中我们可以很明显地看出,控制器的功能主要是接收误差信号,并生成控制信号来驱动过程。 这样,我们的实际输出最终应达到我们所需的设定点,因此误差应趋于零。

What is the purpose of PID controller ?

Now the subject of this tutorial is to understand the famous controller used in most feedback control systems. The Proportional integral and Derivative controller or better known as the PID controller. The PID controllers job is to essentially take this error signal and perform three separate mathematical operations on it. Sum up the results and cleverly produce an output that will drive the system or process to the desired setpoint. The controller can be mathematically written out as shown where a control signal is a summation of three mathematical operations. The term involves taking the error and multiplying it by a constant Kp. The integral term involves integrating the error over time and the derivative term involves taking the derivative of the error.

本教程的主题是了解大多数反馈控制系统中使用的著名控制器。 比例积分和微分控制器,或更广为人知的 PID 控制器。 PID 控制器的工作主要是接收误差信号,并对其执行三个独立的数学运算。 将结果相加,巧妙地产生一个输出,从而驱动系统或过程达到所需的设定点。 如图所示,控制器可以用数学方法写出,其中控制信号是三个数学运算的总和。 误差项是将误差乘以常数 Kp。 积分项涉及误差随时间的积分,导数项涉及误差的导数。

2 PID controller Arduino

Now you can see that each term has a constant in front of it. These are known as the tuning constants, and are the essential design parameters that if chosen properly will allow the controller to output a control signal that will bring the error down to zero. But when assessing a control system having the error term go down to zero is not the only goal. Because although you can adjust these parameters such that the error is driven to zero. Poor tuning of these constants can cause overshooting the desired set point, long settling time, and even in some cases instability or oscillations.

现在你可以看到,每个项前面都有一个常数。这些常数被称为调谐常数,是重要的设计参数,如果选择得当,控制器就能输出控制信号,将误差降至零。 但在评估控制系统时,将误差项降至零并不是唯一的目标。 因为尽管可以通过调整这些参数来使误差趋于零,但如果调整不当,也会导致误差过大。 如果对这些常量的调整不当,可能会导致过冲所需的设定点、沉淀时间过长,甚至在某些情况下出现不稳定或振荡。

Proportional controller

Now I will discuss P or proportional term of the PID controller. As you see in block diagram of PID controller, the error essentially goes through each PID block and their outputs are summed up and form a control signal that drives the process to the desired setpoint. But in order to understand the advantage and disadvantage of using one or more term, we will break down the controllers operation by dealing with each term separately. Now lets see how a closed loop system performs with just proportional control. So let’s say we have a positive step change in the setpoint and therefore we get a positive error. Since all the P controller does is multiply the error by the control constant Kp. It’s quite apparent why this is known as proportional control because with a fixed Kp constant the control signal is proportional to the error. If our errors large, we’ll get a large control signal if our errors are small. we’ll get a small control signal. And thus we can adjust our control effort by simply increasing or decreasing this Kp constant.

现在我将讨论 PID 控制器的 P 或比例项。 正如您在 PID 控制器框图中所看到的,误差基本上会经过每个 PID 模块,然后将它们的输出相加,形成一个控制信号,驱动过程达到所需的设定点。 但是,为了了解使用一个或多个术语的优缺点,我们将通过分别处理每个术语来分解控制器的运行。 现在,让我们来看看仅使用比例控制的闭环系统是如何运行的。 假设设定点发生了正阶跃变化,因此产生了正误差。 由于 P 控制器所做的只是将误差乘以控制常数 Kp。很明显,这就是所谓的比例控制,因为在固定的 Kp 常量下,控制信号与误差成正比。 如果误差大,控制信号就大,如果误差小,控制信号就小。 因此,我们只需增大或减小 Kp 常量,就能调整控制力度。

3 proportional controller PID

Main disadvantage of proportional control is that we can never drive the error to zero because that would mean our control effort is zero. Now there is a way to remove the offset or bring the error to zero. Looking at the normal structure of the controller if we were to add a bias signal to our controllers output, this can potentially drive the process enough such that we reach our desired setpoint. But the disadvantage of this method is that for every new set point we’re going to have to manually change the bias. Now although the proportional controller is easy to implement and can drive the process close to our setpoint, it can never eliminate the offset automatically. This issues can be automatically solved by adding integral controller.

比例控制的主要缺点是,我们永远无法将误差降至零,因为这意味着我们的控制努力为零。 现在有一种方法可以消除偏移或使误差为零。 从控制器的正常结构来看,如果我们在控制器的输出中加入一个偏置信号,就有可能驱动整个过程,从而达到我们所需的设定点。 但这种方法的缺点是,每增加一个新的设定点,我们就必须手动改变偏置。 现在,虽然比例控制器很容易实现,并能使过程接近设定点,但它永远无法自动消除偏置。 这个问题可以通过添加积分控制器来自动解决。

Proportional Integral controller

It is used to mediates some of the flaws of the proportional controller. P controllers main flaw was its inability to bring the steady state error to zero. we have this steady state error AND we need a controller to somehow act on it in a way that will allow our control signal to accumulate until the desired setpoint is reached. This is easily achieved by taking the integral of the error. Let’s add the integral term to our original controller to form a PI controller.

它用于弥补比例控制器的一些缺陷。 比例控制器的主要缺陷是无法将稳态误差降至零。我们有了这个稳态误差,我们需要一个控制器,以某种方式对其采取行动,让我们的控制信号不断累积,直至达到所需的设定点。 利用误差的积分就可以轻松实现这一目标。 让我们将积分项添加到原始控制器中,形成一个 PI 控制器。

4 PI controller

The main advantage of integral control is that it allows us to eliminate the steady state error completely. Now by tuning the Ki term we can adjust the control effort of our integral controller. Now in this case for a high Ki value, we can see that we get a steeper slope and this would make our control signal more aggressive.

积分控制的主要优点是可以完全消除稳态误差。 现在,通过调整 Ki 项,我们可以调整积分控制器的控制力度。 在这种情况下,如果 Ki 值较高,我们可以看到斜率会更陡峭,这将使我们的控制信号更加激进。

5 PI controller graph

Now just like with proportional control, we can’t just arbitrarily choose an integral constant. The output behaves relatively upon varying the integral constant. If Ki is too low, we end up with the large rise time and overall a very slow response. This is bad when it comes to rejecting disturbances or constant changes in the set point. You can see we reached our set point much sooner with just a small amount of overshoot. But in an attempt to get a faster response, increasing this gain even further can lead to larger overshoots and this should be avoided when trying.

we learned that the proportional controller provided us with a fast rise time but with a steady state offset. The PI controller solves that using the integral control to reduce the error to zero. But when neither the controller can solve is the large overshoots and ringing. In order to reduce or dampen this response, we will need to add a differential controller and they’ll quickly respond fast enough to keep the output from overshooting or undershooting the set point.

现在,就像比例控制一样,我们不能随意选择一个积分常数。 在改变积分常数时,输出会有相对的变化。 如果 Ki 太低,则上升时间较长,总体响应速度较慢。 这不利于抑制干扰或设定点的持续变化。 您可以看到,我们只需少量的过冲就能更快地达到设定点。 但是,为了获得更快的响应,进一步提高增益会导致更大的超调,在尝试时应避免这种情况。 PI 控制器利用积分控制将误差减小到零,从而解决了这一问题。 但这两种控制器都无法解决的问题是大的过冲和振铃。 为了减少或抑制这种响应,我们需要增加一个差分控制器,它们能快速响应,使输出不会过冲或下冲设定点。

Proportional integral derivative controller

We have seen that P controller eliminates the stay state error through the interval term. But we also made it clear that neither the p term or I term can contribute to actively dampening the overshoots. This is where the derivative comes into play. Let’s look at how this new term handles the error signal the job of the derivative term is to take the rate of change of the error as its control signal. The proportional term decreases the rise time the interval term eliminates a steady state error and the derivative term reduces the overshoots and ringing.

我们已经看到,P 控制器通过区间项消除了停留状态误差。 但我们也清楚地看到,无论是 P 项还是 I 项,都无法主动抑制过冲。 这就是导数发挥作用的地方。 导数项的工作是将误差的变化率作为其控制信号。 比例项缩短了上升时间,间隔项消除了稳态误差,导数项则减少了过冲和振铃。

PID controller graph

Now that we have understand PID controller and its three terms. Now lets see how to implement PID controller using Arduino.现在我们已经了解了 PID 控制器及其三个术语。 现在让我们看看如何使用 Arduino 实现 PID 控制器。

Implementing PID controller using Arduino

Now, I’ll be going over how to implement a PID controller in code on the Arduino. The mathematical equation written here is a controller expressed in continuous time or in the analog domain.

现在,我将介绍如何在 Arduino 上用代码实现 PID 控制器。 这里所写的数学公式是以连续时间或模拟域表示的控制器。
PID controller equation

Now studying the controller in the continuous or analog domain makes it easier for us to realize what is going on. But most controllers these days are implemented digitally or with microcontroller like Arduino in software. So we want to implement this PID controller on the Arduino. We are going to have to convert it to the discrete time or digital domain as we can see here.

现在,研究连续域或模拟域中的控制器更容易让我们意识到发生了什么。 但如今大多数控制器都是通过数字方式或 Arduino 等微控制器软件实现的。 因此,我们要在 Arduino 上实现这个 PID 控制器。 我们必须将其转换为离散时域或数字域,如图所示。

PID controller in digital domain

Not much has changed at all since we’re in the digital domain. We must treat each signal as a discrete sample. Because arduino will measure feedback signal in digital form. The proportional term is just the gain multiplied by the discrete error signal. The integral term is now a Sigma summation and the dreaded term is simply the difference between the current error and the previous error. Now in the digital domain graphically our control signal looks like this.

自从我们进入数字领域以来,情况并没有发生多大变化。我们必须将每个信号视为离散样本。 因为 arduino 将以数字形式测量反馈信号。比例项只是增益乘以离散误差信号。 积分项现在是西格玛求和,而可怕的项只是当前误差与前一个误差之间的差值。 现在,在数字域中,我们的控制信号看起来是这样的。

PID controller digital graph

Now as you can see here to the control signal of N is computed discretely every t seconds in time. This case T is a sampling time or a fixed time interval. The controller takes to compute a new value for the output. And if we take a look at the discrete equation again this capital T is essentially the delta t of the continuous domain. Now because in the loop we’re going to call the function in intervals of t seconds. We can treat this as a fixed constant and this will be a lot clearer when I get to the coding part in Arduino IDE.

如图所示,N 的控制信号每隔 t 秒计算一次。这里的 T 是采样时间或固定的时间间隔。 控制器需要计算一个新的输出值。 如果我们再看一遍离散方程,资本 T 本质上就是连续域的 delta t。 在循环中,我们将以 t 秒为间隔调用函数。 我们可以将其视为一个固定常数,这一点在我使用 Arduino IDE 进行编码时会更加清楚。

PID controller code for Arduino

So here we have the PID controller algorithm written out on the Arduino ID.

double sensed_output, control_signal;
double setpoint;
double Kp;  //proportional gain
double Ki;  //integral gain
double Kd;  //derivative gain
int T;      //sample time in milliseconds (ms)
unsigned long last_time;
double total_error, last_error;
int max_control;
int min_control;void setup() {
}void loop() {PID_Control();  //calls the PID function every T interval and outputs a control signal
}void PID_Control() {unsigned long current_time = millis();  //returns the number of milliseconds passed since the Arduino started running the programint delta_time = current_time - last_time;  //delta time intervalif (delta_time >= T) {double error = setpoint - sensed_output;total_error += error;  //accumalates the error - integral termif (total_error >= max_control) total_error = max_control;else if (total_error <= min_control) total_error = min_control;double delta_error = error - last_error;  //difference of error for derivative termcontrol_signal = Kp * error + (Ki * T) * total_error + (Kd / T) * delta_error;  //PID control computeif (control_signal >= max_control) control_signal = max_control;else if (control_signal <= min_control) control_signal = min_control;last_error = error;last_time = current_time;}
}

I’ll now proceed to explain the code line by line. So first we start off by defining a variables needed for the computation. And you’ll notice most of these are of the double data type or floating point. This is needed because it allows more precise computation. Now just to make things easier I kept the computation of the control signal in a separate function called the control. Now in order to make sure that we get a uniform interval of sample time t we first start off by storing the current time the program has been running by using a built in function in Arduino IDE called millies. This function essentially gives you the number of milliseconds passed since the start of the program. we can keep track of the current time we can compute the delta time by subtracting the current time from the previous time now to get the updated control signal every t seconds.

下面我将逐行解释代码。首先,我们定义计算所需的变量。 你会发现这些变量大多是 double 数据类型或浮点型。 这样做是有必要的,因为这样可以进行更精确的计算。 为了方便起见,我将控制信号的计算放在了一个名为 control 的单独函数中。 为了确保采样时间 t 间隔一致,我们首先使用 Arduino IDE 中名为 millies 的内置函数存储程序当前运行的时间。该函数主要提供自程序开始运行以来所经过的毫秒数。我们可以跟踪当前时间,用当前时间减去之前的时间,计算出 delta 时间,从而获得每 t 秒更新一次的控制信号。

we have an IF condition whereby if the time interval during the loop equals or exceeds t the control signal is computed and updated. This if condition is what allows the controller to get called FBT seconds and it makes realizing the controller a lot easier. Our error term is simply the set point minus the sensed output the total error refers to the integral term of accumulating the error. Every t seconds the Delta error refers to the derivative term whereas just a current error minus the last error. So what those values are computed and obtain a we can sum them up to form our control signal. And you can see here that the summation is pretty much the same as shown in the discrete expression. So what’s the control signals computed. We actually store the error as last error for the next iteration. And the same goes for the time. This pretty much covers how the control algorithm is implemented or on the order.

我们有一个 IF 条件,如果循环中的时间间隔等于或超过 t,就会计算和更新控制信号。 这个 if 条件使得控制器可以称为 FBT 秒,也使得控制器的实现变得更加容易。我们的误差项只是设定点减去感应输出,总误差指的是误差累积的积分项。 每 t 秒的 Delta 误差指的是导数项,而只是当前误差减去上次误差。 因此,计算出这些值后,我们就可以将它们相加,形成我们的控制信号。 你可以看到,这里的求和与离散表达式中显示的基本相同。 那么计算出的控制信号是什么呢? 实际上,我们将误差作为下一次迭代的最后一次误差进行存储。 时间也是如此。 这几乎涵盖了控制算法的执行方式或订单。

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

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

相关文章

秋叶大神中文版Stable Diffusion下载安装使用教程

Stable Diffusion是什么&#xff1f; Stable Diffusion是一款开源的AI绘画软件&#xff0c;于2022年发布&#xff0c;由CompVis、Stability AI和LAION的研究人员创建。该软件具有出色的图像生成功能&#xff0c;使用户能够从头开始绘制作品&#xff0c;也可以使用现有的图像进…

打卡第二十五天:递增子序列、全排列、全排列II、重新安排行程、N皇后、解数独

1、递增子序列 题目 文章 视频 这个递增子序列比较像是取有序的子集。而且本题也要求不能有相同的递增子序列。在子集一题中通过排序&#xff0c;再加一个标记数组来达到去重的目的。而本题求自增子序列&#xff0c;是不能对原数组进行排序的&#xff0c;排完序的数组都是自…

LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅

作者&#xff1a;坤硕 背景介绍 随着生成式 AI 概念的火爆&#xff0c;以 ChatGPT 为代表&#xff0c;市场上涌现了一系列商用或者开源的大模型&#xff0c;同时基于大语言模型以及 AI 生态技术栈构建的应用以及业务场景也越来越多&#xff0c;大规模的模型训练以及模型推理场…

python—pandas基础(1)

文章目录 安装设定系统环境Pandas的主要数据结构Series对象创建使用列表创建属性values和index指定index使用list列表指定index传入字典创建&#xff0c;默认将key作为index将一个标量与index对象一起传入创建 DataFrame对象创建创建DataFrame对象values index columns属性列表…

如何查看cpu架构,查看CPU架构的方法

查看CPU架构的方法有很多&#xff0c;具体取决于你使用的操作系统。以下是一些常见的操作系统中查看CPU架构的方法&#xff1a; Windows查看CPU架构的方法 使用系统信息工具 按 Win R 打开运行窗口。输入 msinfo32 并按 Enter。在系统信息窗口中&#xff0c;找到“处理器”一…

WebGoC题解(14) 151.(2017dloi小乙)第5题 巧克力甜度(sweet)

题目描述 妈妈买了n颗甜度不同的巧克力&#xff0c;规定小C只能吃最大甜度之和是S。 例如&#xff1a;有5颗巧克力&#xff0c;s6&#xff0c;每个的甜度分别为&#xff1a; 4 2 3 1 1&#xff0c;那么小C最多可以吃3颗。 请问你能帮小C计算一下最多能吃多少颗巧克力吗? 输入格…

谁说只有车载HMI界面?现在工业类的HMI界面UI也崛起了

谁说只有车载HMI界面&#xff1f;现在工业类的HMI界面UI也崛起了 引言 艾斯视觉作为行业ui设计和前端开发领域的从业者&#xff0c;其观点始终认为&#xff1a;工业自动化和智能化水平不断提高&#xff0c;人机界面&#xff08;Human-Machine Interface&#xff0c;简称HMI&a…

普中51单片机:蜂鸣器的简单使用(十一)

文章目录 引言蜂鸣器的分类工作原理无源蜂鸣器压电式蜂鸣器&#xff1a;电磁式蜂鸣器&#xff1a; 电路符号及应用代码演示——无源蜂鸣器 引言 蜂鸣器是一种常见的电子音响器件&#xff0c;广泛应用于各种电子产品中。它们能够发出不同频率的声音&#xff0c;用于警报、提醒、…

Multi Range Read与Covering Index是如何优化回表的?

上篇文章末尾我们提出一个问题&#xff1a;有没有什么办法可以尽量避免回表或让回表的开销变小呢&#xff1f; 本篇文章围绕这个问题提出解决方案&#xff0c;一起来看看MySQL是如何优化的 回表 为什么会发生回表&#xff1f; 因为使用的索引并没有整条记录的所有信息&…

Mysql索引解析

索引 1.创建索引的SQL ALTER TABLE tbl_name ADD PRIMARY KEY (col_list); // 该语句添加一个主键&#xff0c;这意味着索引值必须是唯一的&#xff0c;且不能为NULL。ALTER TABLE tbl_name ADD UNIQUE index_name (col_list); // 这条语句创建索引的值必须是唯一的。ALTER T…

加入到「圆心学堂」知识星球后,你将获得些什么呢?

大家好呀&#xff0c;我的知识星球上线啦&#xff01;加入到「圆心学堂」知识星球后&#xff0c;您将获得些什么呢&#xff1f; 1.共50套原创精品图文教程电子书&#xff0c;包含1000篇文章&#xff0c;涵盖主流框架、中间件、分布式和微服务等领域&#xff0c;紧跟行业趋势&a…

怎么培养政府机关的公文写作能力?

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 公文写作千万不能零起步&#xff0c;你有时间慢慢学习&#xff0c;但领导哪有时间等你慢慢进步啊。 如果问写公文有什么捷径&#xff0c;那就不得不靠「AI写作工具…

XLua 原理分析 三

前面已经介绍了Lua与C#的基础通信原理&#xff0c;和Wrap中间文件的作用。有了前面2篇的基础&#xff0c;大概已经能搞清这块的原理。 为了加深对这块的印象&#xff0c;这里开始正式分析Xlua中的Lua和C#的通信。 一、Lua如何调用CS的过程 lua的初始化代码&#xff1a; pri…

python基础巩固

基本数据类型 可以用isinstance来判断 a111 isinstance(a,int) True数值运算&#xff1a; >>> 2 / 4 # 除法&#xff0c;得到一个浮点数 0.5 >>> 2 // 4 # 除法&#xff0c;得到一个整数 0 >>> 17 % 3 # 取余 2Python 字符串不能被改变。向一个…

vuex学习day02-state状态、严格模式(strict)、mutations、辅助函数mapMutations、actions

4、state状态 &#xff08;1&#xff09;作用&#xff1a;提供共享数据 &#xff08;2&#xff09;步骤&#xff1a; 1&#xff09;找到仓库&#xff0c;通过state提供共享数据 报错1&#xff1f;&#xff1a; 解决方式&#xff1a; 找到.eslintrc.js文件&#xff0c;添加一…

LabVIEW操作系列1

系列文章目录 我的记录&#xff1a; LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…

python+barcode快速生成条形码3-PyQt6微界面(电商条形码生成工具)

背景 继续上一片文章的电商测试小工具&#xff0c;进行了优化 需求 生成条形码之后&#xff0c;可以通过界面方式读取条形码的图片 支持当个条形码快速生成&#xff0c;以及批量导入 csv文件导入 添加微界面图像按钮&#xff0c;方便操作&#xff0c;更像是在实现测试工具的…

AI在Facebook的应用:预见智能化社交的新前景

在数字化时代&#xff0c;社交媒体平台已成为我们生活的重要组成部分&#xff0c;而人工智能&#xff08;AI&#xff09;的快速发展正推动着这些平台向更智能、更个性化的方向发展。Facebook&#xff0c;作为全球最大的社交网络平台之一&#xff0c;正不断探索和应用AI技术&…

基于JAVA+SpringBoot+Vue的oa系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、SpringCloud、Layui、Echarts图表、Nodejs、爬…

x64dbg反汇编技术入门学习笔记

EIP EIP是程序下一次要运行地方 寄存器 临时存放数据,按照Intel规定去存放 window API 微软提供的&#xff0c;用户可以操作系统的一些接口&#xff0c;以函数的形式体现 杀软是如何查杀恶意的 镜像地址 实际地址 实际运行后代码的地址 查外部调用段就可以定位到.rdat…