Resumen

El siguiente instructivo guiará al lector por una serie de pasos necesarios para conectar el OPTA PLC de Arduino al servicio de telemetría en la nube del mismo fabricante.

Objetivos

  • Configurar dispositivos en la nube de Arduino.
  • Establecer un flujo de trabajo en el Opta.
  • Programar un sketch en el “Arduino PLC IDE”.

Requisitos de hardware

  • Opta WiFi.
  • Cable USB C.
  • Sensor análogo (opcional).
  • Requisitos de software
  • Arduino PLC IDE.
  • Cuenta en Arduino Cloud.

Entendiendo el proceso

El sistema a grandes rasgos esta compuesto por 3 elementos:

  1. Firmware PLC: Este se encarga de leer y escribir todas las entradas digitales y análogas del PLC, luego las disponibiliza como un recursos compartidos del PLC.
  1. Sketch de Arduino: Este se encarga de la comunicación con la Nube a través de la red WiFi, toma los valores compartidos disponibles en el PLC y los envía al servidor online.
  1. Arduino IoT Cloud: Recibe los datos transmitidos por el PLC y los muestra en un tablero, adicionalmente envía al PLC el valor de un “botón” digital utilizado para controlar los actuadores del PLC.

Arduino Cloud

Lo primero es configurar un dispositivo en nuestra cuenta de Arduino Cloud y un tablero para visualizar los datos, para ver mas detalles de como funciona la plataforma de Arduino en la nube, dirígete a este enlace.

Crea una “Thing”

En Arduino Cloud crea una nueva “Thing” en la cual crearás 3 variables y le asociaras un dispositivo. Crea 3 variables como se muestran en la figura 1.

 Figura 1. Variables

Luego deberás asociar un dispositivo a tu cuenta Arduino, para esto selecciona “Select Device” en la sección de “Associated Devices” y sigues los pasos del asistente para detectar el PLC Opta conectado a tu computador.

 

Figura 2. Buscando dispositivos en el computador.

Figura 3. Dispositivo detectado.

Crea un tablero

En el menú inicio de Arduino cloud selecciona el menú de “Dashboards” para crear una nuevo tablero.

En dicho tablero agrega 4 widgets:

  • 1 switch.
  • 2 values.
  • 1 gráfica.

Cada uno de estos widgets los asociaras a cada una de las variables correspondientes, el switch para el botón, cada uno de los values para el contador y el análogo, y la gráfica para el contador.


Figura 4. Enlace de variable con widget.

Firmware del PLC

Comparte las variables

Lo primera es crear los recursos que se compartirán desde el firmware del PLC hacia el sketch de Arduino.

En la sección de Recursos del IDE PLC busca la opción de “Shared variables”, Resources > Opta > Shared variables .

Figura 5. Variables compartidas de salida y de entrada.

En la sección de “Inputs” configura una variable compartida para el botón, ya que esta es una variable cuyos valores serán “recibidos” por el PLC, puedes usar cualquier nombre que consideres conveniente y el tipo de variable debe ser BOOL.

Figura 6. Variables compartidas de entrada.

En la sección de “Outputs” configura dos variables, una para el contador y otra para la señal análoga, ya que estos son los valores que serán “enviados” por el PLC, puedes usar cualquier nombre que consideres conveniente, ambos son de tipo INT.

Figura 7. Variables compartidas de salida.

Configuración de puerto análogo

En el sección de Recursos del IDE PLC busca la opción “Programmable Inputs”, Resources > Opta > Local IO Mapping > Programmable Inputs.

Configura una entrada análoga, puedes usar cualquier nombre que consideres conveniente, la variable es de tipo UINT.

Figura 8. Configuración de entradas programables.

Configuración de LED de usuario

En el sección de Recursos del IDE PLC busca la opción “LED Outputs”, Resources > Opta > Local IO Mapping > LED Outputs.

Configura un LED, puedes usar cualquier nombre que consideres conveniente, la variable es de tipo BOOL.

Librerías

Ya que el PLC se va a encargar de ejecutar el sketch de Arduino, este debe contar con las librerías necesarias para dicho sketch.

En el sección de Recursos del IDE PLC busca la opción “Sketch Libraries”, Resources > Opta > Sketch > Libraries.

Figura 9. Librerías necesarias para la integración con la nube de Arduino.

Programa del PCL

Adicional al Sketch, en el PLC se estará corriendo un programa, al cual puedes acceder en el Proyecto del PLC, Project > Tasks > Fast > main.

El programa del PLC realizará los siguientes procesos:

  1. Ejecutará un contador lineal y almacenará en “cnt“, y pasará los datos a “out_counter” (variables compartidas).
  1. Reiniciará el valor del contador cuando alcance 2500 en su valor.
  1. Actualizará el estado del LED programable por el usuario de Opta™ basado en “in_cloudButton” (variables compartidas).
  1. Actualizará la lectura analógica en el puerto número uno definido como “analog01” y la pasará a “out_analog01” (variables compartidas).
cnt := cnt + 1;
out_counter := cnt;

IF out_counter >= 2500 THEN
	cnt := 0;
END_IF;

userLed := in_cloudButton;

out_analog01 := analog01;

Sketch de Arduino

En los Recursos del IDE PLC busca la opción “Sketch”, Resources > Opta > Sketch.

Pega el siguiente código en el editor de texto.

#include <ArduinoIoTCloud.h>

const char SSID[]     = "YOUR SSID";    // Network SSID (name)
const char PASS[]     = "YOUR PASSWORD";    // Network password (use for WPA, or use as key for WEP)
void onCloudButtonChange();
float analogo;
int contador;
bool boton;
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500); 
  initProperties();
  // Connect to Arduino Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
 */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}
void loop() {
  ArduinoCloud.update();
  
  analogo = PLCOut.out_analog01;
  contador = PLCOut.out_counter;
    
}
void initProperties(){
  ArduinoCloud.addProperty(analogo, READ, ON_CHANGE, NULL);
  ArduinoCloud.addProperty(contador, READ, ON_CHANGE, NULL);
  ArduinoCloud.addProperty(boton, READWRITE, ON_CHANGE, onCloudButtonChange);
}
/*
  Since CloudButton is READ_WRITE variable, onCloudButtonChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onCloudButtonChange()  {
  PLCIn.in_cloudButton = boton;
}

Estas son las partes mas relevantes que debes entender del código

void loop() {
  ArduinoCloud.update();
  
  analogo = PLCOut.out_analog01;
  contador = PLCOut.out_counter;
    
} PLCOut es un objeto que contienen las variables compartidas de salida del PLC, y los atributos de ese objeto son los nombres de las variables creadas en el IDE PLC, dicho atributo modifica las variables “analogo” y “contador”, las cuales deben tener el mismo nombre que las variables creadas en la nube de Arduino.
void onCloudButtonChange()  {
  PLCIn.in_cloudButton = boton;
} Lo mismo para el objeto PCLIn el cual contiene como atributo la variable creada en el IDE PLC, dicho atributo es modificado por la variable “boton”, la cual debe tener el mismo nombre que la variable creada en la nube de Arduino.