Programa en Arduino sistemas secuenciales simulados en GRAFCET
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_ CICLO DE TRABAJO (A+/TEMPORIZACIÓN/ A-) CON POSIBILIDAD DE ELEGIR ENTRE CU – CC O CX3 CON TEMP. ENTRE CICLOS https://youtube.com/playlist?list=PLHTERkK4EZJrSElocHbXzjzLjKXq8RjIV GRAFCET CON ARDUINO Programa en Arduino sistemas secuenciales simulados en GRAFCET , con un metodo confiable 100% https://youtube.com/playlist?list=PLHTERkK4EZJpJEcByUotJ5YOIiC-Vmimt
ESPECIFICACIONES DEL CONTROL 1. El sistema de control debe permitir la selección entre Ciclo Único (CU), Ciclo Continuo (CC) o Ciclo X3 (CX3). 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). 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 el cilindro. Debiendo quedar al final retraído en su posición inicial. 7. En el modo CC o en CX3 el sistema debe asegurar una temporización entre ciclos.
GRAFCET EQUIVALENTE PARA ARDUINO Elaborado por el Ing. Jovanny Duque
Pag. 1
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
Elaborado por el Ing. Jovanny Duque
Pag. 2
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
ESQUEMA DE CONEXIÓN DE E / S SIMULACION FLUID SIM P 4.2
Actividad: Observa el video “1 GRAFCET FLUIDIM P 4.2” en el que se describe un proyecto sencillo programado con GRAFCET usando el software FLUID SIMP 4.2 de FESTO, en el enlace https://www.youtube.com/watch?v=ocYJqCrrSlk&t=11s
Elaborado por el Ing. Jovanny Duque
Pag. 3
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ Actividad: Observa el video “2 GRAFCET FLUIDIM P 4.2” en el que se describe en detalle, como usar el editor de GRAFCET del software FLUID SIMP 4.2 de FESTO para modelar el sistema, en el enlace https://www.youtube.com/watch?v=KcgWf2-GAsc
ESQUEMA DE CONEXIÓN DE E / S ARDUINO UNO
Elaborado por el Ing. Jovanny Duque
Pag. 4
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
CÓDIGO EQUIVALENTE PARA ARDUINO // OK CU CC Y CX3 PE I O UAN
int RESET = 9;
// ETAPAS GRAFCET PRINCIPAL
// DECLARACION DE LOS PINES DE LAS SALIDAS
int E1;
int Y1 = 23;
int E2;
int Y2 = 25;
int E3;
// DECLARACION E INICIALIZACION DE LAS MEMORIAS
int E4;
int MCC = LOW;
int E5;
int MCX3 = LOW;
int E10;
int FIN_CX3 = LOW;
int E11;
int EMERG = LOW;
int E14;
// Variables asociadas a "temp1".
int E21;
int T1;
// ETAPAS GRAFCET CICLO CONTINUO
int activado1 = 0; // Al principio no ha sido activado.
int E6;
long inicio1, final1, actual1;
int E7; int E61;
// Variables asociadas a "temp2".
// ETAPAS GRAFCET CICLO X 3
int T2;
int E8;
int activado2 = 0; // Al principio no ha sido activado.
int E9;
long inicio2, final2, actual2;
int E81; // ETAPAS GRAFCET P EMERGENCIA
// Variables asociadas a "temp3".
int E12;
int T3;
int E13;
int activado3 = 0; // Al principio no ha sido activado.
int E120;
long inicio3, final3, actual3;
// DECLARACION DE LOS PINES DE ENTRADAS int PIEZA = 12;
// Variables asociadas a CONTADOR
int PE = 13;
int CONTADOR = 0; // INICIALIZACION DEL CONTADOR
int CU = 6;
const int PSCONTADOR = 3; // PRESELEC DEL CONTADOR = # DE CICLOS
int CC = 7; int A_0 = 14;
int ESTADOPREVIO_E3 = 0;
int A_1 = 15; int CX3 = 8; Elaborado por el Ing. Jovanny Duque
Pag. 5
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ E21 = LOW; // ETAPAS DEL GRAFCET C CONTINUO (ESTADO INICIAL) E6 = HIGH; E7 = LOW; void setup() {
E61 = LOW;
Serial.begin(9600); //Entradas//
// ETAPAS DEL GRAFCET CCICLO X3
pinMode(PIEZA, INPUT);
E8 = HIGH;
pinMode(PE, INPUT);
E9 = LOW;
pinMode(CU, INPUT);
E81 = LOW;
pinMode(CC, INPUT);
// ETAPAS GRAFCET PE
pinMode(A_0, INPUT);
E12 = HIGH;
pinMode(A_1, INPUT);
E13 = LOW;
pinMode(CX3, INPUT);
E120 = LOW;
pinMode(RESET, INPUT);
}
//SALIDAS// pinMode(Y1, OUTPUT);
void loop ( ) {
pinMode(Y2, OUTPUT);
PIEZA = digitalRead(12); PE = digitalRead(13);
//ALGUNOS DISPOSITIVOS TRAEN UNA CONFIGURACION POR ESO ES NECESARIO COLOCAR LOS PUERTOS EN 0V digitalWrite(Y1, LOW); digitalWrite(Y2, LOW);
CU = digitalRead(6); CC = digitalRead(7); A_0 = digitalRead(14); A_1 = digitalRead(15); CX3 = digitalRead(8);
// ETAPAS DEL GRAFCET PRINCIPAL (ESTADO INICIAL)
RESET = digitalRead(9);
E1 = HIGH; E2 = LOW; E3 = LOW; E4 = LOW; E5 = LOW; E10 = LOW; E11 = LOW; E14 = LOW;
//TRATAMIENTO SECUENCIAL // ECUACIONES GRAFCET PRINCIPAL E1 = ((E1 | (E14 & RESET) | (E14 & ~PE) | (E21 & E21) | (E11 & ~PE) | (E5 & ((~MCC) & (~MCX3))) | (E10 & ~PE) | (E3 & ~PE) | (E4 & ~PE)) & (~E2)); E2 = ((E2 | (E10 & T2) | (E11 & T3) | (E1 & PIEZA & A_0 & (CU | CC | CX3) & (~EMERG))) & (~E3) & (~E21)); E21 = (((E21 | (E2 & ~PE))) & (~E1)); Elaborado por el Ing. Jovanny Duque
Pag. 6
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ E3 = ((E3 | (E2 & A_1)) & (~E4) & (~E1));
else { digitalWrite(Y1, LOW); }
E4 = ((E4 | (E3 & T1)) & (~E5) & (~E1)); E5 = ((E5 | (E4 & A_0)) & (~E1) & (~E10) & (~E11) & (~E14)); E10 = ((E10 | (E5 & MCC & (~MCX3))) & (~E1) & (~E2)); E11 = ((E11 | (E5 & MCX3 & (~MCC) & (CONTADOR < PSCONTADOR)) ) & (~E1) & (~E2)); E14 = ((E14 | (E5 & MCX3 & (~MCC) & (CONTADOR >= PSCONTADOR)) ) & (~E1));
if (E3 == HIGH) { Serial.println("Etapa3 33333333"); activetemp1(); } else { desactivetemp1(); } if ((E3 & MCX3) != ESTADOPREVIO_E3) { if (E3 == HIGH) { CONTADOR++; Serial.print("CONTADOR CONTADOR : ");
// ECUACIONES GRAFCET C CONTINUO
Serial.println(CONTADOR); }
E6 = ((E6 | (E61 & E61) ) & (~E7));
ESTADOPREVIO_E3 = E3;
E7 = ((E7 | (E6 & CC & (~MCX3) & (~FIN_CX3) & (~EMERG))) & (~E61));
}
E61 = ((E61 | (E7 & (CU | (~PIEZA) | (~PE) ))) & (~E6));
if (E4 == HIGH) { digitalWrite(Y2, HIGH); Serial.println("Etapa4"); }
// ECUACIONES GRAFCET CX3 E8 = ((E8 | (E81 & E81) ) & (~E9));
if (E5 == HIGH) { digitalWrite(Y2,LOW); Serial.println("Etapa5555555555555555"); }
E9 = ((E9 | (E8 & CX3 & (~MCC) & (~EMERG) )) & (~E81));
if (E6 == HIGH) { Serial.println("Etapa6"); }
E81 = ((E81 | (E9 & (CU | (~PE) | (~PIEZA) | FIN_CX3))) & (~E8));
if (E7 == HIGH) { MCC = HIGH; Serial.println("Etapa7 MCC"); }
// ECUACIONES GRAFCET P EMERGENCIA
else { MCC = LOW; }
E12 = ((E12 | (E120 & E120 & (PE)) ) & (~E13)); E13 = ((E13 | (E12 & (~PE))) & (~E120));
if (E8 == HIGH) {Serial.println("Etapa 8
E120 = ((E120 | (E13 & A_0)) & (~E12));
if (E9 == HIGH) { MCX3 = HIGH; Serial.println("Etapa9 MCX3"); }
//TRATAMIENTO POSTERIOR
else { MCX3 = LOW; }
if (E1 == HIGH) {Serial.println("Etapa1");
if (E10 == HIGH) { Serial.println("Etapa10"); activetemp2(); }
Serial.print("VALOR DEL CONTADOR : ");
8
8"); }
else { desactivetemp2(); }
Serial.println(CONTADOR); }
if (E2 == HIGH) { digitalWrite(Y1, HIGH);
if (E11 == HIGH) {Serial.println("Etapa11 11"); activetemp3(); }
Serial.println("Etapa2"); }
else { desactivetemp3(); } Elaborado por el Ing. Jovanny Duque
Pag. 7
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ if (E12 == HIGH) { Serial.println("Etapa12 Etapa12 Etapa12"); }
final1 = inicio1 + 1000; segundos.
if (E13 == HIGH) { digitalWrite(Y1, LOW); digitalWrite(Y2, HIGH);
}
// Tiempo final es inicio mA¡s 8
EMERG = HIGH; Serial.println("Etapa13 EMERG Etapa13 EMERG"); }
actual1 = millis();
else { EMERG = LOW; }
if (activado1 == 1 && (actual1 > final1) ) { // Si fue activado=1 y el tiempo actual es mayor que el final....
// Consulta el tiempo actual.
T1 = HIGH; if (E120 == HIGH) { Serial.println("Etapa120 EMERG Etapa120 EMERG" ); digitalWrite(Y2, LOW); EMERG = HIGH; }
} else { T1 = LOW; }
else { EMERG = LOW; } if (E61 == HIGH) { Serial.println("Etapa61-61-Etapa6161"); }
}
void desactivetemp1() { if (E81 == HIGH) { Serial.println("Etapa81 Etapa81"); }
T1 = LOW; activado1 = 0;// haz un parpadeo.
if (E14 == HIGH) { FIN_CX3 = HIGH; CONTADOR = 0;
inicio1 = 0;
Serial.println("Etapa 14 14 14 "); }
final1 = 0;
else { FIN_CX3 = LOW; }
actual1 = 0;
// ACTIVACION DE LUCES CON LAS BOBINAS DE LAS ELECTROVALVULAS
}
if (E2 == HIGH) { digitalWrite(29, HIGH); }
//SUBRUTINA TEMPORIZADOR 2
else {digitalWrite(29, LOW); } if ((E4 == HIGH)| (E13 == HIGH) ) { digitalWrite(31, HIGH); }
void activetemp2() {
else { digitalWrite(31, LOW); } } if (E10 == HIGH && activado2 == 0) { HIGH y no ha sido activado=0 antes... //SUBRUTINA TEMPORIZADOR 1 void activetemp1() { if (E3 == HIGH && activado1 == 0) { // Si ha pulsado HIGH y no ha sido activado=0 antes... activado1 = 1; tiempo de inicio.
// marca activado=1 y guarda el
activado2 = 1; tiempo de inicio.
// Si ha pulsado
// marca activado=1 y guarda el
inicio2 = millis(); final2 = inicio2 + 1000; // Tiempo final es inicio mA¡s 8 segundos. }
inicio1 = millis(); Elaborado por el Ing. Jovanny Duque
Pag. 8
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ else { T3 = LOW; } actual2 = millis();
// Consulta el tiempo actual.
if (activado2 == 1 && (actual2 > final2) ) { // Si fue activado=1 y el tiempo actual es mayor que el final.... T2 = HIGH;
}
void desactivetemp3() { T3 = LOW; activado3 = 0;// haz un parpadeo.
}
inicio3 = 0;
else {T2 = LOW;}
final3 = 0;
}
actual3 = 0; }
void desactivetemp2() { T2 = LOW; activado2 = 0;// haz un parpadeo. inicio2 = 0; final2 = 0; actual2 = 0; } //SUBRUTINA TEMPORIZADOR 3 void activetemp3() { if (E11 == HIGH && activado3 == 0) { HIGH y no ha sido activado=0 antes... activado3 = 1; tiempo de inicio.
// Si ha pulsado
// marca activado=1 y guarda el
inicio3 = millis(); final3 = inicio3 + 1000; // Tiempo final es inicio mA¡s 8 segundos. }
actual3 = millis();
// Consulta el tiempo actual.
if (activado3 == 1 && (actual3 > final3) ) { // Si fue activado=1 y el tiempo actual es mayor que el final.... T3 = HIGH; }
Elaborado por el Ing. Jovanny Duque
Pag. 9
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
Elaborado por el Ing. Jovanny Duque
Pag. 10
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ // ECUACIONES GRAFCET PRINCIPAL E1 = ((E1 | (E14 & RESET) | (E14 & ~PE) | (E21 & E21) | (E11 & ~PE) | (E5 & ((~MCC) & (~MCX3))) | (E10 & ~PE) | (E3 & ~PE) | (E4 & ~PE)) & (~E2)); E2 = ((E2 | (E10 & T2) | (E11 & T3) | (E1 & PIEZA & A_0 & (CU | CC | CX3) & (~EMERG))) & (~E3) & (~E21)); E21 = (((E21 | (E2 & ~PE))) & (~E1)); E3 = ((E3 | (E2 & A_1)) & (~E4) & (~E1)); E4 = ((E4 | (E3 & T1)) & (~E5) & (~E1)); E5 = ((E5 | (E4 & A_0)) & (~E1) & (~E10) & (~E11) & (~E14)); E10 = ((E10 | (E5 & MCC & (~MCX3))) & (~E1) & (~E2)); E11 = ((E11 | (E5 & MCX3 & (~MCC) & (CONTADOR < PSCONTADOR)) ) & (~E1) & (~E2)); E14 = ((E14 | (E5 & MCX3 & (~MCC) & (CONTADOR >= PSCONTADOR)) ) & (~E1)); // ECUACIONES GRAFCET C CONTINUO E6 = ((E6 | (E61 & E61) ) & (~E7)); E7 = ((E7 | (E6 & CC & (~MCX3) & (~FIN_CX3) & (~EMERG))) & (~E61)); E61 = ((E61 | (E7 & (CU | (~PIEZA) | (~PE) ))) & (~E6)); // ECUACIONES GRAFCET CX3 E8 = ((E8 | (E81 & E81) ) & (~E9)); E9 = ((E9 | (E8 & CX3 & (~MCC) & (~EMERG) )) & (~E81)); E81 = ((E81 | (E9 & (CU | (~PE) | (~PIEZA) | FIN_CX3))) & (~E8)); // ECUACIONES GRAFCET P EMERGENCIA E12 = ((E12 | (E120 & E120 & (PE)) ) & (~E13)); E13 = ((E13 | (E12 & (~PE))) & (~E120)); E120 = ((E120 | (E13 & A_0)) & (~E12));
Elaborado por el Ing. Jovanny Duque
Pag. 11
http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_
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.c om/c/JovannyDuque? sub_confirmation=1_ _________________________________ _ y Amigos/as en el BLOGG MEKATRONICA podras encontrar cantidad de recursos sobre SOLIDWORKS, HIDRAULICA ELECTROHIDRAULICA , NEUMATICA, ELECTRONEUMATICA, CONTROL, PLC M221, PLC SIEMEMS S7 1200, PLC SIEMENS S7 300 , FLUID SIM FACTORY IO, entre otros
https://mecatronicaitsa.blogspot.com/ Elaborado por el Ing. Jovanny Duque
Pag. 12