Para esta pasarela hemos creado nuestros propios conceptos, que no están inspirados en ningún producto en particular aunque si son el resultado de haber estudiado y utilizado múltiples sistemas existentes en el mercado.
Un elemento fundamental para el diseño de esta pasarela ha sido la utilización de un solo protocolo de comunicaciones que es soportado por prácticamente todos los fabricantes y para el que además existen todo tipo de pasarelas.
Este protocolo es el
Modbus en su variante de transporte sobre
TCP.
Un protocolo único
Hay que tener en cuenta que esta pasarela está diseñada para obtener todo tipo de datos de nuestras instalaciones pero no para participar en un bucle de control o regulación.
Es decir, si tenemos una instalación inmótica o domótica, nuestro objetivo será obtener datos de interés de esta instalación pero será el propio equipamiento que forma parte de la instalación el responsable de ejecutar los bucles de regulación o control.
Eso no significa que no podamos influenciar sobre estos blucles de regulación o control ya que además de leer datos desde la instalación también podremos escribirlos sobre ella.
Podríamos utilizar esta pasarela para facilitar la integración entre varios sistemas. Por ejemplo, imaginemos que un usuario sólo pueda activar determinados servicios de una ubicación (clima, complementos multimedia, alumbrado completo, etc.) cuando éste se haya identificado correctamente mediante un control de accesos y además tenga asignada esa ubicación para ese momento concreto según un calendario que forma parte de nuestro sistema de reservas.
Modbus
Éste es un protocolo que a pesar de tener mas de 30 años, cada vez es más utilizado. Es un protocolo clásico mono-maestro/multi-esclavo, el cual nos permite acceder a
varios dispositivos de tipo modbus que se encuentran en un mismo bus. Cada comando que se envía tiene que indicar el
identificador del dispositivo al que va dirigido. A su vez, cada comando va dirigido a uno de los
cuatro bancos de memoria de los que puede estar compuesto el dispositivo. Para todos los bancos de memoria podremos enviar órdenes de
lectura, y sólo para algunos, órdenes de
escritura. También dependiendo del banco al que se dirijan las órdenes, los valores a los que se accederán serán de
1 bit o un
registro de 16 bits.
Resumen de los bancos de memoria de un dispositivo modbus.
| Nombre de banco | Lectura | Escritura | Rango de direcciones
| Almacenamiento |
| COIL_STATUS | X | X
| 0x0000 : 0xFFFF | 1 bit
|
| INPUT_STATUS | X | | 0x0000 : 0xFFFF | 1 bit
|
| HOLDING_REGISTER | X | X
| 0x0000 : 0xFFFF | registro de 16 bits
|
| INPUT_REGISTER | X | | 0x0000 : 0xFFFF | registro de 16 bits
|
Modbus TCP
Intencionadamente no se ha dicho nada referente a cual es el mecanismo de transporte necesario para enviar los comandos a un dispositivo Modbus, ya que sólo nos interesa el transporte más moderno que es el tipo
ModbusTcp.
Normalmente a los dispositivos modbus con transporte tcp se les da el nombre de
pasarelas. Este nombre no es del todo correcto, ya que aunque en ocasiones la función de ese dispositivo si que es la de hacer de pasarela entre las red tcp y un bus de tipo serie, en otras ocasiones no es así.
Veamos algunos ejemplos de estos tipos de dispositivos:
- Entradas/salidas de tipo binario/analógico remotas.
- Contadores de impulsos.
- Analizadores de redes eléctricas.
- Contadores de consumos eléctricos.
- Contadores de agua.
- Contadores de gas.
- Variadores de frecuencia
- Pasarelas de ModbusTCP a ModbusRTU/ModbusASCII
- Pasarelas de Modbus a EIB (Sistema domótico KNX)
- Pasarelas de Modbus a LONWORKS
- Pasarelas de Modbus a BACNET
- PLCs con soporte de Modbus esclavo.
- HMI (Pantallas) con soporte de Modbus esclavo.
- Pasarelas a varios tipos de centralitas de incendios.
- Pasarelas a varios tipos de centralitas de seguridad.
- Pasarelas a varios tipos de unidades de control de clima.
De las descritas anteriormente es muy habitual la pasarela de ModbusTCP a ModbusRTU, ya que hay mucho equipamiento antiguo basado en comunicaciones ModbusRTU.
A un equipamiento con soporte modbusTCP le llamaremos desde ahora una
pasarela y accederemos a él mediante una dirección IP. Una vez accedamos a él podremos enviar comandos modbus que tendrán que ir dirigidos a un dispositivo del bus (como hemos indicado anteriormente en la descripción del protocolo).
Si estamos accediendo a un equipo que gestiona entradas/salidas remotas, este equipo solo tendrá un bus virtual en él y este bus tendrá normalmente la dirección de bus 0.
Sin embargo, si estamos accediendo a un equipo que es una pasarela ModbusTCP a ModbusRTU y desde este equipo sale un bus RS485 donde tenemos conectados 3 analizadores de red, los comandos modbus que se le envíen a este equipo deberán indicar a que analizador de los tres quieren acceder (este caso correspondería a una pasarela pura).
Modelo de memoria global
En el servidor, a cada pasarela que incorporemos le daremos un nombre y este nombre será la forma en la que se referenciará desde el resto de componentes del servidor.
Una vez desplegadas nuestras pasarelas en nuestra instalación y correctamente configuradas en nuestro servidor, podemos representar todos los puntos de interés de nuestra instalación dentro de un mapa global y distribuido donde cada uno de los puntos puede ser direccionado de forma inequívoca.
Un punto de interés será por tanto direccionado por
el nombre de la pasarela,
el número de dispositivo dentro de la pasarela,
el banco de datos dentro del modelo de su memoria y finalmente
la dirección dentro de ese banco de memoria (si el banco es de tipo registro de 16 bits también
el número de registros que ocupa el valor).
Un ejemplo:
| Pasarela | Dispositivo | Banco | Dirección | Punto |
contador1 (ip=192.168.1.4)
| 0 (virtual)
| INPUT_REGISTERS | 0x0004:0x0004 | Metros cúbicos agua potable.
|
| | 0 (virtual) | INPUT_REGISTERS | 0x0005:0x0005 | Metros cúbicos agua riego.
|
analizador1 (ip=192.168.1.5)
| 1 (en un bus 485)
| INPUT_REGISTERS | 0x0023:0x0023 | KW/h zona norte
|
| | 2
(en un bus 485)
| INPUT_REGISTERS | 0x0023:0x0023 | KW/h zona sur
|
| | 3
(en un bus 485)
| INPUT_REGISTERS | 0x0023:0x0023 | KW/h zona central
|
salidas1 (ip=192.168.1.7)
| 0 (virtual) | COIL_STATUS | 0x0001:0x0001 | Activación / Desactivación alarmas
|