Brandon Engineer

Shopping cart

Subtotal 0,00 

View cartCheckout

Crear interlocks de temporizador

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 motor en sentido contrario.

¿Para que sirve los interlocks?

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

¿Cómo crear los interlocks?

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.

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

KOP

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

SCL

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

blank

1.Diagrama máquina de estados

Para la ejecución he usado este codigo

<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
</Declaration>
<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;
</Implementation>

Leave A Comment

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

en_USEnglish