Está en la página 1de 7

Ejemplo de PID con Factory IO

Aprovechando la nueva versión de Factory I/O os voy a comentar un programa


que he realizado hace un par de días, el tema es el regulador PID, y lo aplico al
control de una variable de nivel, (cm), y como señal modificadora del mismo una
válvula proporcional (0..10V). Podéis ver la realización en los siguientes vídeos:

Siempre que realizo un programa lo hago en base a funciones, es decir, primero


pienso en las funciones que se necesitan, que datos entran…, que resultados
deben ofrecer…, que estructura de llamadas debe existir, etc.

Es lo que en ajedrez llamamos la estrategia, y después dejo pasar un par de días


por si se me ocurre otra estrategia mejor (una vez que se marca la estrategia
todo va condicionado a la misma, un error en la estrategia equivale a perder la
partida o lo que es lo mismo a “un churro de programa”).

Vista la estrategia me centro en la táctica, es decir, en realizar cada una de las


funciones, normalmente prefiero programar en SCL (es más potente, me cuesta
menos hacer un programa y permite logros imposibles desde los otros entornos
de programación). Bien es cierto que programo así por mi formación,
(normalmente los alumnos suelen preferir cualquier otro lenguaje, KOP; FUP;
GRAPH; por economía).

En este
caso es sencillo, necesitamos un control manual del depósito, y un control PID,
(en realidad ambos controles son automáticos).

Una vez estructurado el programa, pienso en las entradas y salidas


necesarias. En este caso Factory I/O es genial, la tenemos la tabla conforme
hacemos la máquina. Como podéis observar renombro las variables con el
mismo nombre que recibirán en la tabla de variables del programa.

Realizar la máquina no es costoso si se tiene un poco de experiencia.


La tabla de variables la tenemos aquí:

Seguidamente, empezamos con la táctica… ¡la programación de funciones¡¡

Ssi se tienen buenas librerías, no cuesta mucho hacer programas, pero tener
buenas librerías implica un trabajo previo.
Desde el Main, llamo a las funciones necesarias. Como veis no he programado
el estado de emergencia. Esto se queda como tarea vuestra.

Para manual, hacemos una función (insisto, no es manual, es un control


comparativo):
Y para automático hago lo propio… otra función:
El PID lo llamo desde un OB de interrupción cíclica:
Después configuramos el PID y lo ajustamos:

Y ya está.

Después de ajustar el PID, toca probar cómo funciona nuestro “invento”. Os


puedo asegurar que en este momento disfruto, ver que funciona conforme lo he
pensado es muy satisfactorio.

Hay veces que un regulador PI es más que suficiente, (la mayor parte de las
veces), y la labor teórica como es la configuración con el autotuning suele ser
suficiente, si no es suficiente, lo que suelo hacer es calcular los parámetros para
diferentes “setpoints”.

Posteriormente con un Case, ajusto los parámetros adecuados. Mi experiencia


me dice que un PID funciona bien solo para el entorno próximo al SETPOINT,
pero… podemos establecer diferentes ajustes para distintos tramos,…

El reto que planteo a los lectores del blog es realizar sobre esa misma máquina
dos PIDs de nivel con las válvulas de llenado y vaciado…, (se complica
bastante).

Bueno, pues nada más… espero que disfruten de la programación, espero que
os haya motivado en el desarrollo, se esfuercen para conseguir logros, y
levantemos a este bonito país que es España de esta crisis económica y en
muchos casos de valores, en la que estamos inmersos.

Saludos, Eugenio Argaiz Ruiz

Está bien esto del


Está bien esto del ejemplo de PID con Factory IO
¿eh?
Ya estoy de vuelta.

En primer lugar, agradecer a Eugenio su participación en el blog. Siempre está


bien tener visiones diferentes, y soluciones diferentes que compartir.

Hemos visto con esta entrada, la versatilidad de programar en SCL, y una


pequeña parte de lo que nos puede ofrecer Factory IO

https://programacionsiemens.com/ejemplo-pid-factory-io/

También podría gustarte