2.3.1. Ejemplo de contadores
Ejemplo de contador cíclico de 0 a 4.
- Se cuentan los impulsos que se producen en la entrada S1.
- Mediante un piloto K1 mostramos la salida del contador.
- El reinicio del contador se realiza mediante un comparador que actúa en el Reset() del contador.
Entradas
Salidas
- K1 Indicador de estado de contador

Ladder del contador ascendente con reinicio
Ejemplo de contador para el microPLC con placa arduino
/*
* Ejemplo de Contadores con el microPLC - arduino
*
* Descripción: Programa básico de contadores
*
* Autor: Rafa Aranda
* Fecha: 12-03-2014
* Versión: 1.0
*/
// Asignación de Pins a Salidas digitales (están ordenados de forma decreciente por necesidades del PCB)
#define Out_1 6
#define Out_2 7
#define Out_3 8
#define Out_4 9
// Pins de entrada (están ordenados de forma decerciente por necesidades del PCB)
#define In_1 5
#define In_2 4
#define In_3 3
#define In_4 2
// Librerías
#include "microPLC.h"
// Funciones prototipo
void getInputs(void);
void setOutputs(void);
// Variables globales
//Definición de las variables de trabajo
m4bits s; // Entradas del microPLC
m4bits k; // Salidas del microPLC
m4bits m1; // Memoria temporal
// microPLC
microPLC uPLC; // Declaración del microPLC
// Contadores y temporizadores
CI ci1; // Contador incremental
/* setup
* Tareas iniciales de preparación
*/
void setup(){
// Establecer los pins de salida de los relés
pinMode(Out_1, OUTPUT);
pinMode(Out_2, OUTPUT);
pinMode(Out_3, OUTPUT);
pinMode(Out_4, OUTPUT);
// Establecer los pins de entradas digitales optoacopladas
pinMode(In_1, INPUT);
pinMode(In_2, INPUT);
pinMode(In_3, INPUT);
pinMode(In_4, INPUT);
// Preparar las variables
uPLC.init(); // Iniciar funciones del tiempo
}
/* loop
* Programa principal
*/
void loop() {
getInputs(); // Leer las entradas digitales
//-------- Contador ascendente --------
// A. Entrada contadora de pulsos
ci1.Inc(s._1);
// B. Salida activa la lámpara en k1
k._1=ci1.Q();
// C. Comparación con 4 y reiniciar el contador
if(ci1.Con()>4)
ci1.Reset(true);
else
ci1.Reset(false);
//------------------------
setOutputs(); // Activar las salidas
delay(2); // CicloScan + 2ms, retardo para anti-rebotes
}
/* GetInputs
* Lee el estado de la entrada indicada en el parámetro y lo asigna invertido a las variables de trabajo
*/
void getInputs(void){
s._1=!digitalRead(In_1);
s._2=!digitalRead(In_2);
s._3=!digitalRead(In_3);
s._4=!digitalRead(In_4);
}
/* setOutputs
* asigna el estado de las varibles de trabajo a las salidas digitales
*/
void setOutputs(void){
digitalWrite(Out_1, k._1);
digitalWrite(Out_2, k._2);
digitalWrite(Out_3, k._3);
digitalWrite(Out_4, k._4);
}