Recientemente he recibido una consulta respecto a la sobrecarga que sufre los PLC al crear loops del estilo For-Next en SCL. Hoy vamos a hablar de cómo recorrer un array.
La cuestión es si tanto carga el hecho de que sea SCL… pero no solamente es eso.
Contenido
Aspectos que sobrecargan el PLC en un lazo cerrado
Bajo mi punto de vista, y por experiencias previas, a la hora de hacer un loop, influyen tres aspectos (fundamentalmente):
- Lo optimizado del código
- El número de iteraciones
- El trabajo a realizar en cada iteración.
Código optimizado
En el primer punto, está claro: cuanto más optimizado esté el código, menos tardará en ejecutarse el código, y por tanto, menos sobrecargará el PLC.
Desde este punto de vista, SCL es un lenguaje de alto nivel, y por definición, más alejado del procesador.
Este tipo de lenguajes (en PLC o no), hace que sea mucho más fácil de programar porque es más entendible, pero por otro lado, es menos eficiente de cara a su ejecución.
Por tanto, en un PLC317 como era el caso, siempre será más eficiente una programación en AWL, bien hecha, claro está, frente a SCL.
De hecho, en el caso de un S7-317, todo lo que programes en SCL, tendrá que ser traducido a AWL, por lo que jamás podrá estar mejor optimizado. A lo sumo igual dependiendo del caso.
Número de iteraciones
Esto no tiene mayor explicación: cuanto más iteraciones tengas que hacer, mayor carga de trabajo para el PLC.
No hay más.
Es por eso, que hay que tener en cuenta que cuando son muchas iteraciones, hay que pensar muy bien cuál es la mejor forma de hacerlo para hacer el mínimo de iteraciones posibles.
Trabajo a realizar
Otro punto importante es qué es lo que va a ejecutar el PLC en cada iteración.
No todas las instrucciones cuestan lo mismo ser ejecutadas.
Es por eso que si la conjunción iteraciones-trabajo sobrecarga el PLC tal vez tengas que repensar si lo que está haciendo en cada iteración no se puede hacer de otra forma menos gravosa para el PLC.
¿Y si aún así es mucho trabajo para el PLC?
Bien, habrá veces que no es posible realizar un for-next porque es tal la cantidad de operaciones que te puede llegar a tira el PLC por superar el tiempo de watchdog.
Entonces ¿qué podemos hacer?
Bueno, en estos casos, no te quedará más remedio, que dividir el trabajo que tiene que realizar.
No hay más.
Ahora bien ¿cómo?
Pues haciendo que el lazo no sea cerrado, es decir, el loop no se ejecute en un único ciclo de scan, sino en varios.
Puede ser que si tienes que hacer 100 iteraciones, pues hacerlas de 10 en cada ciclo del OB1 (10 en total) o si no tienes prisa porque se ejecute, hacerlo en 100 ciclos consecutivos.
El vídeo recorrer un array en lazo cerrado vs lazo abierto
Como siempre, es más fácil ver las diferencias y explicarlo con un vídeo, así que.. let’s go!
¿Qué te ha parecido?
Como ves, hay mucha diferencia entre ejecutar un loop de muchas iteraciones frente a hacer una iteración por ciclo de scan.
Evidentemente dependerá del tiempo disponible para ejecutar las tareas, del número de iteraciones etc, para agrupar las iteraciones o poder hacer una iteración por ciclo.
Este ejemplo lo dejaré en Guorker.com en la sección de ejercicios resueltos, y en el bloque 4 del curso de TIA Portal dedicado a SCL.
¡¡Espero tus comentarios!!
Enseño a programar PLC de Siemens a través de mis cursos.
Más información sobre mi aquí
Puedes seguirme en cualquiera de las siguientes redes sociales.
4 Comentarios
Cual seria el código de bajo nivel de un plc s7-1200?, comprendo que no es editable por el usuario, pero supongo que lo debe tener.
Pues en los 1200 todo está compilado por lo que no sé cual será el más eficiente. Supongo que en este caso igual entra lo bien que esté programado más que el lenguaje en sí.
¡Brutal! Muchas gracias.
Gracias! Me alegra que te haya servido!