Reconexión Ethernet del PLC

Reconexión del PLC industrial Arduino con el servidor
10 de julio de 2019 por
Reconexión Ethernet del PLC
Boot & Work Corp. S.L., Quesada Dani Salvans

Introducción

Este post muestra cómo reconectar tu PLC Arduino al servidor al que está conectado habitualmente. Esta solución funciona para diferentes tipos de problemas relacionados; por un lado, si el servidor se inicia más tarde que el controlador Arduino y el controlador PLC muestra claros signos de errores de conexión y, por otro lado, si el PLC industrial pierde la conexión con el servidor en cualquier momento.


Solución

Código

/*
   Copyright (c) 2019 Boot&Work Corp., S.L. All rights reserved
   This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ #if defined(MDUINO_PLUS)
#include <Ethernet2.h>
#else
#include <Ethernet.h>
#endif // PLC MAC address
byte mac[] = {0xBE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress plcAddress(10, 10, 10, 2); // Server IP address and TCP port
IPAddress serverAddress(10, 10, 10, 1);
const uint16_t serverPort = 6543; // Ethernet client
EthernetClient client; ////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(9600L);
Serial.println("ethernet-reconnect started"); Ethernet.begin(mac, plcAddress); Serial.print("IP address: ");
Serial.println(Ethernet.localIP());
} ////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
// Update client connection status
updateConnectionStatus();
} ////////////////////////////////////////////////////////////////////////////////////////////////////
void updateConnectionStatus() {
static uint32_t lastReconnectionTime = 0UL; // Reconnect to server if not connected
if (!client.connected()) {
// Prevent fast reconnections
if (millis() - lastReconnectionTime > 1000) {
Serial.println("Client is not connected to server");
reconnect(); // Update last reconnection time to prevent fast tries
lastReconnectionTime = millis();
}
}
} ////////////////////////////////////////////////////////////////////////////////////////////////////
void reconnect() {
// Force client disconnection
client.stop(); // Connect to server
Serial.println("Trying to connect...");
client.connect(serverAddress, serverPort); // Check connection status
if (client.connected()) {
Serial.println("Client connected to server");
} else {
Serial.println("Impossible to connect to server");
}
}


Explicación

Echando un vistazo al código de la solución podemos ver que, en primer lugar, hay una función que actualiza el estado de la conexión cada momento, reconectando al servidor si no está conectado. Esta función intenta reconectarse al servidor cada 1 segundo, pero este es un tiempo arbitrario y puedes cambiarlo como quieras (es bueno poner un tiempo de al menos 1 segundo para no sobrecargar la conexión al servidor). Este utiliza otra función llamada "reconnect()" que fuerza la desconexión del cliente, se conecta al servidor y comprueba el estado de la conexión.

Cómo cargar este código

Si quieres cargar este código en tu controlador Arduino tienes que seguir estos pasos:
 1. Selecciona Herramientas > Placa > Familia M-Duino (o tu shield de trabajo pero teniendo en cuenta que tiene que tener Ethernet o el módulo Wifi). 2.-Comprueba que las placas Arduino de Industrial shields están correctamente instaladas.

Paso 1 - Cargar el código
  

2. Selecciona Herramientas > Industrial shields > M-Duino 21+ (o tu modelo de Arduino Automation shield que funcione pero teniendo en cuenta que tiene que tener Ethernet o el módulo Wifi).

 
Paso 2 - Cargar el código


3.-Selecciona Herramientas > Puerto > COM65 (o el puerto donde tengas conectado tu dispositivo).

Paso 3 - Cargar el código


4.-Subir el programa. Pulsa sobre la flecha situada en la parte superior izquierda de la ventana.

Paso 4 - Cargar el código


5. Si todo funciona correctamente, tus problemas deberían estar resueltos como vimos en los apartados anteriores y, si quieres comprobar todos los procesos puedes ver los mensajes de confirmación (como "ethernet-reconnect started", "IP address: ", "Cliente conectado al servidor", etc.) en el monitor serie. El icono del monitor serie se encuentra en la esquina superior derecha de la ventana (asegúrese de configurar la tasa de baudios a 9600 para sincronizarla con la configuración del código).

Paso 5 - Cargar el código

 

Buscar en nuestro blog

Reconexión Ethernet del PLC
Boot & Work Corp. S.L., Quesada Dani Salvans 10 de julio de 2019
Compartir

¿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.


Industrial PLC comparison >>>