1
COM
PIN 5 PIN 7
PIN 6
PIN 2
PIN 3
S1
L1
L2
A2 A1
A2 A1
3 4
PIN 4
L3
A2 A1
PIN 9 PIN 8
S3 S2
3 4
3 4
S4
1 4
3 4
3 4
3 4
COM1
L4
A2 A1
GRAFCET GENERICO PARA EL CONTROL DE TRES (3) LUCES USANDO CUATRO (4) PULSADORES NA.
GRAFCET GENERICO
https://youtube.com/playlist?list=PLHTERkK4EZJqYRyOEp40oJs2miTM35BKY
GRAFCET CON ARDUINO Programa en Arduino sistemas secuenciales simulados en GRAFCET , con un método confiable 100%
https://youtube.com/playlist?list=PLHTERkK4EZJpJEcByUotJ5YOIiC-Vmimt
OBJETIVO: Usar cada una de las tres (3) estructuras de programación GRAFCET, realizar saltos adelante, reenvíos hacia atrás, saltos a otras etapas, manejo de temporizaciones, manejo memorias, etc.
ESQUEMA DE CONEXIÓN DE E / S ARDUINO
ENTRADAS
SALIDAS
+24 V 0V +24 V 0V
2
GRAFCET
DESCRIPCIÓN DEL PROCESO EN TERMINOS DE ETAPAS Y TRANSICIONES
3
//TRATAMIENTO PREVIO
int E1;
int E2;
int E3;
int E4;
int E5;
int E6;
int E7;
int E8;
int E9;
int E10;
int E11;
int E12;
int E13;
int E14;
int S1=6;
int S2=7;
int S3=8;
int S4=9;
int L1=2;
int L2=3;
int L3=4;
int L4=5;
int T1;
int activado1=0;
long inicio1, final1, actual1;
int T2;
int activado2=0;
long inicio2, final2, actual2;
int T3;
int activado3=0;
long inicio3, final3, actual3;
void setup
() {Serial.begin(9600);
pinMode(6,INPUT);
pinMode(7,INPUT);
pinMode(8,INPUT);
pinMode(9,INPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
digitalWrite(L1,LOW);
digitalWrite(L2,LOW);
digitalWrite(L3,LOW);
digitalWrite(L4,LOW);
E1=HIGH;
E2=LOW;
E3=LOW;
E4=LOW;
E5=LOW;
E6=LOW;
E7=LOW;
E8=LOW;
E9=LOW;
E10=LOW;
E11=LOW;
E12=LOW;
E13=LOW;
E14=LOW;
}
//TRATAMIENTO SECUENCIAL
void loop
( ) {S1=digitalRead(6);
S2=digitalRead(7);
S3=digitalRead(8);
S4=digitalRead(9);
E1=((E1|(S4&E13&E14))&(~E2)&(~E7)&(~E8));
E2=((E2|(S1&E1)|(T1&E6))&(~E3));
E3=((E3|((S3|S2)&E2))&(~E6)&(~E4));
E4=((E4|((S1&S2)&(E3)))&(~E5)&(~E7));
E5=((E5|(T2&E4)|(S1&S3&E7)|(T3&E10)|(S1&E 8))&(~E11)&(~E12));
E6=((E6|(E3&S3&S4))&(~E2));
E7=((E7|(E1&S2)|(E4&S3))&(~E5));
E8=((E8|(E1&S3))&(~E5)&(~E9));
E9=((E9|(E8&S2))&(~E10));
E10=((E10|(E9&S1))&(~E5));
E11=((E11|(E5&S4))&(~E13));
E12=((E12|(E5&S4))&(~E14));
E13=((E13|(E11&S1))&(~E1));
E14=((E14|(E12&S2))&(~E1));
//TRATAMIENTO POSTERIOR
if (E1==HIGH){
Serial.println("Etapa1");
}
if (E2==HIGH){
Serial.println("Etapa2");
digitalWrite(L1,HIGH);
} else{
digitalWrite(L1,LOW);
}
if (E3==HIGH){
Serial.println("Etapa3");
4
digitalWrite(L2,HIGH);
} else{
digitalWrite(L2,LOW);
}
if (E4==HIGH){
Serial.println("Etapa4");
digitalWrite(L1,HIGH);
activetemp2();
} else{
digitalWrite(L1,LOW);
desactivetemp2();
}
if (E5==HIGH){
Serial.println("Etapa5");
}
if (E6==HIGH){
Serial.println("Etapa6");
digitalWrite(L3,HIGH);
activetemp1();
} else{
digitalWrite(L3,LOW);
desactivetemp1();
}
if (E7==HIGH){
Serial.println("Etapa7");
digitalWrite(L2,HIGH);
} else{
digitalWrite(L2,LOW);
}
if (E8==HIGH){
Serial.println("Etapa8");
digitalWrite(L3,HIGH);
} else{
digitalWrite(L3,LOW);
}
if (E9==HIGH){
Serial.println("Etapa9");
digitalWrite(L2,HIGH);
} else{
digitalWrite(L2,LOW);
}
if (E10==HIGH){
Serial.println("Etapa10");
digitalWrite(L3,HIGH);
activetemp3();
} else{
digitalWrite(L3,LOW);
desactivetemp3();
}
if (E11==HIGH){
Serial.println("Etapa11");
digitalWrite(L1,HIGH);
digitalWrite(L2,HIGH);
} else{
digitalWrite(L1,LOW);
digitalWrite(L2,LOW);
}
if (E12==HIGH){
Serial.println("Etapa12");
digitalWrite(L3,HIGH);
} else{
digitalWrite(L3,LOW);
}
if (E13==HIGH){
Serial.println("Etapa13");
}
if (E14==HIGH){
Serial.println("Etapa14");
} }
void activetemp1() {
if(E6 == HIGH && activado1==0){
activado1=1;
inicio1= millis();
final1= inicio1 + 4000;
}
actual1=millis();
if(activado1 == 1 && (actual1>final1)){
T1=HIGH;
} else { T1=LOW;
} }
void desactivetemp1(){
activado1=0; inicio1=0; final1=0; actual1=0;
}
void activetemp2(){
if(E4 == HIGH && activado2==0){
activado2=1;
inicio2= millis();
final2= inicio2 + 10000;
5
}
actual2=millis();
if(activado2 == 1 && (actual2>final2)){
T2=HIGH;
} else { T2=LOW;
} }
void desactivetemp2(){
activado2=0; inicio2=0; final2=0; actual2=0;
}
void activetemp3(){
if(E10 == HIGH && activado3==0){
activado3=1;
inicio3= millis();
final3= inicio3 + 5000;
}
actual3=millis();
if(activado3 == 1 && (actual3>final3)){
T3=HIGH;
} else { T3=LOW;
} }
void desactivetemp3(){
activado3=0; inicio3=0; final3=0; actual3=0;
}