PID, APC

从仿真到计算机辅助设计控制系统

封面故事:虽然仿真系统可以帮助控制系统编程设计,但可以使用像C#的通用编程语言:第一,一些基本控制系统理论。

由Peter Galan. 2021年6月30日
提供:Peter Galan,一名退休的控制软件工程师

学习目标

  • 仿真系统有助于控制系统的编程设计。
  • 基本控制系统理论审查有助于编程控制系统。
  • 控制系统可以在C#或Python中模拟。

控制系统是重要的工程成果之一。我们认为它们是完全自然的,但控制系统设计师在工作成功之前必须经历斗争。是的,有很多仿真系统,比如Simulink(在Matlab下)。如果程序员需要实现的不仅仅是仿真,例如,一个应用程序来自动分析一个被控制系统和设计一个最优控制器,使用合适的通用编程语言是更可取的。大多数应用程序都在Microsoft Windows下运行,所以让我们看看如何用c#语言编写一个应用程序,这是Microsoft Windows应用程序的“本地”语言。

甚至控制系统设计者也可以在这里找到有用的信息,以帮助在c#中进行模拟系统编程。让我们从控制系统的基本理论开始。

控制系统介绍

图1显示了通用,闭环控制系统的基本框图。它由受控系统或工厂和控制器组成。控制器的目的是在由参考输入确定的电平下维护输出变量。这是通过输出变量的比较(减法)来实现的,y(t)参考输入,r(t)。结果是调节误差,e(t),这是控制器的输入信息。控制器计算执行变量,u (t),这是对受控系统的输入。

图1:请参阅闭环控制系统的基本框图。提供:Peter Galan,一名退休的控制软件工程师

图1:请参阅闭环控制系统的基本框图。提供:Peter Galan,一名退休的控制软件工程师

被控系统主要是模拟系统(也就是说,它们可以用连续时间的数学方程来描述),而今天的控制器主要是数字系统,因此这样一个闭环控制系统的框图可以用图2来表示。两个新的组件是数字到模拟(D/A)和模拟到数字(A/D)转换器。只有两个信号,u (t)y(t)都具有连续时间特性。其余的信号是离散形式的。所以,整个信号处理从比较开始r [n]y [n]可以通过适当的数字系统(如微控制器)来实现。

图2:显示了数字闭环控制系统的框图。提供:Peter Galan,一名退休的控制软件工程师

图2:显示了数字闭环控制系统的框图。提供:Peter Galan,一名退休的控制软件工程师

控制系统设计:系统分析

控制系统设计的第一阶段是被控系统(设备)分析。您需要尽可能多地提取有关受控系统的信息。为了控制目的,感兴趣的区域是系统的传递函数,最好是众所周知的(s-域)形式:

如果您自己设计受控系统,那么您可能可以使用一组微分方程来模拟(描述)它。它听起来很简单,但即使对于最简单的受控系统,与DC伺服电机的伺服机构一样,它可能需要大量的时间来完成其数学描述。

如果您无法在数学上描述您的受控系统,请将其视为“黑匣子”并通过不同的方式找到其传输功能。最好的方法是在输入到系统的输入处应用一步函数并捕获并绘制其时间响应。当它在图3中所示时,你将会变得非常可能是一个“S”曲线。

图3:控制系统的传递函数以“S”形曲线示出。提供:Peter Galan,一名退休的控制软件工程师

图3:控制系统的传递函数以“S”形曲线示出。提供:Peter Galan,一名退休的控制软件工程师

现在绘制一条切线通过曲线的拐点,如图3所示。在时间(t)轴上,您应该能够标记两个杰出的线路段,TuTn从该比率来看,用户将能够确定传递函数的顺序,并且在最常见的二阶传输函数的情况下,您可以找出两个时间常数。受控系统分析在此停止,尽管您可能会发现您的受控系统相当于具有以下传递函数的二阶系统(其中增益,K为简单起见)。

关于增益价值,我们需要将其视为相对值。系统的增益为1(例如,50%的输入信号/变量导致系统输出达到50%)。这就是设计精心设计的控制系统应该表现。如果系统输出低于那些50%,则系统尺寸为大小(K< 1),它将永远不会达到它的最大输出。相反的情况是一个超大的系统(K> 1),即使输入低于其最大值,它也将达到完整输出。

那么,我们如何编写计算机程序来模拟被控系统呢?首先,我们需要找到如何用离散时间工具来描述连续时间系统的方法。任何这样的系统都可以描述为递归滤波器,或无限脉冲响应(IIR)滤波器。该滤波器的输出在数学上可表示为以下差分方程的和:

y [n] = a0x [n] +一个1x [n-1] + a2X [n-2] +1y (n - 1) + b2Y [n-2] + ...

在哪里y [n], y (n - 1),…是当前时间戳的系统(过滤器)输出,n,以前的时间戳,n - 1等等,,x [n], [n],…是当前时间戳时系统的输入值,n,以前的时间戳,n - 1等等。一个0一个1...b2,为构成卷积核的权系数。它们通常被称为递归系数。

单极的输出(即一阶)低通滤波器只是:

y [n] = a0x [n] + b1y [n-1]

对于控制系统的综合来说,知道传递函数(即,y / xRatio),在这个简单的一阶低通滤波器的情况下,为:

h [z] = a0/(1 - b1z-1(用Z变换/域表示)

现在我们需要在这两个系数之间找到关系,一个0b1,以及相应的单极滤波器的时间常数。在RC(模拟)中,滤波器R * C产品表示过滤器的时间常数,即时间(以秒为单位),该时间(以秒为单位),其占RC滤波器输出增加到其输入的63.2%(步函数)值或衰减其原始步骤函数值的36.8%(如果这样的RC滤波器是高通滤波器)。这种崛起或衰减遵循一个简单的指数函数。对于单极低通滤波器,有一个简单的规则,用于选择这两个系数:

一个0= 1 - x
b1 = x

...其中x是0到1之间的值,它实际上代表了两个样本之间的衰减量(或上升)。数量越高,较慢的衰减/上升。在离散时代表示,我们对样品衰减/上涨的表示感兴趣。例如,我们想创建一个递归过滤器,其中包含10个样本的“时间常数”,这意味着在完全十个样本(步骤或迭代)之后,滤波器输出将衰减/上升到63.2%。这是一个简单的公式,表达衰减系数,x,通过一些样本,d

x = e1 / d

现在,我们可以编写一个代表这种递归的低通滤波器的代码。虽然您可以使用任何编程语言,但用于此目的的最佳编程语言是任何现代,面向对象的语言。但是由于前面提到的原因让我们来看看用C#中写的代码:

当我们实例化第一级系统类的对象时,我们将为它做好准备一个0b1基于期望样本数的系数,d,表示过滤器的时间常数。然后,当我们用表示step函数值的参数调用该对象的Response()方法时,它将在一次迭代后返回筛选器输出。

用户可以验证一阶低通滤波器如何通过将以下代码添加到Program.CS源文件:

在上面运行该程序时,屏幕截图1显示了控制台[Microsoft Windows和其他]输出。用户可以看到第10次迭代后的一阶低通滤波器输出正好63.2(即稳定的输出值的63.2%)。

截图1。一阶(低通滤波器)系统的一些输出显示在屏幕截图中。提供:Peter Galan,一名退休的控制软件工程师

截图1。一阶(低通滤波器)系统的一些输出显示在屏幕截图中。提供:Peter Galan,一名退休的控制软件工程师

我们可以模拟例如上述受控系统的二阶传送功能吗?实际上,是的,我们可以,我们只需要将两个,一阶系统(低通滤波器)连接到级联,如下所示:

...我们在其中替换了4个和16ms的原始时间常数4和16个样本/迭代,RESP。此选择使我们的“采样”速率正常为每1ms的样本。它将起作用,只是抽样将是一点点“粗糙”,所以有四个时间常数的样本太少。比抽样率较高的十倍会更好。但是,您不想在输出控制台中打印千千值并分析它们,您更愿意以图形表单看到输出值。因此,而不是控制台应用程序,用户需要将程序写为Microsoft Windows窗体应用程序,并尝试结果的一些图形表示。

在进一步进一步之前,了解从分析的系统需要需要多少样本(迭代步骤)。对于这种指数行为的系统,它比其稳定或沉降的输出量多约3至5倍时间比它们的稳定或稳定的输出更多。我们的二阶系统具有组合/总时间常数20ms(4 + 16),因此捕获100毫秒的间隔是我们所需要的。从1ms间隔中服用10个样品也是合理的。所以,依靠约1000个样本。

虽然我们可以通过两次,一阶系统的级联模拟任何二阶系统,但它不是一种非常优雅的方式,因为我们可以轻松地编写二阶系统的代码 - 低通滤波器,例如下列:

此类构造函数获取两个参数,d1d2当对象实例化,而在内部一个0b1给出并计算了这两个一阶系统的系数,命名为一个b对于第一个系统,和cd对于第二个系统。然后创建并计算它们的组合系数,实现二阶传递函数:

h [z] = a0/(1 - b1z-1) * C0/(1 - D1z-1) =一个0c0/ (1 - (b1+ D.1)z.-1+ B.1d1z-2

控制系统合成:从S域到Z域

受控过程通常是一个连续的过程;所有变量都是时间的连续函数。另一方面,数字闭环控制器不使用连续时间信号(参考输入、实际值等),它们只处理模拟信号的数字化样本。这种系统最好在z域中描述。然而,整个控制系统的综合可以在s域完成,切换到z域可以在执行阶段完成。

根据控制理论,您可以记住比例,积分,导数(PID)补偿是闭环控制最常见的形式之一。为什么这么受欢迎?在大多数应用中,受控过程可以由第一或二阶传送函数表示。PID控制器可以取消,或者至少显着补偿转移函数的两个极点。

图4示出了这种连续时间(模拟)PID控制器。控制器计算调节误差,e(t),作为参考值或设定点之间的差值,r(t),和实际输出值,y (t)。然后控制器的比例分量将这个误差信号乘以一个比例常数,KP.集成组件计算积分e (t)然后乘以一个积分常数,K衍生成员计算衍生物e (t)并将其乘以衍生常数,KD这三个组件的总和创造了致动价值,u (t),应用于受控系统。

图4:PID控制器计算比例,积分和衍生组件的致动值。提供:Peter Galan,一名退休的控制软件工程师

图4:PID控制器计算比例,积分和衍生组件的致动值。提供:Peter Galan,一名退休的控制软件工程师

这是PID控制块输出的微分方程作为调节错误的函数:

PID控制器的传递函数,,在S域中表示为

现在,让我们有一个受控系统,它可以通过二阶传送函数近似

然后整个控制系统的开环传递函数,,等于

在这里,您可以看到,为什么这样的PID控制器非常重要。您可以最佳地调整其参数,如比值可以匹配τ的值1+τ.2和和比值可以匹配τ的值1*τ.2,则开环传递函数将简化为:随着转移函数的两极被“取消”。在这种最佳调谐的控制系统中,闭环传输函数变为一流的低通滤波器系统,其时间常数τ,相当于(如果我们假设受控系统增益,K为1)。这是非常好的,因为我们可以从闭环控制系统中获得更快的时间响应(如果您制作κ1足够大)比受控系统本身的响应是什么。

控制系统实现,仿真

可以修改模拟PID控制器以实现为离散时间控制系统,因为将PID控制器的微分方程重写为其差异形式并不难以:

在哪里u [n]当前的执行值是多少ne [n]是当时的监管错误吗?n

e (n - 1)是先前采样时间的调节误差,n - 1。T为采样的时间周期。同一时期,T,用于处理,例如用于处理u [n]计算。

对于实际应用,需要某些修改该方程式。首先,整体构件将更好地使用集成的梯形近似而不是矩形。然后衍生成员往往是嘈杂的。为了降低噪音,我们可以使用两个以上的(例如四个)的调节误差的样本,并通过微小(4-Tap)冷杉筛选。这是修改的PID公式:

上面的差分方程可以很容易地用c#实现,而PIDControlBlock类可以是这样的,例如:

正如我们已经拥有的受控系统(工厂)类所设计,我们可以将这两个对象放在一起,并创建最终闭合的垃圾系统类:

请注意,上面显示的ClosedLoopSystem类不仅可以用于SecondOrderSystem对象,还可以用于另一个常用的FirstOrderAstatic系统/对象。它们代表了整个伺服机构的类别。您可以将FirstOrderSystem类代码与integrator组合起来创建FirstOrderAstatic类。这是它的传递函数:

这里是Main()函数中的代码,用户可以模拟整个闭环控制系统。植物对象用时间常数250ms和100ms(或迭代/样本)表示为二阶系统。PID对象与最佳,KP,KI,KD,系数和选择的KI值实例化,使得它将使闭环响应快5倍,而不是工厂的组合时间常数。

现在运行该程序,这就是你将看到的。实际上,在控制台上,您将无法看到所有1000个值,只有几百个最新值。所以,要看到它们,你可能会将它们写入文本文件。然后你可以看到它们。然后尝试找到接近63.2的值。你会在70行左右找到它。这是什么意思?那些具有组合时间常数350(250 + 100)的二阶控制系统,现在表现为具有时间常数左右70的系统。实际上,我们的闭环控制系统具有更小的五倍的(总)时间常数。

计算机辅助设计应用程序

一旦你理解了控制系统分析和综合的本质,并且你知道如何在计算机上表示/模拟它,编写一个更复杂的计算机程序就不是那么困难了,这个程序将作为计算机辅助的控制系统设计应用程序。

自动化控制系统分析并不那么困难。首先,您需要在程序中输入代表开环传递函数的数据,例如“S”曲线值。它们可以保存在文本文件中。然后计算s曲线的导数数据将帮助你计算TuTn段。

然后通过遵循合适的查找表和插值,您的程序可以计算分析的受控系统的时间常数。作者编写了这样的计算机辅助控制系统设计应用程序,在这里,您可以在此处查看可以计算这些时间常数的方法。屏幕截图2显示了具有两个250 ms时间常量的二阶系统的分析结果:

图2:二阶系统分析结果。提供:Peter Galan,一名退休的控制软件工程师

图2:二阶系统分析结果。提供:Peter Galan,一名退休的控制软件工程师

这样的结果很棒;用户可以看出“S”曲线(一个,绿色,代表真实系统,另一个,由应用程序计算)的曲线是如何相同的。

屏幕截图3显示了一阶ASTATIC系统分析的结果。再次,一个完美的匹配。

图3:一阶无定向系统分析结果完美匹配。提供:Peter Galan,一名退休的控制软件工程师

图3:一阶无定向系统分析结果完美匹配。提供:Peter Galan,一名退休的控制软件工程师

一旦应用程序可以加载和分析表示受控系统传递函数的数据,用户可以开始设计程序的“控制系统综合”部分。

在该部分中,用户将利用他们调整PID控制器的知识,这将是整个控制系统合成的基础。但那还不够。虽然您可以完全调整任何PID控制器,但这种控制系统的实用使用有限。为什么?因为在真实系统中,您的真实PID控制器将无法提供(几乎)无限制的执行变量,u (t),这是最优控制的要求。是的,一个最优控制器将“生成”比实际控制系统所能接受的值高100倍的值。想象一个使用10kW加热器的温度控制系统,它可以应用到1MW的功率,尽管在很短的时间内!因此,一个“现实的”PID控制器必须考虑(和限制)驱动变量,u (t)到一些最大值。作者的应用程序假定提供的传递函数(当输入变量(步函数)为其最大值的50%时拍摄了“曲线”。在1个这样的系统输出的增益将达到其最大值的50%。那么,PID控制器的致动变量的合理限制是什么?非常合理的选择是使用在捕获的“S”曲线数据中找到的最后一个(稳定的)值的2次。

在截图4中,用户可以看到理想的(绿色)和现实的(红色)闭环控制系统的传递函数。有限的驱动变量导致了巨大的过载,这通常是不可接受的,所以需要一些其他的改进。一种解决方案是向控制系统添加一个前馈成员,如下面的屏幕截图所示。结果是一个传递函数用蓝色表示。不理想,但仍然比系统的开环响应(黑色)好得多。

屏幕截图4:二阶控制系统合成显示了理想(绿色)和现实(红色)闭环控制系统的传递函数。提供:Peter Galan,一名退休的控制软件工程师

屏幕截图4:二阶控制系统合成显示了理想(绿色)和现实(红色)闭环控制系统的传递函数。提供:Peter Galan,一名退休的控制软件工程师

当设计一个传递函数等价于一阶低通滤波器和积分器的伺服机构时,预计会出现类似的情况。它的PID(实际上只有PD)控制器也必须应用类似的极限,所以闭环系统的现实行为通常是很差的。想象一个机器人系统(它们充满了这样的伺服机构)表现出如此“迟缓”的动作。当然,还需要另一种类型的控制器。截图5显示了一个这样的控制器。它是“时间最优(砰砰)控制器”。一旦适当调整,它几乎可以提供“理想”的性能。

图5:一阶无定向控制系统综合由时间最优(bang-bang)控制器显示。提供:Peter Galan,一名退休的控制软件工程师

图5:一阶无定向控制系统综合由时间最优(bang-bang)控制器显示。提供:Peter Galan,一名退休的控制软件工程师

还有什么可以添加到这样一个计算机辅助设计应用程序?请看下面的截图。它显示了“手动调优”形式,用户可以在其中更改控件参数的值,同时可以看到它们的即时影响。这是非常有用的,因为用户可以更好地了解单个控制参数如何影响整个控制过程。通过微调,用户可以获得更好、更“讨人喜欢”的结果。

截图6。二阶控制系统的手动整定是非常有用的,因为用户可以更好地了解单个控制参数如何影响整个控制过程。提供:Peter Galan,一名退休的控制软件工程师

截图6。二阶控制系统的手动整定是非常有用的,因为用户可以更好地了解单个控制参数如何影响整个控制过程。提供:Peter Galan,一名退休的控制软件工程师

控制系统可以在C#或Python中模拟

像控制系统这样的复杂系统可以相对容易地通过像c#这样合适的编程语言进行模拟。如果您不是专业的程序员,那么Python(很容易学会)可能是一个更好的选择。模拟是这个项目中比较简单的部分。系统分析的要求稍微高一些。你需要分析“S”曲线数据,在查找表和插值的帮助下,可以找到时间常数。更有要求的可能是结果代表。幸运的是,Microsoft Windows(及其. net平台)为此类数据可视化提供了一个丰富的支持类和其他编程项库。以下是你需要添加到程序中的内容:

使用systemowows.forms.datavisualization.charting;

然后任务变得容易。在互联网上,人们可以找到几十个例子如何使用此类数据可视化。祝您未来的运气努力创建计算机辅助,控制系统设计应用。

彼得加伦是一个退休控制软件工程师。由Mark T. Hoske,Content Manager编辑,控制工程CFE媒体mhoske@cfemedia.com

关键词:c#控制系统编程,编程仿真,PID

考虑一下这个

你正在用吗控制系统设计的正确工具?


彼得加伦
作者简介:Peter Galan是一种(退役的)控制系统设计师,具有广泛的电子设备,控制系统和软件设计体验。他为ZTS,GE,哈士奇,北电,JDSU,艾默生(加拿大和美国,以前的许多公司合作,以前在Kosice(前捷克斯洛伐克的技术大学)。他掌握了一个博士学位。布拉格捷克技术大学应用网络网络的自动控制系统和M.Eng学位学位。