Modbus RTU es un protocolo de comunicación serial utilizado en sistemas de automatización y control industrial. Funciona en una estructura Maestro-Esclavo (Cliente – Servidor), donde el dispositivo Maestro controla la red y los dispositivos Esclavos responden a sus peticiones.

En Modbus RTU se transmiten como máximo datos del tipo WORD, esto quiere decir que solo serán números enteros (no decimales), positivos y con un valor máximo de 2^16, ya que una variable WORD tiene una capacidad de 2 bytes.

Trabajar con Modbus RTU como Cliente permite usar un microcontrolador como periférico del PC, que puede estar actuando como softPLC. 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.

Un runtime es una aplicación que al abrirla en un ordenador, permite trabajar con el ordenador como si fuera un PLC. Tiene que existir runtime para el sistema operativo con el que trabaje tu PC. Si no es así, una opción es instalar una máquina virtual y en ella, un S.O. soportado por el entorno con el que quieras trabajar.

Como se ha dicho, Codesys dispone de esta aplicación (Codesys Control Win Systray), que pese a ser externa al software de edición, se instala junto al paquete principal.

Guía inicial #

Descargar e instalar CODESYS Development System #

CODESYS Development System V3 se puede descargar de forma gratuita desde su web oficial. Sin embargo, utilizar la misma versión evita ciertos problemas de compatibilidad que pueden surgir. En este enlace puedes descargarte la versión con la que estamos trabajando.

Descargar el archivo Codesys de trabajo #

Se puede descargar el archivo con extensión .project y con de extensión .projectarchive. Este último es una exportación del proyecto, no un guardado simple. Los archivos que guardamos en Archivo/guardar son de extensión .project y son mucho mas ligeros porque solo incluyen el programa realizado.

Cuando se guarda en formato «archivado» un proyecto, el archivo incluye librerías y otros elementos que pueden no venir en la instalación básica de serie del software. Una vez abierto un archivo .projectarchive, ya puedes trabajar con los archivos .project en ese ordenador, porque ya ha integrado los componentes necesarios para ese tipo de proyectos.

Abrir (extraer) el archivo #

Se puede abrir haciendo clic sobre el archivo directamente:

También se puede abrir Codesys y hacer clic en Archivo/Extraer.

Como es una especie de archivo comprimido, preguntará dónde extraerlo y qué extraer. Selecciona una carpeta en tu ordenador y señala todas las pestañas:

Tras esto, acepta e indica en si (yes) las condiciones y preguntas que realiza. A continuación, seguramente te indique que hay actualizaciones disponibles. Dale a aceptar para que se cierre la ventana.

El programa se abrirá con un ejemplo muy básico programado en el bloque principal (Main):

Activar el PLC virtual (SoftPLC) #

Se va trabajar en el ordenador con una especie de “emulador” de un PLC que ejecuta Codesys, por eso se le denomina SoftPLC (Soft de Software). Por tanto, lo primero que hay que hacer es encender el PLC (sería como enchufar un PLC físico).

El runtime para Windows de Codesys es una aplicación denominada Codesys Control Win V3 – x64 Systray, que se instala automáticamente, pero que en muchas ocasiones no se abre al abrir Codesys o si se abre, aparece con el SoftPLC apagado. Para abrirlo se puede buscar en el buscador de Windows:

Para “activar” nuestro SoftPLC, buscamos el icono del Codesys Control Win V3 – x64 Systray y hacemos clic en Start PLC:

Para terminar con esta parte, es importante recordar que este SoftPLC de Codesys en versión demo funciona durante dos horas seguidas. Al cabo de dos horas se pone en Stop y hay que volver a arrancarlo manualmente.

Conectar nuestro ordenador con el PLC virtual #

Cuando elaboremos un programa de automatización en Codesys tenemos que cargarlo en el SoftPLC. Para esto hay que indicarle al editor de Codesys que se desea cargar el programa en el SoftPLC. El proceso es muy similar a cargar sobre un PLC físico, solo que en este caso toda la transferencia de datos se hace dentro de nuestro PC.

Para ello, haz clic en Device (aparato en inglés), y en la opción Examinar Red, entra en Gateway y Equipo:

Si el proceso se ejecuta correctamente, aparecerá ya todo en verde al salir a la pantalla Device:

Para que esto suceda, no puedes olvidar activar el SoftPLC como hemos visto en el paso anterior. No podemos conectar con un PLC desenchufado. Si no lo activas, es común encontrar este error:

Tras esto, hay que indicarle al SoftPLC en qué dirección está conectada la placa, para que pueda comunicar con ella. Modbus RTU comunica físicamente dos dispositivos mediante RS-485 o RS-232. Este tipo de cables los podemos «simular» mediante el cable USB con el que conectamos el microcontrolador a la placa.

De esta forma, hay que indicar en Codesys en que puerto está conectado el Servidor Modbus RTU con el que debe comunicar el softPLC, que será la dirección COM del USB asignado por el PC. Para esto, en la pestaña Modbus_COM, selecciona el puerto COM donde está conectado el microcontrolador.

Para conocer el puerto COM asignado al microcontrolador por tu PC, se pueden realizar dos procesos. Por un lado se puede consultar desde el programa mediante el que se carga la configuración en el microcontrolador:

O se puede consultar directamente en el administrador de dispositivos de Windows o el S.O. que se utilice:

Finalmente, hay que definir la dirección del servidor o esclavo. Dado que un cliente puede gestionar múltiples servidores, cada uno debe llevar un número identificativo único. Esto se hace en la configuración del servidor:

Es fundamental que el servidor se haya configurado con la misma. El bloque predefinido para Modbus RTU establece la 8 por defecto, como se muestra en la siguiente imagen:

Cargar el programa en el SoftPLC y ponerlo en Run #

El archivo de trabajo incluye un programa de prueba de un solo segmento. Como ejemplo se puede cargar este programa o directamente un programa vacío. Para cargar un programa debemos presionar el icono de Iniciar la sesión:

Preguntará qué tipo de carga se quiere realizar. Vamos a hacer una carga completa:

Así hemos cargado la automatización realizada, en el SoftPLC. Ahora solo queda poner en run el SoftPLC. Para ello, haz clic en el icono de Inicio:

El árbol de dispositivos cambiará y se pondrá en modo online. Si aún no tienes conectado un microcontrolador al USB, te indicará que la configuración es correcta pero no se ha reconocido ningún dispositivo con el que conectar el Master (Cliente). Además también te dirá que el Esclavo (servidor) no responde. Esto se visualiza con dos triángulos rojos:

Si conectas un microcontrolador al USB, aunque aún no esté configurado como servidor Modbus, y reinicias la comunicación, ya solo indicará que no responde el servidor. Para reiniciar el proceso, puedes hacer un reset en caliente entrando en En linea / reset caliente. Al volver a conectar:

Reconexión y lista de comprobación #

Reconexión:

Es posible que se produzcan errores al realizar una reconexión. Si tras un tiempo trabajando se vuelve a cargar un programa en Codesys o en el microcontrolador y se vuelve a conectar, es posible que de un error en el Servidor del siguiente tipo:

Una forma de reiniciar la comunicación es realizar un reset caliente en Codesys. Podría ser otro reset, pero este es el mas rápido y suele ser suficiente.

Si se activa el Servidor antes que el Cliente (Codesys), también es posible que surja el mismo error anterior y haya que realizar un reset de Codesys.

Si pese a lo anterior siguiera fallando la comunicación, se puede probar a reiniciar el SoftPLC o el microcontrolador.

Finalmente, es importante destacar que las direcciones que no se usen en Codesys, aparecerán como desactivadas aunque estén configuradas en el Servidor. Codesys (Cliente), solo pide información de las direcciones en uso en el programa.

Lista de comprobación

  • Se ha cargado el programa en el Servidor.
  • No está abierto el puerto serie en el compilador del servidor (IDE Arduino).
  • Se ha introducido el puerto COM, la velocidad de comunicación y la dirección del esclavo correcta en Codesys.

Problemas y errores #

  • Que no aparezca dispositivo por no haber activado el SoftPLC (ya mencionado):
  • Que no conecte con la placa (slave) porque no se ha asignado bien la dirección del USB COM de la placa:

En la imagen anterior, no se produce la comunicación porque Codesys está tratando de conectar con la placa por el COM4 y hemos visto antes que en el ejemplo de configuración, la placa estaba asignada al COM5. Fíjate cómo aparecen tres triángulos en rojo en la parte inferior izquierda.

  • Dado que la comunicación Modbus RTU se realiza a través del Puerto Serie, si se tiene abierto un monitor serie en el PC, no será posible realizar la comunicación con Codesys. El error se verá de la siguiente forma:
  • Otro error, en este caso de instalación, es que se haya instalado una versión con arquitectura X32 de Codesys en un PC X64. En ese caso nunca conectará el Gateway con el SoftPLC.
  • También puede pasar que se te haya olvidado conectar la placa, o que esta no esté configurada correctamente.

Canales #

Los canales Modbus RTU utilizados se pueden visualizar en el archivo de trabajo.

Tutoriales en vídeo de instalación y ejemplos iniciales #

  • Comunicación predefinida sin programar de un Esp32 (Arduino) con Codesys por Modbus RTU:
    https://youtu.be/JChnNduyGUM
  • Temperatura, humedad y Servo entre Esp32 (Arduino) y Codesys por Modbus RTU. Config. sin programar:
    https://youtu.be/jnnspnRyLm0