Contents — find the section you need
Change parameters and verify
Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.
Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.
The experiment controls are in English.
Un pequeño modelo ejecutable facilita la inspección de los cambios de ganancia PID y la saturación del actuador. Estos resultados se calcularon el 7 de septiembre de 2026 con Python 3.12.3. Se trata de simulaciones numéricas, no de mediciones ni de un modelo de motor identificado.
Modelo y condiciones
La planta es \ddot y+2\dot y+y=u. La salida y y el control u están normalizados; el tiempo se expresa en segundos. La salida inicial, la velocidad y la integral son cero. El objetivo es 1 desde el tiempo cero, y luego 0,4 desde los 6 segundos. El paso es de 0,005 segundos en el intervalo de 0 a 12 segundos, lo que proporciona 2401 muestras por caso.
El controlador es u=K_pe+K_iI-K_d\dot y_m, con e=r-y_m. Aquí, y_m es la salida medida. La derivada actúa sobre ella en lugar del objetivo. Las ganancias de referencia son K_p=3, K_i=2 y K_d=1. La integración y la diferenciación utilizan explícitamente el paso de tiempo; la planta utiliza la integración semiimplícita de Euler. Consulte Fundamentos de PID para conocer los principios.
Ejecutar el código
Guarde pid_lab.py en un directorio de trabajo vacío y ejecute lo siguiente. Solo requiere la biblioteca estándar de Python y sobrescribe los archivos de resultados con los mismos nombres.
python3 --version
python3 pid_lab.py
Genera el CSV y el resumen JSON. Para regenerar la figura, guarde y ejecute plot_pid.py en el mismo directorio. La representación gráfica se verificó con matplotlib 3.6.3. Las columnas del archivo CSV son escenario, tiempo, objetivo, salida, control e integral.
Comparación de retardo y saturación
El gráfico superior muestra la salida; el inferior, el control. La línea negra representa el objetivo. Las etiquetas de los escenarios coinciden con el archivo CSV, y aw indica la función anti-saturación.
| Escenario | Cambio | Salida a los 12 s | Error absoluto integrado |
|---|---|---|---|
| nominal | Sin retardo, control limitado a ±3 | 0,4008 | 1,7913 |
| retardo_0,4s | Medición con retardo de 0,4 s | 0,3883 | 1,8860 |
| limit_0.8_aw | Control ±0.8, integración condicional | 0.4003 | 3.3424 |
| limit_0.8_no_aw | Control ±0.8, integración sin restricciones | 0.6602 | 5.0996 |
El error absoluto integrado utiliza la integración rectangular izquierda en el intervalo de 0 a 12 segundos. Sus unidades son segundos de salida normalizada, no el error de posición física en metros. Inspeccione la oscilación y el esfuerzo de control, así como la muestra final.
La función anti-saturación no aumenta la capacidad del actuador
En equilibrio, esta planta tiene y=u, por lo que un límite de control de 0.8 no puede alcanzar un objetivo de 1. Si el error continúa acumulándose, la integral puede requerir una entrada excesiva incluso después de que el objetivo baje a 0.4. El código rechaza la integración que llevaría a una mayor saturación, mientras que permite la integración que ayuda a salir de ella.
Esto modifica el estado interno del controlador, no el motor ni la capacidad de la fuente de alimentación. Lograr que el objetivo sea alcanzable es una decisión aparte.
Modificar una ganancia a la vez
from pid_lab import simulate
for kp in (1., 3., 6.):
rows = simulate("gain", kp=kp)
print(kp, max(row[3] for row in rows if row[1] < 6))
Comparar el pico durante el intervalo objetivo inicial. Luego, variar solo ki y, posteriormente, solo kd, registrando también el esfuerzo de control máximo. No todas las ganancias son mejores; repetir las comparaciones con retardo y saturación.
Límites y siguientes comprobaciones
El modelo excluye el ruido de medición, la fricción, la cuantización, la fluctuación de la comunicación y el filtrado de derivadas. Reducir a la mitad el paso de tiempo: si la respuesta cambia sustancialmente, investigar primero la aproximación numérica. No copiar estas ganancias en el hardware sin identificar la planta y hacer coincidir las unidades y las escalas de tiempo. Continuar con MPC para estudiar las restricciones del problema de control.
Ejecutar el mismo cálculo localmente
Extraiga el archivo ZIP de código fuente ejecutable completo, o guarde el punto de entrada del experimento, los núcleos generados y el código fuente PID original en una carpeta. PID utiliza la biblioteca estándar de Python; Kalman e ICP requieren NumPy. Los comandos originales para la generación de figuras siguen estando disponibles.
python3 experiment.py pid --parameters '{"kp":3,"ki":2,"kd":1,"delay":0,"limit":3,"antiwindup":true}' > result.json
Establezca el retardo en 0,4 o el límite en 0,8 y compare el IAE y la salida final con y sin anti-windup.
Code, data and reproduction
The ZIP contains the same computation code as the browser, synthetic data and comparison cases. These are not physical measurements.
Download reproduction package · Instructions (EN/JA) · Files and experiment conditions (JSON)
Extract the ZIP into a new directory, then run:
python3 reproduce.py --experiment pid
This Lab compares 4 cases. PID uses Python’s standard library; Kalman/ICP require NumPy. See the instructions for dependencies and tested versions.
Comentarios
Inicia sesión para continuar.
Todavía no hay datos.