Ir al contenido

Cómo medir el tiempo en un PLC Arduino con millis()

10 de diciembre de 2018 por
Cómo medir el tiempo en un PLC Arduino con millis()
Alejandro Jabalquinto

millis() devuelve el número de milisegundos desde que el PLC Arduino empezó a ejecutar el programa actual, como un unsigned long. Compara dos lecturas para medir tiempo o para ejecutar acciones a intervalos regulares sin detener el programa con delay().

Esta función es muy útil cuando quieres controlar un proceso comparando tiempos: tiempos de espera, lecturas periódicas, salidas que se encienden y se apagan, y varias tareas en el mismo loop.

La función millis()

Sintaxistime = millis();
ParámetrosNinguno
Retornounsigned long: milisegundos desde que empezó el programa
DesbordamientoEl valor vuelve a 0 después de unos 49,7 días (232 ms)

El desbordamiento no es un problema si siempre comparas tiempos con una resta, millis() - start >= interval, y los guardas en variables unsigned long. La resta sin signo da el resultado correcto aunque el contador haya vuelto a 0.

Requisitos

Ejemplo: hacer parpadear una salida digital cada segundo

Este ejemplo enciende y apaga la salida digital Q0.0 cada segundo con millis(). El loop nunca se detiene, así que el programa puede hacer otras tareas entre cambios.

unsigned long actualtime = 0;
unsigned long beforetime = 0;
unsigned long deltatime = 1000;  // 1000 ms = 1 s
bool laststate = true;

void setup() {
  Serial.begin(9600);
  pinMode(Q0_0, OUTPUT);
}

void loop() {
  // Save the current time (ms since the program started)
  actualtime = millis();
  // Check if one second has passed
  if (actualtime - beforetime >= deltatime) {
    if (laststate) {
      // Digital output Q0.0 HIGH
      digitalWrite(Q0_0, HIGH);
      laststate = false;
    }
    else {
      // Digital output Q0.0 LOW
      digitalWrite(Q0_0, LOW);
      laststate = true;
    }
    // Save the time of this change, in milliseconds
    beforetime = actualtime;
  }
}

deltatime es el intervalo en milisegundos. Cada vez que la diferencia entre el tiempo actual y beforetime llega a 1000 ms, la salida cambia de estado y beforetime guarda el momento del cambio. Q0.0 es una salida digital en los PLC M-Duino; en otro modelo, usa una salida digital de tu PLC.

El ejemplo compila para el M-Duino 21, el M-Duino 21+ y el M-Duino 58+ con el paquete de placas AVR de Industrial Shields 1.2.1.

Buscar en nuestro blog

Cómo medir el tiempo en un PLC Arduino con millis()
Alejandro Jabalquinto 10 de diciembre de 2018
Compartir esta publicación

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs