CIRCUITO ELECTRONEUMÁTICO 2 CILINDROS PROGRAMADO EN GRAFCET SOBRE Arduino

Page 1

CIRCUITO ELECTRONEUMÁTICO 2 CILINDROS PROGRAMADO EN GRAFCET SOBRE

Arduino

DISPOSITIVO PARA REMACHAR

Hola jóvenes, en estos enlaces del BLOGG y DEL CANAL, pueden encontrar recursos sobre fundamentos de ingeniería mecatrónica como : SOLIDWORKS, PROGRAMACIÓN DE ARDUINO, HIDRÁULICA – LENGUAJE LADDER , LENGUAJE GRAFCET ,ELECTROHIDRÁULICA , NEUMÁTICA, ELECTRONEUMÁTICA, PLC M221, PLC SIEMEMS S7 1200, PLC SIEMENS S7 300 , FLUID SIM, FACTORY IO, CONTROL, entre otros https://www.mecatrónica.com.co/ https://mecatronicaitsa.blogspot.com/ http://www.youtube.com/c/Jovanny Duque?sub_confirmation=1_ Si te ha sido útil, regálame un Like, comenta y suscríbete :) (っ◕‿◕)


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

DISPOSITIVO PARA REMACHAR ELECTRONEUMÁTICO (A+/B+/TEMP/B-/A-/A+/A-)

DIAGRAMA ESPACIO/FASE

ESPECIFICACIONES DEL CONTROL

1. El sistema de control debe permitir la selección entre Ciclo Único (CU), Ciclo Continuo (CC) o Ciclo X3. 2. El CC o CX3 deben quedar interrumpido (termina el ciclo actual y se detiene en posición inicial) por la acción de conmutar a CU (solicitud de parada a fin de Ciclo) o mediante el pulsador de Paro de Emergencia (PE) o cuando no hay más PIEZA (interruptor abierto).

Elaborado por Ing. Jovanny Duque

pág. 1


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ 3. El dispositivo se explora a través de un detector de PIEZA (interruptor cerrado), sin la presencia de PIEZA, no puede iniciar ningún ciclo. 4. Cuando se terminan las piezas en el depósito de gravedad y está en modo CC o Cx3, debe terminar el ciclo en el que está y al terminarlo, ha de pararse la instalación en su posición base (inicial). 5. Después de haber realizado los (3) tres ciclos del modo CX3 sólo puede iniciarse el funcionamiento en cualquier otro ciclo después de pulsar RESET. No debe haber ningún movimiento de a máquina al pulsar RESET, para iniciar cualquier ciclo deben usarse cualquiera de los pulsadores CU, CC o CX3. 6. Una vez accionado el pulsador de Paro de Emergencia, deben retornar inmediatamente todos los cilindros a la posición de partida, pero el sistema debe asegurar que el cilindro A regrese solo cuando el cilindro B lo haya hecho completamente. Debiendo quedar al final los dos cilindros retraídos en su posición inicial. Es decir primero verifica el retorno del cilindro B y después el retorno del cilindro A. 7. En el modo CC o en CX3 el sistema debe asegurar una temporización entre ciclos.

Elaborado por Ing. Jovanny Duque

pág. 2


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

SOLUCIÓN GRAFCET MODELADA EN FLUID SIM P

Elaborado por Ing. Jovanny Duque

pág. 3


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

Elaborado por Ing. Jovanny Duque

pág. 4


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

Fig. Conexion de entradas y salidas en la simulacion con Fluid simP

Elaborado por Ing. Jovanny Duque

pág. 5


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ Programación equivalente en IDE de Arduino //TRATAMIENTO PREVIO // ETAPAS GRAFCET PRINCIPAL int E1; int E2; int E3; int E4; int E5; int E6; int E7; int E8; int E9; int E15; int E16; int E19; int E21; int E24; // ETAPAS GRAFCET CICLO CONTINUO int E11; int E12; int E61; // ETAPAS GRAFCET CICLO X 3 int E13; int E14; int E81; // ETAPAS GRAFCET P EMERGENCIA int E17; int E18; int E120; int E121;

// DECLARACION DE LOS PINES DE ENTRADAS int PIEZA = 12; int PE = 13; int CU = 6; int CC = 7; int A_0 = 14; int A_1 = 15; int B_0 = 16; int B_1 = 18; int CX3 = 8; int R_ESET = 9;

Elaborado por Ing. Jovanny Duque

pág. 6


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ // DECLARACION DE LOS PINES DE LAS SALIDAS int Y1 = 23; int Y2 = 25; int Y3 = 27; // DECLARACION E INICIALIZACION DE LAS MEMORIAS int MCC = LOW; int MCX3 = LOW; int FIN_CX3 = LOW; int EMERG = LOW; // Variables asociadas a "temp1". int T1; int activado1 = 0; // Al principio no ha sido activado. long inicio1, final1, actual1; // Variables asociadas a "temp2". int T2; int activado2 = 0; // Al principio no ha sido activado. long inicio2, final2, actual2; // Variables asociadas a "temp3". int T3; int activado3 = 0; // Al principio no ha sido activado. long inicio3, final3, actual3;

// Variables asociadas a CONTADOR int CONTADOR = 0; // INICIALIZACIÒN DEL CONTADOR const int PSCONTADOR = 3; // PRESELEC DEL CONTADOR = # DE CICLOS int ESTADOPREVIO_E3 = 0; // Estado previo de la etapa que incrementa

el

contador

void setup() { Serial.begin(9600); //entradas// pinMode(PIEZA, INPUT); pinMode(PE, INPUT); pinMode(CU, INPUT); pinMode(CC, INPUT); pinMode(A_0, INPUT); pinMode(A_1, INPUT); pinMode(B_0, INPUT); pinMode(B_1, INPUT); pinMode(CX3, INPUT); pinMode(R_ESET, INPUT);

Elaborado por Ing. Jovanny Duque

pág. 7


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ //SALIDAS// pinMode(Y1, OUTPUT); pinMode(Y2, OUTPUT); pinMode(Y3, OUTPUT);

//ALGUNOS DISPOSITIVOS TRAEN UNA CONFIGURACION POR ESO ES NECESARIO COLOCAR LOS PUERTOS digitalWrite(Y1, LOW); digitalWrite(Y2, LOW); digitalWrite(Y3, LOW);

EN 0V

// ETAPAS DEL GRAFCET PRINCIPAL (ESTADO INICIAL) E1 = HIGH; E2 = LOW; E3 = LOW; E4 = LOW; E5 = LOW; E6 = HIGH; E7 = LOW; E8 = LOW; E9 = LOW; E15 = LOW; E16 = LOW; E19 = LOW; E21 = LOW; E24 = LOW; // ETAPAS DEL GRAFCET C CONTINUO (ESTADO INICIAL) E11 = HIGH; E12 = LOW; E61 = LOW; // ETAPAS DEL GRAFCET CCICLO X3 E13 = HIGH; E14 = LOW; E81 = LOW; // ETAPAS GRAFCET PE E17 = HIGH; E18 = LOW; E120 = LOW; E121 = LOW; } //TRATAMIENTO SECUENCIAL void loop ( )

{

Elaborado por Ing. Jovanny Duque

pág. 8


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ CU = digitalRead(6); CC = digitalRead(7); CX3 = digitalRead(8); R_ESET = digitalRead(9); PIEZA = digitalRead(12); PE = digitalRead(13); A_0 = digitalRead(14); A_1 = digitalRead(15); B_0 = digitalRead(16); B_1 = digitalRead(18);

// ECUACIONES GRAFCET PRINCIPAL E1 = ((E1 | (E21 & E21) | (E3 & ~PE) | (E4 & ~PE) | (E5 & ~PE) | (E6 & ~PE) | (E7 & ~PE) | (E8 & ~PE) | (E9 & ((~MCC) & (~MCX3))) | (E15 & ~PE)|(E16 & ~PE) | (E24 & E24) ) & (~E2)); E2 = ((E2 | (E15 & T2) | (E16 & T3) | (E1 & PIEZA & A_0 & B_0 & (CU | CC | CX3) & (~EMERG))) & (~E3) & (~E21)); E21 = (((E21 | (E2 & ~PE))) & (~E1)); E3 = ((E3 | (E2 & A_1)) & (~E4) & (~E1)); E4 = ((E4 | (E3 & B_1)) & (~E5) & (~E1)); E5 = ((E5 | (E4 & T1)) & (~E6) & (~E1) ); E6 = ((E6 | (E5 & B_0)) & (~E7) & (~E1) ); E7 = ((E7 | (E6 & A_0)) & (~E8) & (~E1)); E8 = ((E8 | (E7 & A_1)) & (~E9) & (~E1)); E9 = ((E9 | (E8 & A_0)) & (~E1) & (~E15) & (~E16) & (~E19)); E15 = ((E15 | (E9 & MCC & (~MCX3))) & (~E1) & (~E2)); E16 = ((E16 | (E9 & MCX3 & (~MCC) & (CONTADOR < PSCONTADOR))) & (~E1) & (~E2)); E19 = ((E19 | (E9 & MCX3 & (~MCC) & (CONTADOR >= PSCONTADOR))) & (~E24)); E24 = (((E24 | E19 & (~PE | R_ESET ))) & (~E1) ) // ECUACIONES E11 = ((E11 | E12 = ((E12 | E61 = ((E61 |

;

GRAFCET C CONTINUO (E61 & E61) ) & (~E12)); (E11 & CC & (~MCX3) & (~FIN_CX3) & (~EMERG))) & (~E61)); (E12 & (CU | (~PIEZA) | (~PE)))) & (~E11));

// ECUACIONES GRAFCET CX3 E13 = ((E13 | (E81 & E81)) & (~E14)); E14 = ((E14 | (E13 & CX3 & (~MCC) & (~FIN_CX3) & (~EMERG))) & (~E81)); Elaborado por Ing. Jovanny Duque

pág. 9


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ E81 = ((E81 | (E14 & (CU | (~PE) | (~PIEZA) | FIN_CX3))) & (~E13)); // ECUACIONES GRAFCET P EMERGENCIA E17 = ((E17 | (E121 & PE)) & (~E18)); E18 = ((E18 | (E17 & (~PE))) & (~E120)); E120 = ((E120 | (E18 & B_0)) & (~E121)); E121 = ((E121 | (E120 & A_0 & B_0)) & (~E17)); //TRATAMIENTO POSTERIOR // ACCIONES GRAFCET PRINCIPAL if (E1 == HIGH) { Serial.println("Etapa 1"); CONTADOR = 0; Serial.print("VALOR DEL CONTADOR : Serial.println(CONTADOR); } if (E2 == HIGH) {digitalWrite(Y1, HIGH);

");

Serial.println("Etapa2");

}

if (E3 == HIGH) {digitalWrite(Y1, LOW);digitalWrite(Y3, HIGH); Serial.println("Etapa3 "); }

if ((E3 & MCX3) != ESTADOPREVIO_E3) {if (E3 == HIGH) { CONTADOR++; Serial.print("CONTADOR CONTADOR Serial.println(CONTADOR); } ESTADOPREVIO_E3 = E3; }

CONTADOR :

");

if (E4 == HIGH) {Serial.println("Etapa4"); activetemp1(); } else { desactivetemp1(); } if (E5 == HIGH) { digitalWrite(Y3, LOW); Serial.println("Etapa5"); } if (E6 == HIGH) { Serial.println("Etapa6"); digitalWrite(Y2, HIGH); } if (E7 == HIGH) { digitalWrite(Y2, LOW); digitalWrite(Y1, HIGH); Serial.println("Etapa7"); } Elaborado por Ing. Jovanny Duque

pág. 10


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

if (E8 == HIGH) { Serial.println("Etapa 8"); digitalWrite(Y1,LOW); digitalWrite(Y2, HIGH); } if (E9 == HIGH) { Serial.println("Etapa 9"); digitalWrite(Y2, LOW); }

if (E15 == HIGH) { Serial.println("Etapa15"); activetemp2(); } else { desactivetemp2(); } if (E16 == HIGH) { Serial.println("Etapa16"); activetemp3(); } else { desactivetemp3(); } if (E19 == HIGH) { Serial.println("Etapa19"); FIN_CX3 = HIGH; } else { FIN_CX3 = LOW; } if (E24 == HIGH) {CONTADOR = 0; Serial.println("Etapa 24 "); }

// ACCIONES GRAFCET CC if (E11 == HIGH) {Serial.println("Etapa 11");} if (E12 == HIGH) {Serial.println("Etapa12 Etapa12 MCC = HIGH; } else { MCC = LOW; }

Etapa12");

if (E61 == HIGH) {Serial.println("Etapa61-61-Etapa61-61");} // ACCIONES GRAFCET CX3 if (E13 == HIGH) {Serial.println("Etapa 13");} if (E14 == HIGH) {MCX3 = HIGH; Serial.println("Etapa14 MCX3");} else {MCX3 = LOW; } if (E81 == HIGH) {Serial.println("Etapa81 Etapa81"); } // ACCIONES GRAFCET PE if (E17 == HIGH) {Serial.println("Etapa 17"); } Elaborado por Ing. Jovanny Duque

pág. 11


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ if (E18 == HIGH) { Serial.println("Etapa18" );digitalWrite(Y3, LOW); EMERG = HIGH; Serial.println("Etapa18 EMERG");} else {EMERG = LOW;} if (E120 == HIGH) { Serial.println("Etapa120 EMERG Etapa120 EMERG" ); digitalWrite(Y1, LOW); digitalWrite(Y2, HIGH); EMERG = HIGH; else {EMERG = LOW;} if (E121 == HIGH) { Serial.println("Etapa121 digitalWrite(Y2, LOW);EMERG = HIGH; } else {EMERG = LOW;} //

ACTIVACION

DE LUCES

CON LAS

EMERG

BOBINAS DE LAS

"

}

);

ELECTROVÁLVULAS

if ((E2 ==HIGH)|(E7 ==HIGH)) {digitalWrite(29, HIGH);} else {digitalWrite(29, LOW); } if ((E6 ==HIGH)|(E8 ==HIGH) |(E120 ==HIGH)) {digitalWrite(31, HIGH);} else {digitalWrite(31, LOW);} if (E3 ==HIGH ) {digitalWrite(33, HIGH); else {digitalWrite(33, LOW);}

}

} //SUBRUTINA TEMPORIZADOR 1 void activetemp1() { if (E4 == HIGH && activado1 == 0) { activado1 = 1; inicio1 = millis(); final1 = inicio1 + 1000; } actual1 = millis();

// Si ha pulsado HIGH y no ha sido activado=0 antes... // marca activado=1 y guarda el tiempo de inicio. // Tiempo final es inicio más 8 segundos.

// Consulta el tiempo actual.

if (activado1 == 1 && (actual1 > final1) ) { que el final.... T1 = HIGH; }

// Si fue activado=1 y el tiempo actual es mayor

else {T1 = LOW;} }

Elaborado por Ing. Jovanny Duque

pág. 12


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ void desactivetemp1() { T1 = LOW; activado1 = 0;// haz un parpadeo. inicio1 = 0; final1 = 0; actual1 = 0; } //SUBRUTINA TEMPORIZADOR 2 void activetemp2() { if (E15 == HIGH && activado2 == 0) { activado2 = 1; inicio2 = millis(); final2 = inicio2 + 1000; } actual2 = millis();

// Si ha pulsado HIGH y no ha sido activado=0 antes... // marca activado=1 y guarda el tiempo de inicio. // Tiempo final es inicio más 8 segundos.

// Consulta el tiempo actual.

if (activado2 == 1 && (actual2 > final2) ) { que el final.... T2 = HIGH; }

// Si fue activado=1 y el tiempo actual es mayor

else {T2 = LOW;} }

void desactivetemp2() { T2 = LOW; activado2 = 0;// haz un parpadeo. inicio2 = 0; final2 = 0; actual2 = 0; } //SUBRUTINA TEMPORIZADOR 3 void activetemp3() { if (E16 == HIGH && activado3 == 0) { activado3 = 1; inicio3 = millis(); final3 = inicio3 + 1000; } Elaborado por Ing. Jovanny Duque

// Si ha pulsado HIGH y no ha sido activado=0 antes... // marca activado=1 y guarda el tiempo de inicio. // Tiempo final es inicio más 8 segundos.

pág. 13


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ actual3 = millis();

// Consulta el tiempo actual.

if (activado3 == 1 && (actual3 > final3) ) { que el final.... T3 = HIGH; }

// Si fue activado=1 y el tiempo actual es mayor

else {T3 = LOW;} } void desactivetemp3() { T3 = LOW; activado3 = 0;// haz un parpadeo. inicio3 = 0; final3 = 0; actual3 = 0; } -------------------------------------------------------------------------------------------------------------------------------------------------

Jovenes, este material ha sido elaborado con mucho gusto. Si te es util Rega lame un Like, comenta y suscríbete :) (っ◕‿◕) Te invito al CANAL DE YOUTUBE MEKATRONICA para conocer ma s

http://www.youtube.com/c/JovannyDuque?sub _confirmation=1_ __________________________________ y Amigos/as en el BLOGG MEKATRONICA podras encontrar cantidad de recursos sobre SOLIDWORKS, HIDRAULICA - ELECTROHIDRAULICA ,

Elaborado por Ing. Jovanny Duque

pág. 14


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_

NEUMATICA, ELECTRONEUMATICA, CONTROL, PLC M221, PLC SIEMEMS S7 1200, PLC SIEMENS S7 300 , FLUID SIM FACTORY IO, entre otros

https://mecatronica-itsa.blogspot.com/

Elaborado por Ing. Jovanny Duque

pág. 15


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.