Arduino sistemas secuenciales simulados en GRAFCET 1 CILINDRO ELECTRONEUMÁTICO .

Page 1

Arduino sistemas secuenciales simulados en GRAFCET 1 Cilindro Circuito electroneumático Completo 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=PLHTERkK4EZJoUmPtqY8kKCboLIrGN8tYc 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

Docente de la Institucion Universitaria - ITSA

Pag. 1


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

ESQUEMA DE CONEXIÓN DE E / S SIMULACION FLUID SIM P 4.2

Elaborado por el Ing. Jovanny Duque

Docente de la Institucion Universitaria - ITSA

Pag. 2


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

Elaborado por el Ing. Jovanny Duque

Docente de la Institucion Universitaria - ITSA

Pag. 3


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ 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 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

CÓDIGO EQUIVALENTE PARA ARDUINO Elaborado por el Ing. Jovanny Duque

Docente de la Institucion Universitaria - ITSA

Pag. 4


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

int activado2 = 0; // Al principio no ha sido activado.

// ETAPAS GRAFCET PRINCIPAL

long inicio2, final2, actual2;

int E1; int E2; int E3; int E4; int E5; int E10; // Variables asociadas a "temp3".

int E11; int E14; int E21;

int T3; // ETAPAS GRAFCET CICLO CONTINUO

int activado3 = 0; // Al principio no ha sido activado.

int E6; int E7; int E61;

long inicio3, final3, actual3;

// ETAPAS GRAFCET CICLO X 3 int E8; int E9; int E81;

// Variables asociadas a CONTADOR

// ETAPAS GRAFCET P EMERGENCIA

int CONTADOR = 0; // INICIALIZACIÒN DEL CONTADOR

int E12; int E13; int E120;

const int PSCONTADOR = 3; // PRESELEC DEL CONTADOR = # DE CICLOS

// DECLARACION DE LOS PINES DE ENTRADAS

int ESTADOPREVIO_E3 = 0;

int PIEZA = 2; int PE = 7; int CU = 3; int CC = 4; int A_0 = 9; int A_1 = 10; int CX3 = 13; int RESET = 8;

void setup () { Serial.begin(9600); //entradas//

// DECLARACION DE LOS PINES DE LAS SALIDAS

pinMode (PIEZA, INPUT); pinMode (PE, INPUT);

int Y1 = 5; int Y2 = 6;

pinMode (CU, INPUT); // DECLARACION E INICIALIZACION DE LAS MEMORIAS int MCC = LOW; int MCX3 = LOW; int FIN_CX3 = LOW; int EMERG = LOW;

pinMode (CC, INPUT); pinMode (A_0, INPUT); pinMode (A_1, INPUT); pinMode (CX3, INPUT);

// Variables asociadas a "temp1".

pinMode (RESET, INPUT);

int T1; int activado1 = 0; // Al principio no ha sido activado.

//SALIDAS// pinMode (Y1, OUTPUT);

long inicio1, final1, actual1;

pinMode (Y2, OUTPUT); // Variables asociadas a “temp2". int T2; Elaborado por el Ing. Jovanny Duque

Docente de la Institucion Universitaria - ITSA

Pag. 5


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ //ALGUNOS DISPOSITIVOS TRAEN UNA CONFIGURACION POR ESO ES NECESARIO COLOCAR LOS PUERTOS EN 0V

E1 = ((E1 | (E14 & RESET) | (E14 & PE) | (E21 & E21) | (E11 & PE) | (E5 & ((~MCC) & (~MCX3))) | (E10 & PE) | (E3 & PE) | (E4 & PE)) & (~E2));

digitalWrite (Y1, LOW);

E2 = ((E2 | (E10 & T2) | (E11 & T3) | (E1 & PIEZA & A_0 & (CU | CC | CX3) & (~EMERG))) & (~E3) & (~E21));

digitalWrite (Y2, LOW);

E21 = (((E21 | (E2 & PE))) & (~E1)); // ETAPAS DEL GRAFCET PRINCIPAL (ESTADO INICIAL)

E3 = ((E3 | (E2 & A_1)) & (~E4) & (~E1));

E1 = HIGH; E2 = LOW; E3 = LOW; E4 = LOW;

E5 = ((E5 | (E4 & A_0)) & (~E1) & (~E10) & (~E11) & (~E14));

E5 = LOW; E10 = LOW; E11 = LOW; E14 = LOW; E21 = LOW;

E4 = ((E4 | (E3 & T1)) & (~E5) & (~E1));

E10 = ((E10 | (E5 & MCC & (~MCX3))) & (~E1) & (~E2));

// ETAPAS DEL GRAFCET C CONTINUO (ESTADO INICIAL)

E11 = ((E11 | (E5 & MCX3 & (~MCC) & (CONTADOR < PSCONTADOR))) & (~E1) & (~E2));

E6 = HIGH; E7 = LOW; E61 = LOW;

E14 = ((E14 | (E5 & MCX3 & (~MCC) & (CONTADOR >= PSCONTADOR))) & (~E1));

// ETAPAS DEL GRAFCET CCICLO X3 E8 = HIGH; E9 = LOW; E81 = LOW; // ECUACIONES GRAFCET C CONTINUO // ETAPAS GRAFCET PE

E6 = ((E6 | (E61 & E61)) & (~E7));

E12 = HIGH; E13 = LOW; E120 = LOW;

E7 = ((E7 | (E6 & CC & (~MCX3) & (~FIN_CX3) & (~EMERG))) & (~E61));

}

E61 = ((E61 | (E7 & (CU | (~PIEZA) | PE))) & (~E6));

//TRATAMIENTO SECUENCIAL

// ECUACIONES GRAFCET CX3 E8 = ((E8 | (E81 & E81)) & (~E9));

void loop () {

E9 = ((E9 | (E8 & CX3 & (~MCC) & (~EMERG))) & (~E81));

PIEZA = digitalRead (2); PE = digitalRead (7);

E81 = ((E81 | (E9 & (CU | PE | (~PIEZA) | FIN_CX3))) & (~E8));

CU = digitalRead (3); CC = digitalRead (4);

// ECUACIONES GRAFCET P EMERGENCIA

A_0 = digitalRead (9);

E12 = ((E12 | (E120 & E120)) & (~E13));

A_1 = digitalRead (10);

E13 = ((E13 | (E12 & PE)) & (~E120));

CX3 = digitalRead (13);

E120 = ((E120 | (E13 & A_0)) & (~E12));

RESET = digitalRead (8); // ECUACIONES GRAFCET PRINCIPAL

//TRATAMIENTO POSTERIOR Elaborado por el Ing. Jovanny Duque

Docente de la Institucion Universitaria - ITSA

Pag. 6


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ Serial.println("Etapa7 MCC");} if (E1 == HIGH) {

else {MCC = LOW;}

Serial.println("Etapa1"); Serial.print("VALOR DEL CONTADOR: ");

if (E8 == HIGH) {Serial.println("Etapa 8 ");}

Serial.println(CONTADOR);}

if (E9 == HIGH) {MCX3 = HIGH; Serial.println("Etapa9 MCX3");}

if (E2 == HIGH) {

else {MCX3 = LOW;}

digitalWrite (Y1, HIGH); Serial.println("Etapa2");}

if (E10 == HIGH) {Serial.println("Etapa10");

else {digitalWrite (Y1, LOW);}

activetemp2();} else {desactivetemp2();}

if (E3 == HIGH) { Serial.println("Etapa3 33333333"); activetemp1();}

if (E11 == HIGH) {Serial.println("Etapa11 "); activetemp3();}

else {desactivetemp1();}

else {desactivetemp3();}

if ((E3 & MCX3) != ESTADOPREVIO_E3) { if (E3 == HIGH) { CONTADOR++; Serial.print("CONTADOR : " ); Serial.println(CONTADOR); } ESTADOPREVIO_E3 = E3; }if (E4 == HIGH) {digitalWrite (Y2, HIGH); Serial.println("Etapa4");}

if (E12 == HIGH) {Serial.println("Etapa12");}

if (E13 == HIGH) {digitalWrite (Y1, LOW); digitalWrite (Y2, HIGH); EMERG = HIGH; Serial.println("Etapa13 EMERG ");} else {EMERG = LOW;}

if (E120 == HIGH) {

else {digitalWrite (Y2, LOW);}

Serial.println("Etapa120 "); digitalWrite (Y2, LOW);}

if (E5 == HIGH) { Serial.println("Etapa5");}

if (E61 == HIGH) {

if (E6 == HIGH) {

Serial.println("Etapa61");}

Serial.println("Etapa6");} if (E81 == HIGH) {Serial.println("Etapa81");} if (E7 == HIGH) {MCC = HIGH; Elaborado por el Ing. Jovanny Duque

Docente de la Institucion Universitaria - ITSA

Pag. 7


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ if (E14 == HIGH) {FIN_CX3 = HIGH;

final1 = 0;

CONTADOR = 0;

actual1 = 0;

Serial.println("Etapa 14 ");}

}

else {FIN_CX3 = LOW;}

//SUBRUTINA TEMPORIZADOR 2

}

void activetemp2() {

//SUBRUTINA TEMPORIZADOR 1

void activetemp1() { if (E3 == HIGH && activado1 == 0) { // Si ha pulsado HIGH y no ha sido activado=0 antes... activado1 = 1; guarda el tiempo de inicio.

// marca activado=1 y

inicio1 = millis();

if (E10 == HIGH && activado2 == 0) {// Si ha pulsado HIGH y no ha sido activado=0 antes... activado2 = 1;// marca activado=1 y guarda el tiempo de inicio. inicio2 = millis(); final2 = inicio2 + 2000; // Tiempo final es inicio mas 2 segundos. }

final1 = inicio1 + 1000; inicio más 8 segundos.

// Tiempo final es

}

actual2 = millis(); actual.

// Consulta el tiempo

if (activado2 == 1 && (actual2 > final2)) {// Si fue activado=1 y el tiempo actual es mayor que el final....

actual1 = millis(); actual.

// Consulta el tiempo

if (activado1 == 1 && (actual1 > final1) ) { // Si fue activado=1 y el tiempo actual es mayor que el final....

T2 = HIGH;}

else {T2 = LOW;} }

void desactivetemp2() {

T1 = HIGH;

T2 = LOW;

}

activado2 = 0;// haz un parpadeo. inicio2 = 0;

else {

final2 = 0;

T1 = LOW;

actual2 = 0;

}

} }

//SUBRUTINA TEMPORIZADOR 3

void desactivetemp1() {

void activetemp3() {

T1 = LOW;

if (E11 == HIGH && activado3 == 0) {// Si ha pulsado HIGH y no ha sido activado=0 antes...

activado1 = 0;// haz un parpadeo.

activado3 = 1; // marca activado=1 y guarda el tiempo de inicio.

inicio1 = 0; Elaborado por el Ing. Jovanny Duque

Docente de la Institucion Universitaria - ITSA

Pag. 8


http://www.youtube.com/c/JovannyDuque?sub_confirmation=1_ inicio3 = millis(); final3 = inicio3 + 2000; // Tiempo final es inicio mas 2 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;} else {T3 = LOW;} }

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

Elaborado por el Ing. Jovanny Duque

Docente de la Institucion Universitaria - ITSA

Pag. 9


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)) & (~E13)); E13 = ((E13 | (E12 & PE)) & (~E120)); E120 = ((E120 | (E13 & A_0)) & (~E12));

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. 10


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

Elaborado por el Ing. Jovanny Duque

Pag. 11


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.