对于数字控制系统,您需要在每个采样时间对数据进行采样并执行控制器。z 变换将连续系统转换为离散系统。
例如,如果您的采样时间为“1”,则可以表示如下简单的时间序列模型,
y(t) = a1*u(t-1) + a2*u(t-2)
--> y (t) = a1*z^-1*u(t) + a2*z^-2*u(t)
--> y(t) = A(z)u(t),其中 A(z) = a1*z^-1 + a2*z^-2
a1, a2 = FIR 系数
但是,此时移运算符 'z^-1' 不会出现在您的代码中。它通过您的采样时间和 FOR 或 DO 循环隐式表达,具体取决于您使用的语言。请参阅 PID 控制器速度形式的 python 代码。速度形式更容易实现,因为您不必担心防复位饱和的附加逻辑。
for i in range(1, ns): #ns = simulation time
# PID Velocity form
e[i] = sp[i] - pv[i]
P[i] = Kc * (e[i] - e[i-1])
I[i] = Kc*delta_t/tauI * (e[i])
D[i] = Kc*tauD/delta_t * (pv[i] - 2*(pv[i-1]) + pv[i-2])
op[i] = op[i-1] + P[i] + I[i] + D[i]
if op[i] < oplo or op[i] > ophi:
# clip output
op[i] = max(oplo,min(ophi,op[i]))
您还可以在以下链接中找到使用 GEKKO 包的 PID 控制器示例。
https://apmonitor.com/wiki/index.php/Main/GekkoPythonOptimization