banner

Blog

Jun 30, 2023

Modbus sobre WLAN (Parte 1): Hardware y programación

El protocolo Modbus es ampliamente utilizado en el sector industrial para la comunicación entre sistemas y controladores. Esto generalmente se hace con la interfaz RS485 probada y verdadera y un cable de cobre convencional. Aquí presentamos un módulo que le permite utilizar el protocolo Modbus a través de una red de área local inalámbrica (WLAN). El módulo está construido alrededor de una placa Espressif NodeMCU equipada con un microcontrolador ESP8266. Una placa base Modbus suplementaria permite trabajar con señales de 24 V, que es un nivel de tensión habitual en el entorno industrial. Para demostrar cómo funciona todo, los autores construyeron un sencillo controlador de puerta de ascensor. La mayoría de los lectores de Elektor probablemente ya estén familiarizados con el módulo Espressif NodeMCU y el IDE de Arduino. Si encaja en esa categoría, puede saltarse esta introducción e ir directamente a la descripción de la placa Modbus TCP. Para todos los demás, esto es lo que necesitan saber en pocas palabras. Este proyecto se basa en un módulo NodeMCU (disponible en la Tienda Elektor). El módulo está equipado con un microcontrolador Espressif ESP8266, que tiene aproximadamente el tamaño de un sello postal y viene con una interfaz WLAN. A pesar de su pequeño tamaño, tiene una gran potencia de procesamiento. Las características clave del microcontrolador ESP8266 se resumen entabla 1.

La placa NodeMCU genera el voltaje de suministro para el ESP8266 y se encarga de la interfaz de programación del microcontrolador.Figura 1muestra una descripción general de la distribución de pines de la placa NodeMCU utilizada en nuestro circuito Modbus.

El IDE de Arduino es muy adecuado para programar la placa NodeMCU. Puede descargar la versión correcta de Arduino IDE para el sistema operativo de su computadora de forma gratuita desde el sitio web de Arduino e instalarla de acuerdo con las instrucciones del sitio. Cuando ejecuta el IDE por primera vez, verá una ventana como la que se muestra en la Figura 2. . El panel de código del programa contiene dos funciones predefinidas. En la parte superior está la función setup(), que se ejecuta solo una vez cuando se inicia el programa y maneja cosas como inicializar las interfaces del microcontrolador, y en la parte inferior está la función loop(), que normalmente contiene el código fuente de su programa. .

La función loop() se ejecuta después de que se completa la función setup(). Cuando el programa llega al final de la función loop(), comienza de nuevo desde el principio. El ESP8266 gestiona la interfaz WLAN entre el final y el reinicio de la función loop(). Esto significa que debe evitar crear bucles infinitos en la función loop(), de lo contrario el ESP8266 inevitablemente fallará. En cambio, el código en la función loop() debe diseñarse para que pueda ejecutarse de forma cíclica. Una gran cantidad de fallas aparentemente misteriosas del ESP8266 se deben al hecho de que el procesador no tiene suficiente tiempo de CPU para administrar el Interfaz WLAN. Si existe la posibilidad de que el código de su programa se ejecute durante un período prolongado, por ejemplo en bucles grandes, puede usar la función yield() o la función delay() para darle al ESP8266 suficiente tiempo para la administración de WLAN. Antes de conectar el módulo NodeMCU en la placa Modbus, debes conectarlo a un puerto USB de tu computadora, pero antes debes hacer algunas cosas para que todo esté listo para funcionar. El ESP8266 no es compatible de serie con el IDE de Arduino, por lo que primero debe actualizar el IDE. Para hacerlo, seleccione Archivo -> Preferencias e ingrese la siguiente URL en el cuadro URL adicionales del Administrador de placa: http://arduino.esp8266.com/stable/package_esp8266com_index.json Haga clic en Aceptar y luego seleccione Herramientas -> Placa... -> para abrir la ventana del Administrador de placas, donde debe buscar ESP8266 y luego instalar las placas comunitarias ESP8266. Después de instalarlas, en Herramientas -> Placa > verá la placa NodeMCU 1.0 (Módulo ESP-E12) y en Herramientas - > Puerto > verá el puerto al que está conectada la placa NodeMCU (/dev/ttyUSBx en Linux o COMx en Windows). Ahora puede comenzar con el primer programa de prueba simple en el módulo NodeMCU. Para ello, abra el programa de ejemplo 'Blink' en Archivo -> Ejemplos -> ESP8266 -> Blink. El programa mostrado enListado 1 Parpadea el LED instalado en la placa ESP8266. El código que enciende y apaga el LED se encuentra en la función loop(). En la función setup() el pin GPIO del LED se configura como salida.

configuración nula() {

pinMode(LED_BUILTIN, SALIDA);

}

bucle vacío() {

escritura digital (LED_BUILTIN, BAJO);

retraso(1000);

escritura digital (LED_BUILTIN, ALTA);

retraso(2000);

}

Para cargar el programa en la placa NodeMCU, haga clic en el ícono Cargar (flecha hacia la derecha). Se necesitan unos segundos para transferir el programa y luego el LED comenzará a parpadear. Esta prueba completa la instalación y configuración del IDE.

Como puede ver en la imagen principal, el módulo NodeMCU está montado en la placa Modbus TCP, que ciertamente parece muy industrial. Todas las entradas y salidas se implementan con bloques de terminales de tornillo enchufables. Esto simplifica el montaje y permite sustituir fácilmente los terminales de tornillo si se dañan. La tarea principal de la placa Modbus TCP es convertir el nivel de señal de 3,3 V de las entradas y salidas del microcontrolador al nivel de 24 V compatible con el entorno industrial. El diagrama esquemático enfigura 3 muestra que cuatro entradas están aisladas galvánicamente del microcontrolador mediante optoaisladores PC814. Estas entradas no están conectadas directamente a la placa del microcontrolador, sino a través de un multiplexor 74HC151. Esta disposición ahorra un pin GPIO, lo que permite incorporar al circuito un sensor DHT11 para medir temperatura y humedad. Esto significa que la placa Modbus también se puede utilizar para tareas sencillas de control de HVAC.

Las etapas de salida se implementan con componentes HITFET BSP76 (Figura 4 ). No se trata de simples MOSFET de potencia, sino de circuitos integrados que proporcionan funciones de protección integradas, como protección contra sobretensión, limitación de corriente y protección contra sobretemperatura, para estos componentes de conmutación electrónicos. Esto significa que puedes conmutar cargas resistivas, inductivas o capacitivas sin ningún problema.

Además de las entradas y salidas digitales, la placa Modbus TCP tiene una entrada analógica y una salida analógica. Ambos puertos analógicos funcionan con el rango de voltaje estándar de la industria de 0 a 10 V. En la entrada analógica, el divisor de voltaje R14/R17 reduce el voltaje de entrada a un máximo de 3,3 V. Esta entrada no está aislada galvánicamente, pero sí C7, D10 y D11 proporciona cierta protección contra picos y sobretensiones. Las resistencias en serie R14 y R19 limitan la corriente de entrada para evitar que los diodos se conviertan en humo si algo sale mal en la entrada. En la salida analógica, IC3 (un amplificador operacional de uso general LM7301 con capacidad de riel a riel en ambas entradas y salida) aumenta el voltaje de salida del NodeMCU DAC. La ganancia del opamp se establece en 3 mediante las resistencias R15 y R16. Este amplificador operacional se alimenta desde el riel de suministro de 24 V. El convertidor CC/CC Recom merece una mención especial. Convierte el voltaje de suministro de 24 V al nivel de 5 V requerido para alimentar el módulo NodeMCU. La eficiencia del convertidor CC/CC supera con creces el 90% y su uso es muy versátil. Por ejemplo, también se puede utilizar para generar un voltaje de suministro negativo para amplificadores operacionales. Sin duda merece la pena echar un vistazo a la hoja de datos del convertidor CC/CC. Se instala un diodo 1N4007 directamente en la entrada de 24 V para proteger el circuito contra la conexión de voltaje inverso. Los archivos Gerber para la fabricación de PCB se pueden descargar desde github. El autor puede conseguir el tablero desnudo o completamente ensamblado y listo para usar.

Para mostrar cómo el módulo Modbus puede realizar una tarea industrial típica, los autores utilizaron un modelo de puerta de ascensor de la conocida tienda online china (Figura 5 ). La puerta se abre y se cierra mediante dos pulsadores. Las posiciones finales de la puerta se detectan mediante dos detectores de proximidad capacitivos. El motor que abre y cierra la puerta es accionado por un circuito de puente H que consta de dos relés de potencia.

El programa de control se muestra enListado 2 . El programa primero define nombres mnemotécnicos para las entradas y salidas del circuito. Los pines de E/S individuales se inicializan como entradas y salidas en la función setup(). A esto le siguen las funciones input() y output(), que facilitan un poco el acceso a los pines de E/S. El programa principal se encuentra la función loop(), donde se encienden o apagan las salidas para accionar el motor dependiendo de los botones y finales de carrera. El programa en la función loop() puede ejecutarse repetitivamente. Si desea ver la puerta del ascensor en acción, simplemente mire el vídeo de YouTube [6].

#definir A1 16

#definir A2 5

#definir A3 19

#definir A4 0

#definir MUXA 12

#definir MUXB 13

#definir MUXY 14

#definir E1 0

#definir E2 1

#definir E3 2

#definir E4 3

configuración nula() {

pinMode(A1, SALIDA);

pinMode(A2, SALIDA);

pinMode(A3, SALIDA);

pinMode(A4, SALIDA);

pinMode(MUXA, SALIDA);

pinMode(MUXB, SALIDA);

modopin(MUXY, ENTRADA);

}

entrada booleana(int i){

escritura digital(MUXA,(i&1));

escritura digital(MUXB,(i&2)>>1);

retraso(1);

devolver lectura digital (MUXY);

}

salida nula (int i, int v) {

escritura digital(i,v);

}

bucle vacío() {

if(entrada(E4)& !entrada(E1)){salida(A1,ALTO);}

if(entrada(E3)&!entrada(E2)){salida(A2,ALTO);}

si(entrada(E1)){salida(A1,BAJO);}

si(entrada(E2)){salida(A2,BAJO);}

}

Aunque el controlador de la puerta del ascensor en funcionamiento es una buena demostración, no hace justicia al verdadero potencial de la placa Modbus y el módulo WLAN. Esto se abordará en la segunda entrega de este artículo, donde abordaremos el protocolo Modbus y hablaremos sobre qué software puede utilizar para comunicarse a través del bus. También le mostraremos cómo configurar el módulo Modbus.

Josef Bernhardt se interesó desde temprana edad por la electrónica. Construyó su primera radio de cristal a los doce años y continuó con otros circuitos. Comenzó a adquirir experiencia en programación en la década de 1980 con el Commodore VC20, y también conoce la programación en lenguaje ensamblador en el 8088. Puede recordar más de 30 años de evolución de la electrónica en la Universidad de Ratisbona, donde trabajó en el campo del desarrollo electrónico y de software. Utilizando su propia planta de producción SMD, también implementa proyectos electrónicos para sus clientes. Martin Mohr nació en la era de las memorias de núcleo magnético y los interruptores Strowger, lo que le permitió experimentar personalmente toda la evolución de la tecnología informática moderna. Su fascinación por todo lo que parpadea se remonta a su juventud y se vio reforzada por su formación en electrónica. Después de completar sus estudios de informática, trabajó principalmente en el desarrollo de aplicaciones Java, pero la Raspberry Pi reavivó su pasión por la electrónica.

tabla 1Figura 1Figura 2Listado 1figura 3Figura 4Figura 5Listado 2Sobre los autores
COMPARTIR