Cómo verificar las salidas del Raspberry PLC

15 de junio de 2026 por
Cómo verificar las salidas del Raspberry PLC
Boot & Work Corp. S.L, Queralt del Águila Munté

Para verificar que las salidas de tu Raspberry PLC funcionan correctamente, el enfoque recomendado es ejecutar un programa de prueba en C++ que alterne todas las salidas digitales, analógicas y de relé cada segundo. Si los LED correspondientes se encienden y apagan, las salidas funcionan. Si no responden, el problema está en la configuración del software o en el propio hardware.

Instalación de la librería rpiplc-lib

El programa de prueba depende de la librería rpiplc-lib. Sigue estos pasos para instalarla:

  1. Instala git si no está presente: sudo apt update && sudo apt install git
  2. Clona el repositorio en un directorio de tu elección: git clone https://github.com/Industrial-Shields/rpiplc-lib.git
  3. Entra en el directorio y compila: cd rpiplc-lib && make
  4. Instala en el sistema: sudo make install

La librería instala sus cabeceras en /usr/local/include/rpiplc y la librería compilada en /usr/local/lib.

Programa de prueba de salidas

Guarda el siguiente código en un archivo llamado test_outputs.cpp. El programa usa condicionales de preprocesador para activar los pines de salida correctos según el modelo de Raspberry PLC.

#include <rpiplc.h>

void setDigitalPins(int state) {
    digitalWrite(PWM3, state);
    digitalWrite(PWM2, state);
    digitalWrite(PWM1, state);

    #if defined(RPIPLC_21) || defined(RPIPLC_38AR) || defined(RPIPLC_42) || defined(RPIPLC_53ARR) || defined(RPIPLC_54ARA) || defined(RPIPLC_57AAR) || defined(RPIPLC_58)
        digitalWrite(Q0_0, state); digitalWrite(Q0_1, state); digitalWrite(Q0_2, state);
        digitalWrite(Q0_3, state); digitalWrite(Q0_4, state); digitalWrite(Q0_5, state);
        digitalWrite(Q0_6, state); digitalWrite(Q0_7, state);
    #elif defined(RPIPLC_19R) || defined(RPIPLC_38R) || defined(RPIPLC_50RRA) || defined(RPIPLC_57R)
        digitalWrite(Q0_0, state); digitalWrite(Q0_1, state); digitalWrite(Q0_2, state);
        digitalWrite(R0_1, state); digitalWrite(R0_2, state); digitalWrite(R0_3, state);
        digitalWrite(R0_4, state); digitalWrite(R0_5, state); digitalWrite(R0_6, state);
        digitalWrite(R0_7, state); digitalWrite(R0_8, state);
    #endif

    #if defined(RPIPLC_42) || defined(RPIPLC_57AAR) || defined(RPIPLC_58)
        digitalWrite(Q1_0, state); digitalWrite(Q1_1, state); digitalWrite(Q1_2, state);
        digitalWrite(Q1_3, state); digitalWrite(Q1_4, state); digitalWrite(Q1_5, state);
        digitalWrite(Q1_6, state); digitalWrite(Q1_7, state);
    #elif defined(RPIPLC_38R) || defined(RPIPLC_38AR) || defined(RPIPLC_50RRA) || defined(RPIPLC_53ARR) || defined(RPIPLC_54ARA) || defined(RPIPLC_57R)
        digitalWrite(Q1_0, state); digitalWrite(Q1_1, state); digitalWrite(Q1_2, state);
        digitalWrite(R1_1, state); digitalWrite(R1_2, state); digitalWrite(R1_3, state);
        digitalWrite(R1_4, state); digitalWrite(R1_5, state); digitalWrite(R1_6, state);
        digitalWrite(R1_7, state); digitalWrite(R1_8, state);
    #endif

    #if defined(RPIPLC_50RRA) || defined(RPIPLC_54ARA) || defined(RPIPLC_58)
        digitalWrite(Q2_0, state); digitalWrite(Q2_1, state); digitalWrite(Q2_2, state);
        digitalWrite(Q2_3, state); digitalWrite(Q2_4, state); digitalWrite(Q2_5, state);
        digitalWrite(Q2_6, state); digitalWrite(Q2_7, state);
    #elif defined(RPIPLC_53ARR) || defined(RPIPLC_57AAR) || defined(RPIPLC_57R)
        digitalWrite(Q2_0, state); digitalWrite(Q2_1, state); digitalWrite(Q2_2, state);
        digitalWrite(R2_1, state); digitalWrite(R2_2, state); digitalWrite(R2_3, state);
        digitalWrite(R2_4, state); digitalWrite(R2_5, state); digitalWrite(R2_6, state);
        digitalWrite(R2_7, state); digitalWrite(R2_8, state);
    #endif
}

void setAnalogPins(int value) {
    #if defined(RPIPLC_21) || defined(RPIPLC_38AR) || defined(RPIPLC_42) || defined(RPIPLC_53ARR) || defined(RPIPLC_54ARA) || defined(RPIPLC_57AAR) || defined(RPIPLC_58)
        analogWrite(A0_5, value); analogWrite(A0_6, value); analogWrite(A0_7, value);
    #elif defined(RPIPLC_19R) || defined(RPIPLC_38R) || defined(RPIPLC_50RRA) || defined(RPIPLC_57R)
        analogWrite(A0_0, value); analogWrite(A0_1, value); analogWrite(A0_2, value);
    #endif

    #if defined(RPIPLC_42) || defined(RPIPLC_57AAR) || defined(RPIPLC_58)
        analogWrite(A1_5, value); analogWrite(A1_6, value); analogWrite(A1_7, value);
    #elif defined(RPIPLC_38R) || defined(RPIPLC_38AR) || defined(RPIPLC_50RRA) || defined(RPIPLC_53ARR) || defined(RPIPLC_54ARA) || defined(RPIPLC_57R)
        analogWrite(A1_0, value); analogWrite(A1_1, value); analogWrite(A1_2, value);
    #endif

    #if defined(RPIPLC_50RRA) || defined(RPIPLC_54ARA) || defined(RPIPLC_58)
        analogWrite(A2_5, value); analogWrite(A2_6, value); analogWrite(A2_7, value);
    #elif defined(RPIPLC_53ARR) || defined(RPIPLC_57AAR) || defined(RPIPLC_57R)
        analogWrite(A2_0, value); analogWrite(A2_1, value); analogWrite(A2_2, value);
    #endif
}

int main() {
    initPins();

    while (true) {
        setDigitalPins(1);
        setAnalogPins(2000);
        delay(1000);

        setDigitalPins(0);
        setAnalogPins(0);
        delay(1000);
    }
}

Compilación y ejecución de la prueba

Compila el programa con el siguiente comando, sustituyendo RPIPLC_XX por el modelo que corresponda a tu unidad (por ejemplo RPIPLC_58):

g++ -o test_outputs test_outputs.cpp -L /usr/local/lib -l rpiplc -I /usr/local/include/rpiplc -D RPIPLC_XX

Los defines de modelo disponibles son: RPIPLC_19R, RPIPLC_21, RPIPLC_38AR, RPIPLC_38R, RPIPLC_42, RPIPLC_50RRA, RPIPLC_53ARR, RPIPLC_54ARA, RPIPLC_57AAR, RPIPLC_57R, RPIPLC_58.

Ejecuta el binario compilado como root:

sudo ./test_outputs

El programa alterna todas las salidas cada segundo. Observa los LED del panel del PLC. Si algún LED no responde, comprueba el cableado y la instalación de la librería.

Recursos y documentación

Buscar en nuestro blog

Cómo verificar las salidas del Raspberry PLC
Boot & Work Corp. S.L, Queralt del Águila Munté 15 de junio de 2026
Compartir esta publicación
Etiquetas

¿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