Integracion en un programa de conteo y manejo de E/S

Buenos dias, estoy haciendo un pequeño automatismo de control de 2 variadores de frecuencia comandado por 3 pulsadores START STOP y una velocidad de alistamiento lenta

los 2 variadores de frec comandan cintas transportadoras donde circula material que debe ser contado.

tengo las 2 rutinas de control E/S y de conteo, pero al integrarlas no me doy cuenta que no esta funcionando.
Solcito por favor orientacion, estoy haciendo algo mal y no logro darme cuenta

Porque andan en forma separada y al unificar el codigo no funciona

Muchas Gracias, Diego Use code tags to format code for the forum

270_control_e_s_v11.ino|attachment (1.8 KB)
270_conteo_test1.ino|attachment (766 Bytes)
_270_control_e_s_v21.ino|attachment (2.2 KB)

Se nota que estas muy influencia por los PLCs.
El tipo de variables que usas es simple conversión de Ladder a un C dentro de lo posible.

Y si quieres hacer algo olvida de usar esto

delay(4000);;digitalWrite(Q4,LOW);

ademas de los errores cometidos como doble ;;
No uses delay(). ve a documentación y lee sobre máquina de estados y el uso de millis().

Eso ultimo debe ser

delay(4000);
digitalWrite(Q4,LOW);

Intenta ilustrarnos para poder ayudarte informando que son las entradas I1 a In, que son las salidas Q1 a Qn etc.
Ponle nombres según lo que esten controlando o el sensor que sean.
De ese modo tienes un código mas ilustrativo.

Estás usando una configuración PULL-DOWN, donde si no pulsas el botón la entrada asocida valdrá LOW. En la parte de conteo utilizas este código:

  estado=digitalRead(I4);
  if(estado==LOW){
    while(estado==LOW){
      estado=digitalRead(I4);
    }
    cont++;

Si analizas el código veras que este while bloquea el programa hasta que pulsas el botón I4, por lo tanto nunca realizará el otro código, a no ser que pulses el botón.

Te recomiendo que leas el tutorial que hice para leer botones Como NO leer un botón y como SI debemos hacerlo. En tu caso y viendo que vienes del mundo del PLC, en vez de APRETANDOLO o SOLTANDOLO habría que hablar de flanco ascendente o flanco descendente de la entrada.

Y como dijo @Surbyte olvídate de usar delay.

Tienes que quitarte lo aprendido con PLC (tanto victor como yo sabemos del tema) y comenzar a pensar de manera diferente.
Ahora te pondré un link donde un proceso de PLC fue transformado en otro realizado con Arduino.
Es algo que @victorjam hizo para una forera.
Te vas a abrumar pero quiero que veas cómo un proceso de PLC se transforma en una máquina de estados donde no existen los delays (eso elimínalo de tu repertorio, ya mismo).
Si logras esa conversión en tu mente, entenderás este mundo y verás la similitud con el mundo del PLC:

Tómatelo con calma.
Hay muchos ejemplos mas simples, este es complejo y más aún porque la persona es anciosa en su accionar y genera muchas confusiones para poder entenderla y hacerse entender.

Muchas gracias, desgraciadamente no tengo el nivel para seguir ese proyecto. Si sabes de otro ejemplo de maquinas de estado mas basico para aprender a caminar, te agradecere me guies al link.

descripcion entradas salidas

I-1 pulsador START arranca el VFD a veloc. nominal
I-2 pulsador STOP
I-3 pulsador Alistamiento ( 1/10 de la velocidad de cinta nominal) programada en el VFD
I-4 sensor fotoelectrico NPN/PNP simulado con un pulsador manual para las pruebas

Q-1 salida a rele marcha VFD
Q-3 salida a rele marcga VFD a 1/10 velocidad nominal
Q-4 buzzer acustico

Aca tienes otro ejemplo, que no se si respondí bien pero al menos te ubica en lo que es una conversión de un código lineal como el tuyo a otro con maquina de estados.

Aca hay una muy buena explicación de Luis Llamas que es nuestra referencia siempre en este foro.

Por lo que veo en lo que describes en el post#6
El problema es relativamente simple.
pin 2 => pulsador START a velocidad nominal o VNom
pin 3 => pulsador STOP
pin 4 => pulsador Alistamiento a 1/10 VNom
pin 6 => sensor fotoelectrico.

pin 12 => Salida Marcha VFD
pin 11 => Salida marcha a 1/2 VNom
pin 7 => Buzzer.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.