User: alciro    User
 

microPLC para arduino

Share |
 Descargas microPLC

2.2. Control de un motor marcha paro con enclavamiento

Esquema básico de un control marcha paro de un motor

La figura anterior muestra el esquema eléctrico de un control básico de un motor con enclavamiento, el pulsador S1 corresponde al paro y el S2 al pulsador de marcha, el relé es el K1 con el contacto auxiliar en paralelo en el botón de marcha realiza el enclavamiento, los contactos de potencia de K1 se utilizan para el motor.

En la siguiente figura se muestra el diagrama Ladder para el control marcha-paro del motor, la traducción del esquema eléctrico al diagrama funcional del autómata es prácticamente directo. El botón de paro S1 está representado por la entrada .01 del PLC, el botón de marcha corresponde  a la entrada .02 y la salida que activará al relé K1 es la 10.01.

Diagrama ladder para un autómata del circuito de control
Esquema de conexión al PLC

Operadores de tratamiento de bits en C++

El objetivo es desarrollar el programa que ejecuta un autómata (PLC) en C++ de la forma más sencilla posible. Para poder resolver el diagrama Ladder podemos utilizar los operadores de tratamiento de bits según muestra la siguiente tabla:

Operador Descripción
~Complemento a uno  -|/|-
<<Desplazamiento a izquierda
>>Desplazamiento a derecha
&AND, producto de bits -||-||- 
^XOR (OR exclusivo) compara dos bits
|OR,  suma de bits

   -||-
   -||- 

Variables de trabajo

En nuestro programa crearemos variables de trabajo de tipo bit que representen las entradas y las salidas. En el ejemplo se ha escogido s1, s2,.. para determinar las entradas y k1, k2,.. para las salidas, no hay ningún criterio establecido para determinar el nombre de las variables. Para un mejor entendimiento y facilidad de trabajo lo mejor es hacer coincidir los nombres y numeración de las variables con las utilizadas en el esquema eléctrico o PLC.

 

//Definición de las variables de trabajo
 boolean s1, s2, s3, s4;  // Entradas
 boolean k1, k2, k3, k4;  // Salidas

 

Conversión Ladder a sentencia de C++

Si nos fijamos en el diagrama Ladder el valor de k1 será 1 cuando s1 esté activa y al mismo tiempo s2 o k1 (enclavamiento), traduciendo;

K1\ =\  s1&(s2|k1);

Y esto es todo, aplicando el algebra de boole dentro del ciclo de escaneo de las entradas y salidas conseguimos transformar nuestro microprocesador programable en C en un micro PCL.

Control básico marcha paro con enclavamiento

 

/*
*  Control Paro Marcha para un motor con el microPLC - arduino
*  
*  Descripción: Programa básico para el control de un motor con pulsadores de paro y marcha
*
*  Autor: Rafa Aranda
*  Fecha: 31-02-2014
*  Versión: 1.0
*/

// Asignación de Pins a Salidas digitales
#define Out_1 6 
#define Out_2 7 
#define Out_3 8 
#define Out_4 9 

// Pins de entrada (están ordenados de forma decreciente por necesidades del PCB)
#define In_1 5 
#define In_2 4 
#define In_3 3 
#define In_4 2

// Librerías 

// Funciones prototipo 
void getInputs(void);
void setOutputs(void);

//  Variables globales

//Definición de las variables de trabajo
 boolean s1, s2, s3, s4;  // Entradas
 boolean k1, k2, k3, k4;  // Salidas

/*  setup
*  Tareas iniciales de preparación
*/
void setup(){
  
  // Establecer los pins de salida de los relés
  pinMode(Out_1, OUTPUT);
  pinMode(Out_2, OUTPUT);
  pinMode(Out_3, OUTPUT);
  pinMode(Out_4, OUTPUT);
  
  // Establecer los pins de entradas digitales optoacopladas
  pinMode(In_1, INPUT);
  pinMode(In_2, INPUT);
  pinMode(In_3, INPUT);
  pinMode(In_4, INPUT);
	 
  // Preparar las variables

}

/*  loop
*  Programa principal
*/
void loop() {
  getInputs();    // Leer las entradas digitales
  k1=(k1|s2)&s1;  // Algoritmo del relé 1
  setOutputs();   // Activar las salidas
  delay(100);     // CicloScan, tiempo para el ciclo de escaneado
}

/*  GetInputs
*  Lee el estado de la entrada indicada en el parámetro y lo asigna invertido a las variables de trabajo	
*/
void getInputs(void){
  s1=!digitalRead(In_1);
  s2=!digitalRead(In_2);
  s3=!digitalRead(In_3);
  s4=!digitalRead(In_4);
}

/*  setOutputs
*  asigna el estado de las varibles de trabajo a las salidas digitales	
*/
void setOutputs(void){
  digitalWrite(Out_1, k1);
  digitalWrite(Out_2, k2);
  digitalWrite(Out_3, k3);
  digitalWrite(Out_4, k4);
}

 

Loading

copyright © 2007-2024  www.alciro.org  All rights reserved.         
Share |