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.

GPIOTipo de canalDirección ModbusOffsetTamañoDecimalBitNombreDir. Memoria
263400010bit10entradasDigI0.0
333400010bit21entradasDigI0.1
323400010bit42entradasDigI0.2
133400010bit83entradasDigI0.3
253400010bit164entradasDigI0.4
143400010bit325entradasDigI0.5
273400010bit646entradasDigI0.6
43400010bit1287entradasDigI0.7
163400010bit2568entradasDigI1.0
173400010bit5129entradasDigI1.1
53400010bit102410entradasDigI1.2
233400010bit204811entradasDigI1.3
193400010bit409612entradasDigI1.4
183400010bit819213entradasDigI1.5
363400021bit10entradasDig_1I2.0
393400021bit21entradasDig_1I2.1
343400021bit42entradasDig_1I2.2
353400021bit83entradasDig_1I2.3
213400021bit164entradasDig_1I2.4
223400021bit325entradasDig_1I2.5
23400021bit646entradasDig_1I2.6
123400021bit1287entradasDig_1I2.7
15        
  • Salidas digitales
GPIOTipo de canalDirección ModbusOffsetTamañoDecimalBitNombreDir. Memoria
2616400032bit10salidasDigQ0.0
3316400032bit21salidasDigQ0.1
3216400032bit42salidasDigQ0.2
1316400032bit83salidasDigQ0.3
2516400032bit164salidasDigQ0.4
1416400032bit325salidasDigQ0.5
2716400032bit646salidasDigQ0.6
416400032bit1287salidasDigQ0.7
1616400032bit2568salidasDigQ1.8
1716400032bit5129salidasDigQ1.9
516400032bit102410salidasDigQ1.10
2316400032bit204811salidasDigQ1.11
1916400032bit409612salidasDigQ1.12
1816400032bit819213salidasDigQ1.13
36        
39        
34
35
2116400043bit10salidasDig_1Q2.0
2216400043bit21salidasDig_1Q2.1
21640004
121640004
1516400043bit42salidasDig_1Q2.2
  • Entradas analógicas (Resolución 10bits)
GPIOTipo de canalDirección ModbusOffsetTamañoNombreDir. Memoria
333400065WORDAI33IW3
323400054WORDAI32IW2
363400076WORDAI36IW4
393400087WORDAI39IW5
343400098WORDAI34IW6
353400109WORDAI35IW7
  • Salidas PWM (Resolución 8 bits)
GPIOTipo de canalDirección ModbusOffsetTamañoNombreDir. Memoria
261640001110WORDPWM26QW2
331640001211WORDPWM33QW3
321640001312WORDPWM32QW4
131640001413WORDPWM13QW5
251640001514WORDPWM25QW6
141640001615WORDPWM14QW7
271640001716WORDPWM27QW8
41640001817WORDPWM4QW9
161640001918WORDPWM16QW10
171640002019WORDPWM17QW11
51640002120WORDPWM5QW12
231640002221WORDPWM23QW13
191640002322WORDPWM19QW14
181640002423WORDPWM18QW15
151640002524WORDPWM15QW16
  • Direcciones de envío de datos (sensores, lecturas Wifi, etc.)
GPIOTipo de canalDirección ModbusOffsetTamañoNombreDir. Memoria
S1340002625WORDSENSOR1IW8
S2340002726WORDSENSOR1IW9
S3340002827WORDSENSOR1IW10
S4340002928WORDSENSOR1IW11
  • Direcciones de lectura de datos (actuadores, lecturas Wifi, etc.)
GPIOTipo de canalDirección ModbusOffsetTamañoNombreDir. Memoria
AC1640003029WORDACTUADOR1QW17
AC2640003130WORDACTUADOR2QW18
AC3640003231WORDACTUADOR3QW19
AC4640003332WORDACTUADOR4QW20

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.