Brandon Engineer

Shopping cart

Subtotal 0,00 

View cartCheckout

SCL VS KOP ¿Cuál tiene mayor rendimiento?

blank

Introducción

Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rondándome la cabeza: «¿El mismo código tiene mejor rendimiento en KOP o en SCL?» Al final, KOP tiene equivalente en todas sus funciones en SCL y quería poner a prueba si las funciones consumen los mismos recursos en SCL que en KOP. Yo, la verdad, es que imaginaba que eran iguales, pero como dice un compañero de trabajo a quien aprecio mucho, «los imagino, los espero y supongo son un cuchillo envenenado», así que me arremangué las mangas de la camiseta y decidí hacer un pequeño temporizador tonto que no hace nada, pero la idea es que active una salida continuamente cada 1 segundo y comprobar si consume recursos.

¿Cómo se ha realizado?

Para esta prueba decidí ejecutarla en el entorno de Twincat de Beckhoff Automation, que me da control del conocimiento de cada núcleo y compararlo en el mismo instante de tiempo. Preparé los FB, al final llamé a 21 FB por cada una de las tareas con un tiempo de ejecución de 0.05ms y comparé los rendimientos.

SCL

El código para la function block

FUNCTION_BLOCK FB_WaitAndWriteSCL
VAR_INPUT
END_VAR
VAR_OUTPUT
	bStart: BOOL;
END_VAR
VAR

	temp1: TOF;
	temp2: TON;
END_VAR


	temp1(IN:= temp2.Q, PT:= T#1S,);
	
	temp2(IN:= NOT temp1.Q, PT:= T#1S,Q=>bStart);
	

El código usado para el programa ha sido:

PROGRAM MainSCL
VAR
	fbwait0 : FB_WaitAndWriteSCL;
	fbwait1 : FB_WaitAndWriteSCL;
	fbwait2 : FB_WaitAndWriteSCL;
	fbwait3 : FB_WaitAndWriteSCL;
	fbwait4 : FB_WaitAndWriteSCL;
	fbwait5 : FB_WaitAndWriteSCL;
	fbwait6 : FB_WaitAndWriteSCL;
	fbwait7 : FB_WaitAndWriteSCL;
	fbwait8 : FB_WaitAndWriteSCL;
	fbwait9 : FB_WaitAndWriteSCL;
	fbwait10 : FB_WaitAndWriteSCL;
	fbwait11 : FB_WaitAndWriteSCL;
	fbwait12 : FB_WaitAndWriteSCL;
	fbwait13 : FB_WaitAndWriteSCL;
	fbwait14 : FB_WaitAndWriteSCL;
	fbwait15 : FB_WaitAndWriteSCL;
	fbwait16 : FB_WaitAndWriteSCL;
	fbwait17 : FB_WaitAndWriteSCL;
	fbwait18 : FB_WaitAndWriteSCL;
	fbwait19 : FB_WaitAndWriteSCL;
	fbwait20 : FB_WaitAndWriteSCL;
	bStart: BOOL;
END_VAR


	fbwait0();
	fbwait1();
	fbwait2();
	fbwait3();
	fbwait4();
	fbwait5();
	fbwait6();
	fbwait7();
	fbwait8();
	fbwait9();
	fbwait10();
	fbwait11();
	fbwait12();
	fbwait13();
	fbwait14();
	fbwait15();
	fbwait16();
	fbwait17();
	fbwait18();
	fbwait19();
	fbwait20();

KOP

Este es el código de la tarea:

blank

El código para la function block

blank

Conclusión

Y para sorpresa de nadie, funcionan exactamente igual en rendimiento.

Por otro lado, esta es una prueba. Pronto haré lo mismo para poner a prueba una FB hecha con una máquina de estados contra un software que se ejecute todas las líneas y comprobaré los resultados de los rendimientos. Aquí sí que espero una mejora de rendimiento, ya que al saltarse una gran parte del código, podré obtener rendimientos mucho más altos.

¿Y ustedes? ¿Lo sabían ya? ¿Se imaginaban el resultado como yo?¿Creéis que algo ha fallado en mi evaluación?

Espero sus comentarios, chicos.

Leave A Comment

Your email address will not be published. Required fields are marked *

en_USEnglish