Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conectar un WAGO PFC200 a Ubidots usando Codesys
Conectar un WAGO PFC200 a Ubidots usando Codesys

Esta guía técnica aborda los pasos necesarios para conectar tu WAGO PFC200 a Ubidots usando Codesys.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

Requisitos

1. Configuración de Ubidots

  • Dirígete a la sección "dispositivos" en tu cuenta de Ubidots.

  • Haz clic en el botón "+" para crear el dispositivo que recibirá los datos.

  • Selecciona "Dispositivo en blanco".

  • Establece un nombre de dispositivo según tus requisitos. Luego, la etiqueta del dispositivo se configurará automáticamente.

  • Deberías ver el nuevo dispositivo sin variables por el momento.

  • Haz clic en el dispositivo recién creado.

  • Copia la Etiqueta API del dispositivo, ID y Token en el portapapeles. Los necesitarás más tarde.

  • Dado que la seguridad es importante, querrás cifrado TLS para asegurar los mensajes que van a la nube. Dirígete al siguiente enlace; allí encontrarás el certificado PEM de Ubidots.

  • Copia todo el contenido en un editor de texto y guárdalo como "root.crt".

2. Configuración del PFC200

  • Inicia sesión en el WBM de tu PFC200 usando cualquier navegador web de tu elección. Escribe la dirección IP de tu controlador PFC200 en la barra de búsqueda.

  • Si se te piden credenciales, ingresa las predeterminadas:

    • Usuario: admin

    • Contraseña: wago

  • Asegúrate de que el firmware de tu PFC200 sea 04.01.10(23) o superior.

  • Dirígete a la pestaña de Configuración para configurar el dispositivo para conexiones salientes estableciendo un DNS como se muestra a continuación:

  • Verifica que el reloj del PFC200 esté configurado en la zona horaria correcta.

  • Verifica que puedes acceder al PFC200 iniciando una sesión SSH en el dispositivo. Usa la misma dirección IP y credenciales mencionadas anteriormente.

  • Desde el dispositivo, haz un ping a www.google.com para verificar el estado de la conectividad a Internet. Si se recibe una respuesta con las estadísticas de la conexión, el dispositivo está configurado correctamente. La sesión SSH puede finalizar ahora.

  • Ve a la sección de Conectividad a la nube bajo la pestaña de Configuración y luego selecciona Conexión 1. Edita los siguientes ajustes como muestra el GIF:

    • En Plataforma en la nube selecciona "MQTT Anycloud".

    • Configura el nombre de host como industrial.api.ubidots.com

    • Marca la casilla TLS y configura el número de puerto en 8883.

    • Introduce el ID del dispositivo de Ubidots obtenido anteriormente en el campo Client ID.

    • Introduce el Token completo de Ubidots en el campo User.

    • Deja el campo Password vacío.

    • En el ajuste de Protocolo de datos, selecciona Native MQTT.

  • Habilita FTP a través de la pestaña de Puertos y Servicios.

  • Inserta el certificado root.crt en la ruta /etc/ssl/certs/ dentro del controlador WAGO. Puedes hacerlo mediante FTP en el WAGO o utilizando SCP.

  • Haz clic en el botón "Enviar" y luego reinicia el Controlador WAGO PFC200 haciendo clic en el botón "Reiniciar" en la esquina superior derecha del WBM.

  • Después de que se complete el reinicio, visita la página "Estado de la conexión" en el WBM. Entonces, deberías ver la conexión en funcionamiento.

3. Configuración de Codesys

  • Dirígete al sitio web de WAGO para descargar la versión más reciente de Codesys. Una vez descargado, instálalo y lánzalo.

  • Crea un nuevo proyecto, selecciona Proyecto vacío y asígnale un nombre.

  • Agrega el WAGO PFC200 al proyecto haciendo clic derecho en el proyecto recién creado y seleccionando la opción Agregar dispositivo:

  • Busca el Controlador WAGO PFC200 y luego haz clic en Agregar dispositivo.

Add-Device-in-Codesys
  • Una vez agregado, el proyecto se verá así:

  • Crea un POU haciendo clic derecho en la opción aplicación en tu proyecto, luego selecciona Agregar objeto → POU. Asígnale el nombre de Main.

  • Crea una Configuración de Tarea haciendo clic en aplicación → Agregar objeto → Configuración de tarea. Deja el nombre predeterminado para esto y luego haz clic en el botón Agregar.

  • Haz clic en el botón Agregar llamada y agrega Main en la ventana emergente.

POU-Task-Config
  • Nota que tu proyecto tiene dos nuevas pestañas:

    • Main

    • Tarea

  • Configura una Puerta de enlace e intenta conectarte en línea haciendo clic en la opción "Online" "Login". Codesys te pedirá que crees una "Ruta activa".

  • Escanea la red haciendo clic en el botón "Escanear red" y selecciona el PFC200. Cuando se te pidan un nombre de usuario y una contraseña, usa las credenciales mencionadas anteriormente en esta guía. Ahora el dispositivo está en línea.

  • Vuelve a desconectarte y luego ve al Administrador de Bibliotecas.

  • Haz clic en "Agregar Biblioteca" e instala WagoAppCloud y WagoAppJSON.

4. Configuración de MQTT

  • En el explorador de proyectos, selecciona el bloque de función FbPublishMQTT_2.

  • La siguiente es la descripción del bloque de función FbPublishMQTT_2:

    • sTopic es una cadena que representa el tema MQTT: /v2.0/devices/{DEVICE_LABEL}’

    • eQualityOfService indica la cantidad de veces que se publicará un mensaje al broker MQTT (el broker de Ubidots en este caso). Establécelo en 1.

    • dwSize es una variable dinámica que almacena la longitud en bytes de la cadena de mensaje que se enviará al broker.

    • aData es el puntero de los datos de la carga útil JSON que se publicarán en el broker. Los datos deben copiarse de la cadena JSON a esta matriz aData.

    • xTrigger actuará como el disparador para comenzar a publicar datos.

    • xBusy, xError y oStatus son indicadores de resolución de problemas.

  • Crea un temporizador para actuar como el intervalo de publicación, que, en este caso, es cada 1 segundo.

  • Copia el siguiente código en el editor de código del proyecto.

TimerOn(IN := TRUE, PT := T#1S);
sPayload := '{"var1": 23, "var2": 46, "var3": 1}';

IF TimerOn.Q THEN
xTrigger := TRUE;
TimerOn(IN := FALSE);

IF NOT oFbPublishMQTT_2.xBusy THEN

// Copy payload string
dwBytesCount := Length(sPayload);
MemCopy(pDest := ADR(aBuffer), pSource := ADR(sPayload), udiSize := dwBytesCount);

// Trigger the transmission
xTrigger := TRUE;
ELSE
// Busy statistics counter
dwBusyCounter := dwBusyCounter + 1;
END_IF

IF oFbPublishMQTT_2.xError THEN
// Error statistics counter
dwErrorCounter := dwErrorCounter + 1;
END_IF

END_IF

oFbPublishMqtt_2(sTopic:= '/v2.0/devices/joes_test',
eQualityOfService:= 1,
dwSize := dwBytesCount,
aData := aBuffer,
xTrigger := xTrigger);
  • Crea el programa que inicializará el bloque de función de publicación MQTT. Copiar el siguiente código en el editor de código del proyecto lo hará:

PROGRAM Main
VAR
oFbPublishMQTT_2 : WagoAppCloud.FbPublishMQTT_2(eConnection := eConnectionId.Connection1);
aBuffer : ARRAY[0..1999] OF BYTE;
dwBytesCount : DWORD;
sPayload : STRING(1024);
xTrigger : BOOL;
TimerOn: TON;
dwBusyCounter: DWORD;
dwErrorCounter: DWORD;
END_VAR
  • Al final, debería verse así:

  • El siguiente paso es crear el mensaje JSON que se publicará. Para hacerlo, necesitarás el bloque de función Fb_JSON_Writer_02 de la biblioteca WagoAppJSON previamente instalada. A continuación, se muestra la descripción de los componentes de este bloque de función:

    • sJSON_BaseFrame albergará la plantilla de la cadena JSON. Cualquier variable dinámica tendrá el marcador de posición '#Parameter' dentro de la cadena de plantilla.

    • aParameterValues es una matriz de todas las variables que están representadas en la cadena de plantilla como #Parameter. Dado que esta matriz es una cadena, deberás convertir tus valores en cadenas antes de ponerlos en la matriz.

    • xTrigger hará que el bloque de función JSON se dispare y cree una cadena JSON representada por la cadena de plantilla y la matriz de valores.

    • sOutput será el resultado final de la cadena JSON.

  • Para crear la carga útil del mensaje JSON, es importante tener en cuenta que el tipo es una cadena con el formato de comillas alrededor del nombre de la variable y nada alrededor del valor, así que sigue este formato:

'{"var_name_1": var_1_val, "var_name_2": var_2_val}'
  • Con eso en mente, la declaración de variables que compone el código de configuración para la publicación MQTT y el escritor JSON es como se muestra a continuación:

PROGRAM Main
VAR

//Variables for MQTT publish
oFbPublishMQTT_2 : WagoAppCloud.FbPublishMQTT_2(eConnection := eConnectionId.Connection1);
aBuffer : ARRAY[0..1999] OF BYTE;
dwBytesCount : DWORD;

dwBusyCounter: DWORD;
dwErrorCounter: DWORD;
xTrigger : BOOL;

//Variables for MQTT subscribe
oFbSubMQTT_2 : WagoAppCloud.FbSubscribeMQTT_2(eConnection := eConnectionId.Connection1);
aSubBuffer : ARRAY[0..1999] OF BYTE;
xDataReceived: BOOL;
dwSubSize: DWORD;

//Variables for JSON_Writer
oFbJSON : WagoappJSON.Fb_JSON_Writer_02;
MyTemplateString : STRING(JSON_MAX_STRING):= '{"val1": #Parameter, "val2" : #Parameter, "val3": #Parameter}'; //String template
MyValueArray : ARRAY[0..2] OF STRING; //Array of values, must start at index 0
xJSONTrigger : BOOL;

value_var1 : INT; //Raw values to be transmitted. Must be converted to string first.
value_var2 : INT;
value_var3 : INT;

TimerOn: TON;
sPayload : STRING(2000);

END_VAR
  • Configura el disparador JSON y, en general, el flujo del código como sigue:

TimerOn(IN := TRUE, PT := T#1S);

value_var1 := 40;
value_var2 := 50;
value_var3 := 2;

MyValueArray[0] := INT_TO_STRING(value_var1);
MyValueArray[1] := INT_TO_STRING(value_var2);
MyValueArray[2] := INT_TO_STRING(value_var3);


IF TimerOn.Q THEN
xTrigger := TRUE;
xJSONTrigger := TRUE;
TimerOn(IN := FALSE);

IF NOT oFbPublishMQTT_2.xBusy THEN

// Copy payload string
dwBytesCount := Length(sPayload);
MemCopy(pDest := ADR(aBuffer), pSource := ADR(sPayload), udiSize := dwBytesCount);

// Trigger the transmission
xTrigger := TRUE;

ELSE
// Busy statistics counter
dwBusyCounter := dwBusyCounter + 1;
END_IF

IF oFbPublishMQTT_2.xError THEN
// Error statistics counter
dwErrorCounter := dwErrorCounter + 1;
END_IF

END_IF

oFbJson(sJSON_BaseFrame := MyTemplateString,
aParameterValues := MyValueArray,
xTrigger := xJSONTrigger,
sOutput := sPayload);

oFbPublishMqtt_2(sTopic:= '/v2.0/devices/joes_test',
eQualityOfService:= 1,
dwSize := dwBytesCount,
aData := aBuffer,
xTrigger := xTrigger);
  • Ve a la barra de herramientas y haz clic en Online → Login. Esto ejecutará el programa y enviará los datos a Ubidots.

  • Puedes consultar el repositorio oficial de este proyecto en el siguiente enlace.

¿Ha quedado contestada tu pregunta?