Для цифровых систем управления вам необходимо производить выборку данных и запускать контроллер каждый раз. 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 в зависимости от языка, который вы используете.
Пожалуйста, смотрите код Python для формы скорости ПИД-регулятора. Форму скорости немного проще реализовать, потому что вы не беспокоитесь о дополнительной логике для анти-сброса windup.
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, по следующей ссылке.
https://apmonitor.com/wiki/index.php/Main/GekkoPythonOptimization