Programa en Arduino sistemas secuenciales simulados en GRAFCET.

Page 1

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


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.