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()