-2

实现我拥有的这个pid代码,主要是我需要传递给函数的信息。有六个变量要传递,但我真的不知道要输入什么。一些背景知识,我正在自动化我的家庭啤酒厂,虽然它已经全部启动并运行,但 RIM 的温度控制无处不在。对于那些不熟悉 RIM 是什么的人来说,这是一种确保被浸泡的谷物保持在非常恒定的温度的方法。它通过使用泵和加热元件加热从浸泡容器底部取出的流体并将其通过加热元件并在需要时加热流体来实现这一点。我现在运行的代码很笨,所以我需要用更智能的东西代替它,比如 PID!

好的,所以我有代码,它只是如何使用它!我想在使用 vb.net 的独立 Windows 窗体项目中启动并运行它。我知道我需要使用 PID 值以使其适合我的应用程序,但是要输入什么才能让我开始呢?

非常感谢您的帮助!

Public Function PID_output(ByVal process As Double, ByVal setpoint As Double, ByVal Gain As Double, _
                        ByVal Integ As Double, ByVal deriv As Double, ByVal deltaT As Double)

 Dim Er As Double
 Dim Derivative As Double
 Dim Proportional As Double
 Static Olderror As Double
 Static Cont As Double
 Static Integral As Double
 Static Limiter_Switch As Double

 Limiter_Switch = 1

 Er = setpoint - process

 If ((Cont >= 1 And Er > 0) Or (Cont <= 0 And Er < 0) Or (Integ >= 9999)) Then
     Limiter_Switch = 0
 Else
     Limiter_Switch = 1
 End If

 Integral = Integral + Gain / Integ * Er * deltaT * Limiter_Switch

 Derivative = Gain * deriv * (Er - Olderror) / deltaT

 Proportional = Gain * Er

 Cont = Proportional + Integral + Derivative
 Olderror = Er

 If (Cont > 1) Then
     Cont = 1
 End If
 If (Cont < 0) Then
     Cont = 0
 End If

Return (Cont)

End Function 
4

1 回答 1

0

使用 PID 进行加热过程比典型的 PID 应用要复杂一些。原因是; 当您需要加热时,您可能会开始为加热器通电。该加热器的功率是您可以将多少能量泵入系统的关键,因此您可以以多快的速度加热它。然而,当谈到冷却时,冷却通常是由环境的性质来实现的。我想说的是:系统不是对称的。

我可以根据您的控件的“方向”为您提供使用不同的控件集。如果过程温度低于您的设定值,则使用控制器 1。但是,如果系统温度高于您的设定值,请使用控制器 2。

对于系统 1,我绝对建议使用 D 项,因为 D 项是一种限制器,它限制了控制器在进程中积聚热量的速度。担心的是;许多热控制系统具有相当大的热惯性和回读反馈的滞后(延迟)。这通常会导致高超调(进度达到并超过设定值相当大)。如果夸大了,将永远振荡(波动):)

此外,对于冷却效果,假设环境为 20 度。现在,如果您的设定点是 100,这就是问题,如果您的设定点是 1000,则完全不同。因为 Delta T 会有所不同(分别为 80 度和 980 度),并且“试图变凉”的系统响应将是 Delta T 的函数。

冷却过程不是线性的,而是指数的(就像电容器通过恒定电阻放电)。如果您的设定点不会每天都在变化,那么您就可以了。但如果不是这样,您最好将您的设定点空间划分为多个区域,并为不同的设定点使用不同的控制器参数。

从哪里开始:有不同的 PID 调整规则。看看齐格勒尼科尔斯方法。但基本上,让你的进度冷却(初始条件),然后给它全油门加热功率并记录时间 - 热量图。该图称为阶跃响应,将为您估算热惯性和系统滞后。当您检查 Ziegler Nichols 方法时,这将告诉您典型的起始 PID 值。

于 2013-10-27T14:37:34.877 回答