Utilidad #
El trabajo con Modbus RTU exige tener un Cliente o Maestro y un Servidor o Esclavo. La frecuencia de intercambio de datos está marcada por el Cliente. El servidor solo proporciona datos o lee datos cuando el cliente se los pide o proporciona. Este intercambio de datos se realiza a través de canales con direcciones únicas que tienen que conocer tanto el Cliente como el Servidor. En microLSB se puede configurar un Esp32 como Servidor.
Una de las posibilidades que ofrece esta modalidad de trabajo es la de usar un microcontrolador como periferia distribuida. Si se conecta con Codesys o TIA Portal, entre otros entornos de programación industrial con runtime para Windows o simulador, se pueden realizar automatizaciones en estos software y visualizar el resultado de las mismas físicamente a través del microcontrolador, que se convierte en los sentidos, brazos y piernas del PC. Es un proceso cada vez mas utilizado, no solo a nivel educativo: Un PC trabajando como SoftPLC, es decir, se convierte el ordenador a nivel de software en un PLC, y se le añade por Modbus RTU comunicación con el microcontrolador, que pasa a ser el Hardware de nuestro PLC «virtual».
Modbus RTU en microLSB #
En microLSB se puede crear de cero una lista de canales de muy diversas características (principalmente en cuanto al tipo de datos que pueden transmitir), para realizar una comunicación Modbus RTU personalizada. Sin embargo, para agilizar el proceso, se facilitan una serie de bloques que contienen una propuesta de comunicación preestablecida. Esto significa que para conectar nuestro microcontrolador con un Cliente, debemos configurar dicho Cliente con los mismos canales y en las mismas direcciones ya establecidas en los bloques predefinidos en microLSB.
En el apartado Modbus RTU / Preconfigurado se encuentran los bloques para trabajar con esta modalidad.
Los canales preconfigurados hasta la fecha de elaboración de este manual son 32, que incluyen entradas y salidas digitales y analógicas, PWM, cuatro canales más para envío de medidas de sensores y otros datos, y otros cuatro para enviar órdenes a actuadores o transferir otro tipo de datos.
La configuración de los pines como entradas o salidas digitales, analógicas y PWM se hace con el siguiente bloque único:
Cada pin tiene un desplegable en el que se puede seleccionar la función que se le asigna a ese pin. Si se deja la opción ND (No Determinado), ese pin no tendrá ningún uso.
Cada Servidor tiene que tener una dirección única. En este caso se configura en la parte superior del bloque. La que aparece por defecto, que también es la que se establece por defecto en los diferentes Clientes que se facilitan, es la número 8.
En el siguiente enlaces se encuentra la información y los recursos necesarios para cargar un programa desde microLSB en un microcontrolador:
En este ejemplo se realiza la siguiente configuración:
- Entradas digitales: GPIO2 y GPIO12
- Salida digital: GPIO 15
Si se desean intercambiar otro tipo de datos, se pueden usar los bloques de escribir y leer:
- Enviar datos (4 canales):
Ejemplo de envío de temperatura leída con el sensor ds18b20 conectado al GPIO 14:
- Lectura de datos (4 canales):
Ejemplo de control de un servo:
El programa ejemplo completo, quedaría de la siguiente forma:
La comunicación Modbus RTU es compatible con otras comunicaciones también disponibles, como Wifi por MQTT, que se mostrará en ejemplos mas avanzados.
Pinout de modelos Esp32 #
La distribución de pines presentada en las tablas anteriores, se puede ver sobre la placa Microdesys Esp32 a continuación. Sin embargo, es posible utilizar cualquier otra placa basada en el chip Esp32.
Lo presentamos también en la misma dirección en la que está preparado el bloque, pero volvemos a destacar que se puede usar un Esp32 genérico:
Direcciones Modbus RTU preconfiguradas #
La lista de canales, junto con sus direcciones y usos, se indican a continuación por funcionalidad del GPIO.
GPIO | Tipo de canal | Dirección Modbus | Offset | Tamaño | Decimal | Bit | Nombre | Dir. Memoria |
26 | 3 | 40001 | 0 | bit | 1 | 0 | entradasDig | I0.0 |
33 | 3 | 40001 | 0 | bit | 2 | 1 | entradasDig | I0.1 |
32 | 3 | 40001 | 0 | bit | 4 | 2 | entradasDig | I0.2 |
13 | 3 | 40001 | 0 | bit | 8 | 3 | entradasDig | I0.3 |
25 | 3 | 40001 | 0 | bit | 16 | 4 | entradasDig | I0.4 |
14 | 3 | 40001 | 0 | bit | 32 | 5 | entradasDig | I0.5 |
27 | 3 | 40001 | 0 | bit | 64 | 6 | entradasDig | I0.6 |
4 | 3 | 40001 | 0 | bit | 128 | 7 | entradasDig | I0.7 |
16 | 3 | 40001 | 0 | bit | 256 | 8 | entradasDig | I1.0 |
17 | 3 | 40001 | 0 | bit | 512 | 9 | entradasDig | I1.1 |
5 | 3 | 40001 | 0 | bit | 1024 | 10 | entradasDig | I1.2 |
23 | 3 | 40001 | 0 | bit | 2048 | 11 | entradasDig | I1.3 |
19 | 3 | 40001 | 0 | bit | 4096 | 12 | entradasDig | I1.4 |
18 | 3 | 40001 | 0 | bit | 8192 | 13 | entradasDig | I1.5 |
36 | 3 | 40002 | 1 | bit | 1 | 0 | entradasDig_1 | I2.0 |
39 | 3 | 40002 | 1 | bit | 2 | 1 | entradasDig_1 | I2.1 |
34 | 3 | 40002 | 1 | bit | 4 | 2 | entradasDig_1 | I2.2 |
35 | 3 | 40002 | 1 | bit | 8 | 3 | entradasDig_1 | I2.3 |
21 | 3 | 40002 | 1 | bit | 16 | 4 | entradasDig_1 | I2.4 |
22 | 3 | 40002 | 1 | bit | 32 | 5 | entradasDig_1 | I2.5 |
2 | 3 | 40002 | 1 | bit | 64 | 6 | entradasDig_1 | I2.6 |
12 | 3 | 40002 | 1 | bit | 128 | 7 | entradasDig_1 | I2.7 |
15 |
- Salidas digitales
GPIO | Tipo de canal | Dirección Modbus | Offset | Tamaño | Decimal | Bit | Nombre | Dir. Memoria |
26 | 16 | 40003 | 2 | bit | 1 | 0 | salidasDig | Q0.0 |
33 | 16 | 40003 | 2 | bit | 2 | 1 | salidasDig | Q0.1 |
32 | 16 | 40003 | 2 | bit | 4 | 2 | salidasDig | Q0.2 |
13 | 16 | 40003 | 2 | bit | 8 | 3 | salidasDig | Q0.3 |
25 | 16 | 40003 | 2 | bit | 16 | 4 | salidasDig | Q0.4 |
14 | 16 | 40003 | 2 | bit | 32 | 5 | salidasDig | Q0.5 |
27 | 16 | 40003 | 2 | bit | 64 | 6 | salidasDig | Q0.6 |
4 | 16 | 40003 | 2 | bit | 128 | 7 | salidasDig | Q0.7 |
16 | 16 | 40003 | 2 | bit | 256 | 8 | salidasDig | Q1.8 |
17 | 16 | 40003 | 2 | bit | 512 | 9 | salidasDig | Q1.9 |
5 | 16 | 40003 | 2 | bit | 1024 | 10 | salidasDig | Q1.10 |
23 | 16 | 40003 | 2 | bit | 2048 | 11 | salidasDig | Q1.11 |
19 | 16 | 40003 | 2 | bit | 4096 | 12 | salidasDig | Q1.12 |
18 | 16 | 40003 | 2 | bit | 8192 | 13 | salidasDig | Q1.13 |
36 | ||||||||
39 | ||||||||
34 | ||||||||
35 | ||||||||
21 | 16 | 40004 | 3 | bit | 1 | 0 | salidasDig_1 | Q2.0 |
22 | 16 | 40004 | 3 | bit | 2 | 1 | salidasDig_1 | Q2.1 |
2 | 16 | 40004 | ||||||
12 | 16 | 40004 | ||||||
15 | 16 | 40004 | 3 | bit | 4 | 2 | salidasDig_1 | Q2.2 |
- Entradas analógicas (Resolución 10bits)
GPIO | Tipo de canal | Dirección Modbus | Offset | Tamaño | Nombre | Dir. Memoria |
33 | 3 | 40006 | 5 | WORD | AI33 | IW3 |
32 | 3 | 40005 | 4 | WORD | AI32 | IW2 |
36 | 3 | 40007 | 6 | WORD | AI36 | IW4 |
39 | 3 | 40008 | 7 | WORD | AI39 | IW5 |
34 | 3 | 40009 | 8 | WORD | AI34 | IW6 |
35 | 3 | 40010 | 9 | WORD | AI35 | IW7 |
- Salidas PWM (Resolución 8 bits)
GPIO | Tipo de canal | Dirección Modbus | Offset | Tamaño | Nombre | Dir. Memoria |
26 | 16 | 400011 | 10 | WORD | PWM26 | QW2 |
33 | 16 | 400012 | 11 | WORD | PWM33 | QW3 |
32 | 16 | 400013 | 12 | WORD | PWM32 | QW4 |
13 | 16 | 400014 | 13 | WORD | PWM13 | QW5 |
25 | 16 | 400015 | 14 | WORD | PWM25 | QW6 |
14 | 16 | 400016 | 15 | WORD | PWM14 | QW7 |
27 | 16 | 400017 | 16 | WORD | PWM27 | QW8 |
4 | 16 | 400018 | 17 | WORD | PWM4 | QW9 |
16 | 16 | 400019 | 18 | WORD | PWM16 | QW10 |
17 | 16 | 400020 | 19 | WORD | PWM17 | QW11 |
5 | 16 | 400021 | 20 | WORD | PWM5 | QW12 |
23 | 16 | 400022 | 21 | WORD | PWM23 | QW13 |
19 | 16 | 400023 | 22 | WORD | PWM19 | QW14 |
18 | 16 | 400024 | 23 | WORD | PWM18 | QW15 |
15 | 16 | 400025 | 24 | WORD | PWM15 | QW16 |
- Direcciones de envío de datos (sensores, lecturas Wifi, etc.)
GPIO | Tipo de canal | Dirección Modbus | Offset | Tamaño | Nombre | Dir. Memoria |
S1 | 3 | 400026 | 25 | WORD | SENSOR1 | IW8 |
S2 | 3 | 400027 | 26 | WORD | SENSOR1 | IW9 |
S3 | 3 | 400028 | 27 | WORD | SENSOR1 | IW10 |
S4 | 3 | 400029 | 28 | WORD | SENSOR1 | IW11 |
- Direcciones de lectura de datos (actuadores, lecturas Wifi, etc.)
GPIO | Tipo de canal | Dirección Modbus | Offset | Tamaño | Nombre | Dir. Memoria |
AC1 | 6 | 400030 | 29 | WORD | ACTUADOR1 | QW17 |
AC2 | 6 | 400031 | 30 | WORD | ACTUADOR2 | QW18 |
AC3 | 6 | 400032 | 31 | WORD | ACTUADOR3 | QW19 |
AC4 | 6 | 400033 | 32 | WORD | ACTUADOR4 | QW20 |
Tutorial en vídeo del proceso #
Software industrial como Cliente Modbus RTU #
Trabajar con Modbus RTU como Cliente permite usar un microcontrolador como Periférico del PC, que puede estar actuando como SoftPLC. Por ejemplo, codesys tiene un runtime para Windows con una versión demo funcional de 2 horas que permite realizar este tipo de trabajos de forma gratuita. Con PLCSim de TIA Portal, puedes llevar a cabo un proceso similar desde su entorno.
En este apartado tienes toda la información para llevar a cabo este modo de trabajo en forma de artículo.