Temporización de la instrucción PID

Es necesario actualizar periódicamente la instrucción PID y el muestreo de la variable de proceso. Este tiempo de actualización está relacionado con el proceso físico que usted está controlando. En el caso de lazos muy lentos, como por ejemplo los lazos de temperatura, para tener un buen control suele ser suficiente un periodo de una actualización por segundo o incluso un periodo mayor. En lazos más rápidos, como por ejemplo los lazos de presión o de flujo, puede que sean necesarios unos periodos de actualización como de 250 milisengundos. Solo en casos raros, como por ejemplo en el control de la tensión de un carrete de desbobinador, se requieren periodos de actualización de 10 milisegundos o de menor tiempo.
Debido a que la instrucción PID utilizan una base de tiempo para su cálculo, necesitará sincronizar la ejecución de la instrucción con el muestreo de la variable de proceso (PV).
La forma más sencilla de ejecutar una instrucción PID es introducirla en una tarea periódica. Establezca que el tiempo de actualización del lazo (.UPD) sea el mismo que el régimen de la tarea periódica y asegúrese de que la instrucción PID se ejecute en cada escaneado de la tarea.
La forma más sencilla de ejecutar una instrucción PID es introducirla en una tarea periódica. Establezca que el tiempo de actualización del lazo (.UPD) sea el mismo que el régimen de la tarea periódica y asegúrese de que la instrucción PID se ejecute en cada escaneado de la tarea.
Escalera de relés
CONSEJO: Para evitar el bloqueo de PID con valores internos inválidos de punto flotante, asegúrese de que PV no sea INF o NAN antes de invocar instrucciones como:
  • XIC (PC_timer.DN)
  • MOV(Local:0:1.Ch0Data, Local:0:1.Ch0Data)
  • XIO(S:V)
  • PID(...)
Texto estructurado
PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data, Local:1:O.Ch4Data,0,Local:1:I.Ch4InHold, Local:1:I.Ch4Data);
Cuando use una tarea periódica, asegúrese de que la entrada analógica empleada para la variable de proceso se actualice con el procesador a un régimen que sea considerablemente más rápido que el régimen de la tarea periódica. Idealmente, la variable de proceso debería enviarse al procesador al menos de 5 a 10 veces más rapido que el régimen de la tarea periódica. De esta manera se minimiza la diferencia de tiempo entre las muestras actuales de la variable de proceso y la ejecución del lazo PID. Por ejemplo, si el lazo PID está en una tarea periódica de 250 ms, se utiliza un tiempo de actualización de 250 ms (.UPD = .25), y se configura el módulo de entrada analógica para que produzca datos al menos cada 25 o 50 ms.
Otro método, aunque menos exacto, para ejecutar una instrucción consiste en introducir la instrucción en una tarea continua y utilizar un bit de efectuado de temporizador para desencadenar la ejecución de la instrucción PID.
Escalera de relés
CONSEJO: Para evitar el bloqueo de PID con valores internos inválidos de punto flotante, asegúrese de que PV no sea INF o NAN antes de invocar instrucciones como:
  • XIC (PC_timer.DN)
  • MOV(Local:0:1.Ch0Data, Local:0:1.Ch0Data)
  • XIO(S:V)
  • PID(...)
Texto estructurado
PID_timer.pre := 1000
TONR(PID_timer);
IF PID_timer.DN THEN PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data,
Local:1:O.Ch0Data,0,Local:1:I.Ch0InHold,
Local:1:I.Ch0Data);
END_IF;
CONSEJO: Para evitar el bloqueo de PID con valores internos inválidos de punto flotante, asegúrese de que PV no sea INF o NAN antes de invocar instrucciones como:
  • XIC (PC_timer.DN)
  • MOV(Local:0:1.Ch0Data, Local:0:1.Ch0Data)
  • XIO(S:V)
  • PID(...)
Con este método, el tiempo de actualización de lazo de la instrucción PID debe ser el mismo que el valor preestablecido en el temporizaor. Igual que cuando se utiliza una tarea periódica, debería establecer que el módulo de entrada analógica produzca la variable de proceso a un régimen considerablemente más rápido que el régimen de actualización de lazo. Solo debería utilizar el método de temporización de la ejecución PID en lazos cuyos tiempos de actualización sean al menos varias veces mayor que el tiempo de ejecución más largo posible de la tarea continua.
La forma más exacta de ejecutar una instrucción PID es usar la función de muestreo en tiempo real (RTS) de los módulos de entrada analógicas 1756. El módulo de entrada analógica muestrea sus entradas en tiempo real del régimen de muestreo que usted establezca al configurar el módulo. Cuando expira el periodo de muestreo en tiempo real, el módulo actualiza sus entradas y actualiza también una marca de tiempo continua que produce el módulo (representada por el miembro .RollingTimestamp de la estructura de entradas analógicas).
El rango de la marca de tiempo oscila entre 0 y 32,767 milisegundos. Se monitorea la marca de tiempo. Si cambia, significa que se ha recibido una muestra nueva de la variable de proceso. Cada vez que cambia una marca de tiempo, se ejecuta una instrucción PID Puesto que el muestreo de la variable de proceso lo activa un módulo de entrada analógica, el tiempo de muestreo de entrada es muy exacto y el tiempo de actualización de lazo que utiliza la instrucción PID debe ser el mismo que el tiempo RTS del módulo de entrada analógica.
Para asegurarse de no estar omitiendo muestreos de la variable de proceso, ejecute la lógica a un régimen más rápido que el tiempo RTS. Por ejemplo, si el tiempo RTS es de 250 ms, puede colocar la lógica PID en una tarea periódica que se ejecute cada 100 ms para asegurarse de que nunca pierda una muestra. Incluso podría colocar la lógica PID en una tarea continua siempre que se asegure de que se actualizará con una frecuencia mayor de 250 ms.
A continuación se muestra un ejemplo del método de ejecución RTS. La ejecución de la instrucción PID depende de la recepción de datos de entrada analógica nuevos. Si falla o se desmonta el módulo de entrada analógica, el controlador deja de recibir las marcas de tiempo continuas y el lazo PID deja de ejecutarse. Debe monitorear el bit de estado de la entrada analógica PV y, si muestra un estado incorrecto, se fuerza el lazo al modo manual de software y se ejecuta el lazo en cada escaneado. De esta manera el operador podría cambiar de forma manual la salida del lazo PID.
Escalera de relés
Texto estructurado
IF (Local:0:I.Ch0Fault) THEN TIC101.SWM [:=] 1;
ELSE TIC101.SWM := 0; END_IF;
IF (Local:0:I.RollingTimestamp<>PreviousTimestamp) OR (Local:0:I.Ch0Fault) THEN
PreviousTimestamp := Local:0:I.RollingTimestamp; PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data,
Local:1:O.Ch0Data,0,Local:1:I.Ch0InHold,
Local:1:I.Ch0Data);
END_IF;
Entregue su opinión
¿Tiene dudas o comentarios acerca de esta documentación? Por favor deje su opinión aquí.
Normal