General

Recursos

Pasarelas

Introducción

Como ya hemos comentado previamente, es necesario configurar una pasarela para poder gestionar los mapas de memoria modbus de los distintos dispositivos que tenemos desplegados por nuestra instalación.

Este objeto que representa una pasarela en el servidor, además de permitirnos alcanzar dispositivos físicos modbus, nos permite también alcanzar cualquier otro origen de información que seamos capaces de mapear en un mapa de memoria modbus.

Gestión de pasarelas

Con las siguientes utilidades podremos conocer las pasarelas que están instaladas en el sistema.

admin> help gateway

GATEWAY cmd

Gestiona las pasarela Modbus.

LIST                Muestra la lista de pasarelas.
SHOW                Muestra los modelo da datos modbus de las pasarelas.

admin> gateway list

Name             Status   Explanation          Description
---------------- -------- -------------------- --------------------------------------------------
default          ERROR    Invalid provider     Provider used by invalid nodes
simple           OPENED   Transport opened     Simple router target

admin>

Si realizamos la consulta en un servidor recién instalado obtenemos estas dos pasarelas.

La pasarela default es una pasarela especial, si intentamos utilizarla para acceder a sus mapas de memoria modbus obtendremos como resultado un error de acceso a los datos.

Como indicamos en Objetos del servidor, las pasarelas son enganchadas a nodos. Si por cualquier motivo un nodo no está correctamente enganchado a una pasarela, el servidor utilizará para ese nodo la pasarela default.

Como ya hemos indicado varias veces, conceptualmente un objeto pasarela del servidor nos permite acceder a un dispositivo pasarela remoto, el cual facilita el acceso a varios dispositivos conectados en un bus donde cada uno de ellos dispone de un mapa de memoria modbus.

Disponemos de una utilidad para poder acceder a todos los mapas de memoria de todos los dispositivos que están conectados al objeto pasarela.

admin> help gateway show

GATEWAY SHOW [NAME=name] [TABLE=tablename] [REFERENCE=ref]

Muestra los modelo da datos modbus de las pasarelas.

Los parametros para este comando son:

[Req] [Parametro]    [Tipo]     [Description]
  *   NAME           String     Nobre de la pasarela
      TABLE          String     Tabla del modelo de datos que se quiere ver.
                                Los valores posibles son (DISCRETE_INPUT,
                                COIL, INPUT_REGISTERS, HOLDING_REGISTER)
      REF            int        Referencia o direccion inicial del item
                                (0-FFFF)

Como se ve en la ayuda proporcionada por la utilidad, podemos arrancar el visor del mapa de memoria proporcionando parámetros concretos de lo que deseamos ver.

En el siguiente ejemplo simplemente indicaremos el nombre de la pasarela mediante el comando gateway show name=default

Device: 1    Bank: Discrete inputs

Ref                             Value
0000                            -
0001                            -
0002                            -
0003                            -
0004                            -
0005                            -
0006                            -
0007                            -

(^) Bloque anterior, (v) Bloque siguiente,
(<) Tabla anterior, (>) Tabla siguiente,
*Discrete inputs, Coils, Input registers, Holding registres
(R) Indicar referencia, (D) Indicar dispositivo.
(ESC) Finalizar, (SPACE) Refrescar, (+/-) AutoRefresco: 1000 milisegs

En la pantalla tendremos ahora las 8 primeras entradas del primer banco (Discrete Inputs), del dispositivo 1 de los 247 dispositivos posibles que se pueden conectar en una pasarela modbus tcp.

La entrada correspondiente a un dato mostrará el dato en binario (true o false) o en hexadecimal (con un rango de 16 bits) dependiendo del tipo de banco al que estemos accediendo, pero en el caso de que la zona de memoria no sea válida (porque el dispositivo al que accedemos no la tiene mapeada) mostrará el carácter - como en el ejemplo anterior.

Hay que tener en cuenta que un dispositivo modbus implementará sólo un rango de la memoria (siempre empezando desde la posición 0x0) y tal vez sólo alguno de los bancos.

Esta pantalla nos permitirá desplazar las 8 entradas de datos que visualizamos entre todos los modelos de memoria de todos los dispositivos a los que se puede acceder mediante la pasarela modbus.

La posibilidades de navegación son:
  • Pulsando D podremos indicar el numero de dispositivo entre 0 y 246.
  • Con las fechas izquierda y derecha conmutaremos entre los bancos Discrete Input, Coils, Input Registers y Holding Rergisters.
  • Con las flechas arriba y abajo podremos mover las 8 entradas que se visualizan a lo largo del rango de memoria (entre 0x0000 y 0xFFFF).
  • Pulsando R podremos indicar exactamente la posición de memoria correspondiente a la primera entrada de las seis mostradas.
  • Pulsando barra espaciadora se refrescaran los datos.
  • Los datos se refrescarán automáticamente pero con la tecla + y - podremos ajustar este tiempo.
  • ESC para salir.

Información

Esta funcionalidad de mostrar los bancos de memoria que se pueden alcanzar a través de una pasarela modbus, se aplicará a cualquier pasarela y no sólo a la indicada en el ejemplo.

También hay que tener en cuenta que en ocasiones y por imposición de la semántica del protocolo Modbus que se utiliza para comunicar con los dispositivos pasarela, cuesta unos segundos determinar que un banco o una dirección de memoria no está implementada y por ese motivo veremos que cuesta mucho tiempo de obtener las 6 entradas cuando estamos en bancos o en zonas de memoria no implementadas por el dispositivo al que se accede.

Instalación de pasarelas

Para instalar una pasarela necesitamos configurarla y para ello tenemos que proporcionarle los datos que se necesitan para su configuración.

Dispondremos de varios tipos de pasarelas y pueden aparecer más tipos a medida que surjan nuevas necesidades. Debido a esta variedad, ésta es la única parte del servidor que no se gestiona mediante comandos a través de las sesiones interactivas que abrimos con un cliente telnet (como hemos ido viendo hasta ahora en los ejemplos).

Como ya se indicó en Instalación, existe un directorio c:\scada-middleware\bin\install (estamos suponiendo que el servidor está instalado en c:\scada-middleware) donde podemos incluir nuevos Bundles y también ficheros de configuración para éstos.

A este directorio le llamaremos a partir de ahora directorio de instalación dinámica y en él podremos instalar indistintamente nuevos tipos de pasarelas como ficheros de configuración para éstas.

Pasarela: simple

Ésta es una pasarela muy elemental y su único objetivo es que podamos hacer pruebas también muy simples.

Sus características son:
  • Sólo nos da acceso a un dispositivo identificado con el número 1.
  • Solo implementa los bancos que son de lectura (DISCRETE_INPUTS y INPUT_REGISTERS).
  • En el banco DISCRETE_INPUTS se puede acceder al mapa completo de 16 bits (Desde 0x0000 hasta 0xFFFF) obteniendo un valor true en las direcciones impares y false en las direcciones pares.
  • En el banco INPUT_REGISTERS se puede acceder al mapa completo de 16 bits (Desde 0x0000 hasta 0xFFFF) obteniendo un valor equivalente a su propia dirección estando éste en formato TWO_BYTE_INT_UNSIGNED (es decir, en la dirección 0x0000 se obtiene un valor 0, en la 0x0001 un valor 1 y así sucesivamente).
Cuando el bundle de la pasarela está instalado, se crea una única pasarela con el nombre simple que funcionará con las características indicadas anteriormente y sin tener la posibilidad de realizar ninguna configuración.

Podemos aprovechar esta pasarela, que es bastante inútil y nunca estará en producción, para probar primero a desinstalarla y después volver a instalarla.

Los pasos serían:
  • Con la pasarela en marcha verificar con el comando GATEWAY LIST que la pasarela simple está disponible.
  • Mover el fichero com.speedycontrol.gateway.simple_1.0.0.201001190917 (la parte posterior al carácter _ puede ser distinta) desde el directorio de instalación dinámica a un directorio temporal.
  • Después de al menos 5 segundos, comprobar que la pasarela simple ya no está disponible.
  • Volver a colocar el fichero del bundle de nuevo en el directorio de instalación dinámica.
  • Después de al menos 5 segundos comprobar que la pasarela simple ya esta disponible otra vez.
Recuerde que en el caso de que algún nodo estuviese enganchado a la pasarela simple, en el momento en el que ésta dejara de estar disponible el sistema engancharía dicho nodo a la pasarela default temporalmente.

Como el nodo del que estamos hablando mantiene en su configuración una ruta hacia la pasarela simple, en el momento que esta pasarela estuviese disponible otra vez, el nodo se engancharía de nuevo con ella.

Pasarela de tipo simulación

En este caso estamos hablando de un tipo de pasarela y esto quiere decir que podemos configurar tantas pasarelas como queramos.

Con estas pasarelas podremos hacer pruebas mucho más complejas y simular un entorno más real (al menos en lo referente a la carga del sistema).

Deberemos incluir un archivo de configuración en el directorio de instalación dinámica por cada cada pasarela que deseemos crear, y podremos utilizar el archivo C:\scada-middleware\doc\com.speedycontrol.gateway.simulator-sample.cfg como plantilla (estamos suponiendo que el servidor está instalado en c:\scada-middleware).

El nombre de fichero com.speedycontrol.gateway.simulator-sample.cfg tiente tres partes significativas:

 com.speedycontrol.gateway.simulator-Esta parte deberá de ser común para todos los ficheros de configuración de las pasarelas del tipo simulación.
Es importante que sea exactamente esta cadena ya que de no ser así no será reconocido como un fichero de configuración para este tipo de pasarelas.
 sampleEsta parte del nombre simplemente tiene que ser distinta para cada fichero de configuración y este texto no es significativo ya que el nombre de la pasarela estará informado en el interior del fichero.
 .cfgEsta extensión es obligatoria para que el sistema que gestiona el directorio de instalación dinámica considere el archivo como un fichero de configuración.

Por tanto, si queremos tener 4 pasarelas de simulación instaladas, podríamos incorporar en el directorio de instalación dinamica 4 ficheros con los siguientes nombres.

Ejemplo:
  1. com.speedycontrol.gateway.simulator-simu1.cfg
  2. com.speedycontrol.gateway.simulator-simu2.cfg
  3. com.speedycontrol.gateway.simulator-simu3.cfg
  4. com.speedycontrol.gateway.simulator-simu4.cfg
A continuación mostramos el fichero de configuracion que sirve como plantilla  C:\scada-middleware\doc\com.speedycontrol.gateway.simulator-sample.cfg donde encontraremos en los comentarios las explicaciones de funcionamiento de esta pasarela.

Al final del archivo tenemos los cuatro campos que hay que configurar siendo el campo NAME el que contendrá el nombre que la pasarela tendrá dentro del servidor.

Advertencia

El nombre de la pasarela que se indicará en el campo NAME deberá ser distinto para cada pasarela del servidor.

##################################################################
#                    === DESCRIPCION ===
#
# Esta pasarela permite definir uno o mas nodos modbus donde cada
# nodo dispondra de un modelo de memoria con valores dinamicos
# que permitiran verficar el funcionamiento de sistema sin la
# necesidad de utilizar dispositibos modbus fisicos.
#
# El mapa de memoria y sus valores para cada nodo sera:
#
#  DIGITAL_INPUTS:
#       El rango de direciones disponibles sera 0x00-0x20 (0-32)
#       con un valor inicial 'false' para cada posicion.
#       Transcurrido el tiempo indicado por el atributo
#       'refreshperiod' se producira un desplazamiento de los
#       valores desde la posicion mas alta hacia las mas baja.
#       Como consecuencia, en cada desplazamiento se perdera el
#       valor mas bajo del rango de memoria y entrara un nuevo
#       valor por la zona alta del rango de memoria.
#       El nuevo valor que entrara por la zona alta sera un valor
#       FALSE excepto cada 6 ocasiones en la que entrara un valor
#       TRUE.
#      
#         Ejemplo (FALSE == 0, TRUE = 1):
#            00.......00000000000000000000000000000000000000000 
#            00.......00000000000000000000000000000000000000001 
#            00.......00000000000000000000000000000000000000010 
#            00.......00000000000000000000000000000000000000100 
#            00.......00000000000000000000000000000000000001000 
#            00.......00000000000000000000000000000000000010000 
#            00.......00000000000000000000000000000000000100000 
#            00.......00000000000000000000000000000000001000001 
#            00.......00000000000000000000000000000000010000010 
#            00.......00000000000000000000000000000000100000100 
#            00.......00000000000000000000000000000001000001000
#
#  INPUT_REGISTER:
#       El rango de direcciones disponible sera 0x00-0x20 (0-32)
#       con un valor inicial 0x0 para cada posición.
#       Transcurrido el tiempo indicado por el atributo
#       'refreshperiod' se producira un incremento en el valor
#       de cada posocion. El valor de dicho incremento sera
#       el de su propia direccion.
#
#         Ejemplo:
#           Posicion 0: 0, 0, 0, 0, 0, ....
#           Posicion 1: 0, 1, 2, 3, 4, ....
#           Posicion 2: 0, 2, 4, 6, 8, ....
#           Posicion 3: 0, 3, 6, 9, 12, ....
#           Posicion 4: 0, 4, 8, 12, 16, ...
#              "
#           Posicion 32: 0, 32, 64, 128, 256, ...
#
#  COILS:
#       El rango de direcciones disponible sera 0x00-0x20 (0-32)
#       con un valor inicial FALSE para cada posición.
#       En esta zona de la memoria no se producira ningun cambio
#       automatico en sus valores.
#       Al ser una zona de R/W se podra escribir valores los cuales
#       persistiran mientras el sistema este en funcionamiento.
#
#  REGISTERS:
#       El rango de direcciones disponible sera 0x00-0x20 (0-32)
#       con un valor inicial 0 para cada posición.
#       En esta zona de la memoria no se producira ningun cambio
#       automatico en sus valores.
#       Al ser una zona de R/W se podra escribir valores los cuales
#       persistiran mientras el sistema este en funcionamiento.
#   
##################################################################


##################################################################
# Nombre de la pasarela que tiene que ser unico
# entre el conjunto de pasarelas definidas.
##################################################################
NAME=simu-sample

##################################################################
# Primer nodo modbus que podra se referenciado en esta pasarela
##################################################################
FIRSTNODE=1

##################################################################
# Numero de nodos modbus que podran ser referenciados a partir
# del nodo que se ha definido como primero.
##################################################################
NODES=10

##################################################################
# Numero de milisegundos que transcurriran entre los refrescos de
# de los valores calculados de los nodos modbus disponibles
# en esta pasarela.
##################################################################
REFRESHPERIOD=800

Pasarela de tipo modbus

Esta pasarela nos permitirá conectar con dispositivos Modbus que tengan interface ethernet y soporten el protocolo Modbus TCP.

Deberemos incluir un archivo de configuración en el directorio de instalación dinámica por cada cada pasarela que deseemos crear, y podremos utilizar el archivo C:\scada-middleware\doc\com.speedycontrol.gateway.modbus-sample.cfg como plantilla (estamos suponiendo que el servidor está instalado en c:\scada-middleware).

El nombre de fichero com.speedycontrol.gateway.modbus-sample.cfg tiente tres partes significativas:

 com.speedycontrol.gateway.modbus-Esta parte deberá ser común para todos los ficheros de configuración de las pasarelas del tipo dispositivo modbus.
Es importante que sea exactamente esta cadena ya que de no ser así no será reconocido como un fichero de configuración para este tipo de pasarelas.
 sampleEsta parte del nombre simplemente tiene que ser distinta para cada fichero de configuración y este texto no es significativo ya que el nombre de la pasarela estará informado en el interior del fichero.
 .cfgEsta extensión es obligatoria para que el sistema que gestiona el directorio de instalación dinámica considere el archivo como un fichero de configuración.

Por tanto, si queremos tener 4 pasarelas de tipo modbus instaladas, podríamos incorporar en el directorio de instalación dinámica 4 ficheros con los siguientes nombres.

Ejemplo:
  1. com.speedycontrol.gateway.modbus-device1.cfg
  2. com.speedycontrol.gateway.modbus-device2.cfg
  3. com.speedycontrol.gateway.modbus-device3.cfg
  4. com.speedycontrol.gateway.modbus-device4.cfg
A continuación mostramos el fichero C:\scada-middleware\doc\com.speedycontrol.gateway.modbus-sample.cfg donde encontraremos en los comentarios las explicaciones de funcionamiento de estas pasarelas.

Al final del archivo tenemos los cuatro campos que hay que configurar, siendo el campo NAME el que contendrá el nombre que la pasarela tendrá dentro del servidor.

Advertencia

El nombre de la pasarela que se indicará en el campo NAME deberá ser distinto para cada pasarela del servidor.

##################################################################
#                    === DESCRIPCION ===
#
# Esta pasarela permite conectar con dispositivos modbus tcp
# remotos para acceder a sus mapas de memoria.
##################################################################

##################################################################
# Nombre de la pasarela que tiene que ser unico
# entre el conjunto de pasarelas definidas.
##################################################################
NAME=gatewayname

##################################################################
# Direccion IP del dispositivo MOBUS-TCP
##################################################################
IP=192.168.1.12

##################################################################
# Puerto IP del dispositivo MOBUS-TCP
# Este es un parametro opcional y su valor por defecto es 502.
##################################################################
PORT=502

##################################################################
# Tiempo para el reintento de la conexion.
# En caso de que no se pueda establecer la conexion o esta se
# haya perdido, este parametro inidica el numero de milisegundos
# que se esperara antes de intentar conectar de nuevo.
# Este es un parametro opcional y su valor por defecto es 1000.
##################################################################
RETRYTIMEOUT=1000

Construcción de nuevas pasarelas

Como ya se ha indicado anteriormente, mediante el directorio de instalación dinámica podemos cargar en tiempo de ejecución nuevas pasarelas desarrolladas específicamente para algún proyecto.

Imaginemos cualquier mecanismo mediante el cual podamos obtener información:
  • Mediante el acceso al modelo de datos de una base de datos.
  • Mediante el acceso a datos a través de un WebService.
  • Mediante un servidor REST
  • Implementando un protocolo propietario de cualquier fabricante.
  • Analizando ficheros de intercambio.
  • Y cualquier otro método.
Analizamos como modelar la información que obtenemos para poder ser direccionada dentro del siguiente esquema por cada pasarela que configuremos:
  • 247 nodos direccionados desde el número 0 al numero 246
  • En cada nodo disponemos de los bancos Discrete inputs, Coils, Input registers y Holding registres con las características específicas de cada uno de ellos y los distintos formatos de almacenamiento de los datos (ver Preparación de los datos)
  • Para cada uno de los bancos disponemos del rango de direcciones desde 0x0 hasta 0xFFFF.
Si finalmente hemos podido obtener y modelar la información para que sea accesible desde una pasarela, podremos desarrollar un bundle OSGI que pueda gestionar la instanciación de varias pasarelas de este nuevo tipo, donde cada instancia pueda ser configurada con su propio fichero de configuración.