Загрузить файлы в «/»

This commit is contained in:
2025-04-02 12:45:52 +07:00
parent 418766230e
commit 99b05654d0

56
pid_graphics.py Normal file
View File

@@ -0,0 +1,56 @@
import matplotlib.pyplot as plt
import time
# Параметры PID-регулятора
kp = 0.5 # пропорциональный коэффициент
ki = 0.1 # интегральный коэффициент
kd = 0.2 # дифференциальный коэффициент (НОВОЕ!)
# Инициализация переменных
setpoint = 50.0 # заданное значение
input_val = 0.0 # текущее значение (с датчика)
I = 0.0 # интегральная составляющая
prev_error = 0.0 # предыдущая ошибка (для D-составляющей)
dt = 0.1 # временной шаг
# Списки для хранения данных для графика
time_points = []
setpoint_points = []
input_points = []
out_points = []
# Симуляция работы PID-регулятора
for t in range(100):
# Обновляем входное значение (имитация системы)
error = setpoint - input_val
input_val += error * 0.1 * (1 + 0.1 * t) # имитация изменения системы
# Расчет управляющего сигнала (PID)
P = error # пропорциональная составляющая
I += error * dt # интегральная составляющая
D = (error - prev_error) / dt # дифференциальная составляющая (НОВОЕ!)
out = P * kp + I * ki + D * kd # общий управляющий сигнал
# Сохраняем предыдущую ошибку для D-составляющей
prev_error = error
# Сохраняем данные для графика
time_points.append(t * dt)
setpoint_points.append(setpoint)
input_points.append(input_val)
out_points.append(out)
time.sleep(dt) # задержка для имитации реального времени
# Построение графика
plt.figure(figsize=(10, 6))
plt.plot(time_points, setpoint_points, label='Setpoint', linewidth=2)
plt.plot(time_points, input_points, label='Input', linewidth=2)
plt.plot(time_points, out_points, label='Output (PID)', linewidth=2)
plt.title('PID Controller Performance (with D-term)')
plt.xlabel('Time (s)')
plt.ylabel('Value')
plt.legend()
plt.grid(True)
plt.show()