<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programacion archivos - Brandon Engineer</title>
	<atom:link href="https://brandon-engineer.com/en/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>https://brandon-engineer.com/en/category/programacion/</link>
	<description>Blog para compartir sobre programación y tecnología industrial</description>
	<lastbuilddate>Wed, 20 Mar 2024 22:02:39 +0000</lastbuilddate>
	<language>en-US</language>
	<sy:updateperiod>
	hourly	</sy:updateperiod>
	<sy:updatefrequency>
	1	</sy:updatefrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://brandon-engineer.com/wp-content/uploads/2024/03/favicon.ico</url>
	<title>Programacion archivos - Brandon Engineer</title>
	<link>https://brandon-engineer.com/en/category/programacion/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Como optimizar tu código en SCL</title>
		<link>https://brandon-engineer.com/en/como-optimizar-tu-codigo-en-scl/</link>
					<comments>https://brandon-engineer.com/en/como-optimizar-tu-codigo-en-scl/#respond</comments>
		
		<dc:creator><![CDATA[Brandon]]></dc:creator>
		<pubdate>Wed, 20 Mar 2024 21:49:59 +0000</pubdate>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid ispermalink="false">https://brandon-engineer.com/?p=3518</guid>

					<description><![CDATA[<p>Introducción Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rondándome la cabeza: &#8220;¿Es más optimo usar una máquina de estados que un sistema tradicional?&#8221; Mi suposición es que al usar una máquina de estados esta saltará el código que no se usa y permitirá ignorar el código que...</p>
<p>La entrada <a href="https://brandon-engineer.com/en/como-optimizar-tu-codigo-en-scl/">Como optimizar tu código en SCL</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading" id="h-introduccion">Introduction</h2>



<p>Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rondándome la cabeza: &#8220;¿Es más optimo usar una máquina de estados que un sistema tradicional?&#8221; Mi suposición es que al usar una máquina de estados esta saltará el código que no se usa y permitirá ignorar el código que no se utilizará por lo que podrías optimizarlo para no tener a tu maquina ahogándose.</p>



<h2 class="wp-block-heading" id="h-como-se-ha-realizado">¿Cómo se ha realizado?</h2>



<p>Para esta prueba decidí ejecutarla en el entorno de Twincat de <a href="http://beckhoff.com">Beckhoff Automation</a>, 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 300 FB por cada una de las tareas con un tiempo de ejecución de 0.5ms y comparé los rendimientos.</p>



<h2 class="wp-block-heading" id="h-llamada-de-las-tareas">Llamada de las tareas</h2>



<p>Para hacer una carga grande de recursos se ha llamado a 300 FB para que sea apreciable los consumos</p>



<pre class="wp-block-code"><code>bSwitching(bStart=>bStart);

FOR counter:=1 TO 299 BY 1 DO

    fb&#91;counter](bInputDown:=bStart);

END_FOR;</code></pre>



<p>&#8220;bStart&#8221; es un booleano que cambia de true a false cada segundo</p>



<h2 class="wp-block-heading" id="h-con-estados">Con estados</h2>



<p>El código para la function block </p>



<pre class="wp-block-code"><code>FUNCTION_BLOCK FB_WaitandWriteState
VAR_INPUT
	bInputUp : BOOL; // Entrada para subir
    bInputDown : BOOL; // Entrada para bajar
END_VAR
VAR_OUTPUT
	bOutputUp : BOOL := FALSE; // Salida para subir
    bOutputDown : BOOL := FALSE; // Salida para bajar
END_VAR
VAR
    Temporizador : TON := (PT:= T#60S); // Temporizador de 60 segundos
    TemporizadorEspera : TON := (PT:= T#1S); // Temporizador de espera de 1 segundo
    EstadoMaquinaActual : INT:=0;
END_VAR
	</code></pre>



<p>El código usado para el programa ha sido:</p>



<pre class="wp-block-code"><code>CASE EstadoMaquinaActual OF
    // Estado inicial, esperando la entrada
    0:
        IF bInputUp THEN
            EstadoMaquinaActual := 10; // Cambiar al estado de subir
        ELSIF bInputDown THEN
            EstadoMaquinaActual := 20; // Cambiar al estado de bajar
        END_IF
    // Estado de subir
    10:
        bOutputUp := TRUE; // Activar la salida de subir
        Temporizador(IN:= TRUE); // Iniciar temporizador de 60 segundos
        IF Temporizador.Q THEN
            EstadoMaquinaActual := 30; // Cambiar al estado de espera
        END_IF
    // Estado de bajar
    20:
        bOutputDown := TRUE; // Activar la salida de bajar
        Temporizador(IN:= TRUE); // Iniciar temporizador de 60 segundos
        IF Temporizador.Q THEN
            EstadoMaquinaActual := 30; // Cambiar al estado de espera
        END_IF
    // Estado de espera
    30:
	TemporizadorEspera(IN:= TRUE);
        IF TemporizadorEspera.Q THEN
            // Reiniciar salidas y temporizadores
            bOutputUp := FALSE;
            bOutputDown := FALSE;
            Temporizador(IN:= FALSE);
            TemporizadorEspera(IN:= FALSE);
            // Volver al estado inicial
            EstadoMaquinaActual := 0;
        END_IF
END_CASE</code></pre>



<h2 class="wp-block-heading" id="h-sin-estados">Sin estados</h2>



<p>Este es el código de la tarea:</p>



<pre class="wp-block-code"><code>FUNCTION_BLOCK FB_Wait_andWrite_NON_State
VAR_INPUT
	bInputUp : BOOL; // Entrada para subir
    bInputDown : BOOL; // Entrada para bajar
END_VAR
VAR_OUTPUT
	bOutputUp : BOOL := FALSE; // Salida para subir
    bOutputDown : BOOL := FALSE; // Salida para bajar
END_VAR
VAR
    Temporizador : TOF := (PT:= T#60S); // Temporizador de 60 segundos
    TemporizadorEspera : TON := (PT:= T#1s); // Temporizador de espera de 1 segundo
	
	bBajando: BOOL;
	bSubiendo: BOOL;
END_VAR</code></pre>



<p>El código para la function block</p>



<pre class="wp-block-code"><code>Temporizador(IN:= bSubiendo OR bBajando); // Iniciar temporizador si se está subiendo o bajando

bSubiendo := bInputUp AND NOT bSubiendo; // Marcar subida si no estaba subiendo antes
bBajando := bInputDown AND NOT bBajando; // Marcar bajada si no estaba bajando antes

bOutputUp := bSubiendo AND NOT Temporizador.Q; // Activar salida de subir mientras no se exceda el temporizador
bOutputDown := bBajando AND NOT Temporizador.Q; // Activar salida de bajar mientras no se exceda el temporizador

IF Temporizador.Q THEN
    bSubiendo := FALSE; // Reiniciar flag de subir
    bBajando := FALSE; // Reiniciar flag de bajar
    TemporizadorEspera(IN:= TRUE); // Iniciar temporizador de espera de 1 segundo
END_IF

TemporizadorEspera(IN:= TemporizadorEspera.Q); // Reiniciar temporizador de espera si se completó</code></pre>



<h2 class="wp-block-heading" id="h-conclusion">Conclusión</h2>



<p>Como supuse es un aumento de rendimiento considerable (el software sin máquina de estados consume 3 veces más). Adjunto las fotos de los FB, el programa y las gráficas de los rendimientos.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1">
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="800" height="500" data-id="3523" src="https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-min-edited.jpg" alt="" class="wp-image-3523" srcset="https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-min-edited.jpg 800w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-min-edited-300x188.jpg 300w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-min-edited-768x480.jpg 768w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-min-edited-600x375.jpg 600w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</figure>



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



<p>Yo la verdad es que me ha sorprendido los resultados, no me esperaba tanto y menos para una aplicación tan sencilla, son unos temporizadores y unos IF</p>



<p>Espero sus comentarios, chicos.</p><p>La entrada <a href="https://brandon-engineer.com/en/como-optimizar-tu-codigo-en-scl/">Como optimizar tu código en SCL</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></content:encoded>
					
					<wfw:commentrss>https://brandon-engineer.com/en/como-optimizar-tu-codigo-en-scl/feed/</wfw:commentrss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SCL VS KOP ¿Cuál tiene mayor rendimiento?</title>
		<link>https://brandon-engineer.com/en/scl-vs-kop-cual-tiene-mayor-rendimiento/</link>
					<comments>https://brandon-engineer.com/en/scl-vs-kop-cual-tiene-mayor-rendimiento/#respond</comments>
		
		<dc:creator><![CDATA[Brandon]]></dc:creator>
		<pubdate>Tue, 19 Mar 2024 21:30:22 +0000</pubdate>
				<category><![CDATA[Programacion]]></category>
		<guid ispermalink="false">https://brandon-engineer.com/?p=3500</guid>

					<description><![CDATA[<p>Introducción Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rondándome la cabeza: &#8220;¿El mismo código tiene mejor rendimiento en KOP o en SCL?&#8221; 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...</p>
<p>La entrada <a href="https://brandon-engineer.com/en/scl-vs-kop-cual-tiene-mayor-rendimiento/">SCL VS KOP ¿Cuál tiene mayor rendimiento?</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading" id="h-introduccion">Introduction</h2>



<p>Esta tarde estaba aburrido en casa y puse a prueba una idea que lleva tiempo rondándome la cabeza: &#8220;¿El mismo código tiene mejor rendimiento en KOP o en SCL?&#8221; 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, &#8220;los imagino, los espero y supongo son un cuchillo envenenado&#8221;, 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.</p>



<h2 class="wp-block-heading" id="h-como-se-ha-realizado">¿Cómo se ha realizado?</h2>



<p>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.</p>



<h2 class="wp-block-heading" id="h-scl">SCL</h2>



<p>El código para la function block </p>



<pre class="wp-block-code"><code>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);
	</code></pre>



<p>El código usado para el programa ha sido:</p>



<pre class="wp-block-code"><code>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();</code></pre>



<h2 class="wp-block-heading" id="h-kop">KOP</h2>



<p>Este es el código de la tarea:</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="1024" src="https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-1024x1024.jpg" alt="" class="wp-image-3503" srcset="https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-1024x1024.jpg 1024w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-300x300.jpg 300w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-150x150.jpg 150w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-768x768.jpg 768w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-80x80.jpg 80w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-140x140.jpg 140w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-600x600.jpg 600w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-100x100.jpg 100w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP-460x460.jpg 460w, https://brandon-engineer.com/wp-content/uploads/2024/03/FB_KOP.jpg 1080w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>El código para la function block</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="1024" src="https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-1024x1024.jpg" alt="" class="wp-image-3502" srcset="https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-1024x1024.jpg 1024w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-300x300.jpg 300w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-150x150.jpg 150w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-768x768.jpg 768w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-80x80.jpg 80w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-140x140.jpg 140w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-600x600.jpg 600w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-100x100.jpg 100w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP-460x460.jpg 460w, https://brandon-engineer.com/wp-content/uploads/2024/03/TAREA_KOP.jpg 1080w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="h-conclusion">Conclusión</h2>



<p>Y para sorpresa de nadie, funcionan exactamente igual en rendimiento. </p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" data-id="3505" src="https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-1024x1024.jpg" alt="" class="wp-image-3505" srcset="https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-1024x1024.jpg 1024w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-300x300.jpg 300w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-150x150.jpg 150w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-768x768.jpg 768w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-80x80.jpg 80w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-140x140.jpg 140w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-600x600.jpg 600w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-100x100.jpg 100w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO-460x460.jpg 460w, https://brandon-engineer.com/wp-content/uploads/2024/03/RENDIMIENTO.jpg 1080w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p>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.</p>



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



<p>Espero sus comentarios, chicos.</p><p>La entrada <a href="https://brandon-engineer.com/en/scl-vs-kop-cual-tiene-mayor-rendimiento/">SCL VS KOP ¿Cuál tiene mayor rendimiento?</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></content:encoded>
					
					<wfw:commentrss>https://brandon-engineer.com/en/scl-vs-kop-cual-tiene-mayor-rendimiento/feed/</wfw:commentrss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Crear interlocks de temporizador</title>
		<link>https://brandon-engineer.com/en/crear-interlocks/</link>
					<comments>https://brandon-engineer.com/en/crear-interlocks/#respond</comments>
		
		<dc:creator><![CDATA[Brandon]]></dc:creator>
		<pubdate>Wed, 13 Mar 2024 21:22:24 +0000</pubdate>
				<category><![CDATA[Programacion]]></category>
		<guid ispermalink="false">https://brandon-engineer.com/?p=3376</guid>

					<description><![CDATA[<p>Introducción Hoy trabajando un compañero de trabajo me enseño una forma de crear interlocks para evitar que se activen 2 salidas al mismo tiempo. El problema que estábamos viendo era activar un motor que tiene 2 sentidos de giro y a demás de la parada queríamos dar un pequeño retardo de activación hasta encender el...</p>
<p>La entrada <a href="https://brandon-engineer.com/en/crear-interlocks/">Crear interlocks de temporizador</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading" id="h-introduccion">Introduction</h2>



<p>Hoy trabajando un compañero de trabajo me enseño una forma de crear interlocks para evitar que se activen 2 salidas al mismo tiempo. </p>



<p>El problema que estábamos viendo era activar un motor que tiene 2 sentidos de giro y a demás de la parada queríamos dar un pequeño retardo de activación hasta encender el motor en sentido contrario.</p>



<h2 class="wp-block-heading" id="h-para-que-sirve-los-interlocks">¿Para que sirve los interlocks?</h2>



<p>Los interlocks nos permiten hacer una activación segura tanto para las maquinas como para las personas asegurándonos que no haya ningún disgusto ni económico ni humanitario</p>



<h2 class="wp-block-heading" id="h-como-crear-los-interlocks">¿Cómo crear los interlocks?</h2>



<p>Para empezar quería agradecer a Jose Juan esta enseñanza y querría compartir con vosotros 2 formas de hacerlo, por un lado la de Jose Juan programado con KOP y la mía hecha con una maquina de estados en SCL.</p>



<p>La verdad es que me ha parecido muy intuitiva la forma de programarlo mi compañero y que queda muy elegante</p>



<h3 class="wp-block-heading" id="h-kop">KOP</h3>



<p>Para empezar aprovecharemos el uso de la evaluación de flancos descendentes y activaremos un retardo de activación</p>



<h3 class="wp-block-heading" id="h-scl">SCL</h3>



<p>Yo para hacerlo en SCL aunque puedo hacerlo como en KOP yo optaba por un funcionamiento con una maquina de estados, no tengo tanta experiencia como mi compañero Jose Juan y decidí hacer una maquina de estados muy sencillita que permite un entendimiento relativamente intuitivo</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="437" src="https://brandon-engineer.com/wp-content/uploads/2024/03/Maquina-de-estados-interlock-e1710369562108.jpg" alt="" class="wp-image-3383" srcset="https://brandon-engineer.com/wp-content/uploads/2024/03/Maquina-de-estados-interlock-e1710369562108.jpg 800w, https://brandon-engineer.com/wp-content/uploads/2024/03/Maquina-de-estados-interlock-e1710369562108-300x164.jpg 300w, https://brandon-engineer.com/wp-content/uploads/2024/03/Maquina-de-estados-interlock-e1710369562108-768x420.jpg 768w, https://brandon-engineer.com/wp-content/uploads/2024/03/Maquina-de-estados-interlock-e1710369562108-600x328.jpg 600w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="has-text-align-center"><em>1.Diagrama máquina de estados</em></p>



<p>Para la ejecución he usado este codigo</p>



<pre class="wp-block-code"><code>&lt;Declaration>
FUNCTION_BLOCK Interlocks
VAR_INPUT
	bStartFirst: BOOL;
	bStartSecond: BOOL;
END_VAR
VAR_OUTPUT
	bFirstActivation: BOOL;
	bSecondActivation: BOOL;
END_VAR
VAR
	state: INT;
	TON: Tc2_Standard.TON;

	IDDLE: INT := 0;
	FIRST: INT := 10;
	SECOND: INT := 20;
	WAITING: INT := 30;
END_VAR
&lt;/Declaration>
&lt;Implementation>
CASE state OF
	
	IDDLE:		//IDLE STATE WAITING FOR OPERATION
	
	IF bStartFirst THEN
		state:=FIRST;
		
	END_IF;
	IF bStartSecond THEN
		state:=SECOND;

	END_IF;
	
	FIRST:		//ACTIVATION OF FIRST OUTPUT
	
	bSecondActivation:=FALSE; //SECURE DISABLE OUTPUT	
	IF bStartFirst THEN
		bFirstActivation:=TRUE;
	ELSE
		state:=30;
	END_IF;
	
	SECOND:		//ACTIVATION OF SECOND OUTPUT
	
	bFirstActivation:=FALSE; //SECURE DISABLE OUTPUT
	IF bStartSecond THEN
		bSecondActivation:=TRUE;
	ELSE
		state:=WAITING;
	END_IF;	
	
	WAITING:		// WAITING FOR SECURITY
	
	TON(IN:=TRUE,PT:=T#1S,Q=>,ET=>);
	IF TON.Q THEN
		TON(IN:=FALSE);
		state:=IDDLE;
	END_IF
	
	
END_CASE;
&lt;/Implementation></code></pre><p>La entrada <a href="https://brandon-engineer.com/en/crear-interlocks/">Crear interlocks de temporizador</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></content:encoded>
					
					<wfw:commentrss>https://brandon-engineer.com/en/crear-interlocks/feed/</wfw:commentrss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>