Download Capítulo 1 RESUMEN

Document related concepts
no text concepts found
Transcript
. Resumen
i
Capítulo 1 RESUMEN
El proyecto Desarrollo en Java de un sistema de acceso remoto a Modbus.
Implementación Web y Java del sistema para CP2003, tiene el objetivo final de
desarrollar una aplicación que lea e interprete las medidas del dispositivo CP2003
por medio de Internet. Este dispositivo tiene la funcionalidad general de tomar
medidas e información de una red eléctrica, obteniendo datos de intensidad, voltaje,
etc., que puedan permitir un estudio, por ejemplo del consumo. Este dispositivo
funciona mediante el protocolo de tipo serie Modbus, ampliamente utilizado por los
entornos industriales para el control de sus equipos.
Para desarrollar este objetivo final, se ha decidido estructurar el proyecto en dos
grandes categorías o subproyectos. El primero, correspondería a la aplicación que
sabe cómo comunicarse con el dispositivo (vía Modbus), obtiene la información
requerida de él y sabe como interpretarla, en otras palabras una especie de
controlador. El segundo va a consistir en el desarrollo de un método que nos permita
abstraernos de los detalles de la comunicación Internet. Esta decisión ha derivado en
el diseño y programación de una aplicación cliente-servidor. El servidor, que reside
en el sistema local conectado a la red Modbus, va a recuperar y administrar detalles
de la red Modbus, y va a gestionar las conexiones entrantes TCP/IP. En el lado del
cliente se implementará una clase que ofrezca acceso las funciones de la aplicación
del servidor sobre la red Modbus. Esta herramienta no implementará ningún tipo de
particularidad del manejo del CP2003, con el fin de ofrecer sus utilidades al
desarrollo de otras aplicaciones Modbus.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
. Resumen
ii
Los resultados finales obtenidos son:
RemModbus será una aplicación que de forma remota y local, administra una red
Modbus cualquiera. Además facilita el desarrollo de nuevas aplicaciones.
WebCP2003 será todo un sistema de control definido sobre un servidor Web, para
demostrar la potencia de RemModbus, que esta diseñado para obtener de forma
remota información de uno o varios dispositivos CP2003
RemCP2003 será un programa Java para la ejecución de consultas definidas sobre
un CP2003. Las tramas se interpretarán.
RemBridge permitirá la creación de una comunicación entre una aplicación Modbus
cualquiera y un dispositivo Modbus, a través de Internet, usado la tecnología
RemModbus desarrollada anteriormente. En la parte del cliente, se ejecutará
RemBridge, el cual, se comunicará con un puerto COM virtual. Una aplicación
Modbus local cualquiera, se conecta a otro puerto virtual COM como si el
dispositivo estuviera conectado a ese puerto. De esta forma RemBribge hace las
veces de dispositivo Modbus, y realiza las conexiones pertinentes con RemModbus
en el servidor, que llevará a cabo la comunicación real.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
. Abstract
iii
Capítulo 2 ABSTRACT
The Project named Java Development of a system of remote access to Modbus.
Implementation Web and Java of the system for CP2003, has the last and final goal
of developing an application able to read and interpret measure information of the
CP2003 device via the Internet. This device has the overall functionality of taking
information from a power grid, as drawing intensity, voltage, etc.. That may allow a
study of the situation, for example, for consumption. This device works through the
serial Modbus protocol, widely used in industrial environments to control their
devices.
To develop this ultimate goal, it was decided to structure the project into two big
categories or sub-projects. The first would correspond to the application that knows
how to communicate with the device (via Modbus), obtains the information required
of him and knows how to interpret it, in other words a sort of controller. The second
will be to develop a method that allows us to abstract from the details of Internet
communication. That decision has resulted in the design and scheduling of a clientserver application. The server, which resides in the local system connected to the
network Modbus, will manage and retrieve details of the Modbus network, and will
manage incoming connections TCP / IP. On the client side it must be necessary to
implement a class that offers access functions of the application server on the
network Modbus. This tool will not implement any special handling of CP2003 in
particular, in order to offer their profits to develop other applications Modbus.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
. Abstract
iv
The final results are the following:
RemModbus will be an application that manages any Modbus network both
remotely and locally. In addition, it will facilitate the development of new Modbus
applications.
WebCP2003 will be a control system defined on a Web server, to demonstrate the
power and versatility of RemModbus, which is designed to remotely obtain
information from one or more devices CP2003.
RemCP2003 will be a Java application for carrying out defined consultations on a
CP2003. The responses will be interpreted.
RemBridge will allow the creation of a communication between a Modbus
application and any Modbus device, via the Internet, using the technology developed
RemModbus earlier. On the client side, shall be executed RemBridge, which will
communicate with a virtual COM port. Any local Modbus application is connected to
another virtual COM port, as if the device was connected to that port. Thus
RemBribge acts as a Modbus device, and make relevants connections with
RemModbus on the server, which carried out the actual communication.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
. Índice
v
ÍNDICE
Memoria ..................................................................................................................... 1
Capítulo 1
Introducción....................................................................................... 2
1
Estado del arte.......................................................................................................... 3
2
Motivación del proyecto ........................................................................................ 7
2.1 Modbus sobre TCP ..................................................................................................................7
2.2 Uso del CP2003.......................................................................................................................9
3
Motivación del proyecto ...................................................................................... 11
3.1 Desarrollo de un entorno para el desarrollo de aplicaciones remotas Modbus ......................11
3.2 Desarrollo de aplicaciones Modbus remotas..........................................................................13
3.3 Controlador remoto del CP2003............................................................................................15
4
Identificación de Necesidades............................................................................ 16
4.1 Objetivos ...............................................................................................................................16
4.2 Alcance de la aplicación.........................................................................................................19
4.3 Tipología de los usuarios .......................................................................................................20
4.4 Restricciones..........................................................................................................................21
5
Metodología de desarrollo .................................................................................. 22
6
Recursos, herramientas y tecnologías empleadas ........................................... 23
7
Estudio de la arquitectura.................................................................................... 25
7.1 RemModbus y RemBridge ....................................................................................................25
7.2 RemCP2003 y WebCP2003 ..................................................................................................25
7.3 Arquitectura extendida de la aplicación. ...............................................................................26
Capítulo 2
1
RemModbus ..................................................................................... 27
Introducción ........................................................................................................... 27
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
. Índice
2
vi
Diseño ..................................................................................................................... 28
2.1 Diseño de la Base de Datos....................................................................................................29
2.2 Diseño del protocolo RemModbus.........................................................................................30
2.2.1 Proceso de conexión y establecimiento de usuario:.............................................................32
2.2.2 Otras transacciones cliente – servidor. Lógica de confirmaciones......................................33
2.2.3 Lista de transacciones.........................................................................................................34
2.3 Diseño de RemModbus Servidor...........................................................................................36
2.3.1 Lógica del enlace físico con los puertos del protocolo Serie.................................................36
2.3.2 Lógica de conexión de equipos remotos...............................................................................37
2.3.3 Diseño de control de estado de la red..................................................................................37
2.3.4 Lógica de colas. ...................................................................................................................40
2.3.5 Lógica de la comunicación Modbus....................................................................................42
2.3.6 Diseño de control de obtención de respuestas.....................................................................43
2.3.7 Lógica del descubrimiento de dispositivos conectados a la red (Finding)...........................44
2.3.8 Lógica del polling. ..............................................................................................................45
2.3.9 Lógica de transmisión de tramas. CRC. .............................................................................46
2.4 Diseño de RemModbus Cliente .............................................................................................47
3
Programación y pruebas ...................................................................................... 48
3.1 Programación del acceso a la BBDD .....................................................................................51
3.2 Programación del protocolo RemModbus..............................................................................52
3.3 Programación de RemModbus Servidor................................................................................55
3.3.1 Programación de gestión conexión con protocolo serie: Enlace.java ..................................56
3.3.2 Programación de gestión de conexiones remotas................................................................56
3.3.3 Programación de gestión de estado: Estado.java ................................................................58
3.3.4 Programación de colas........................................................................................................60
3.3.5 Programación de comunicación Modbus y control de obtención de respuestas. ................62
3.3.8 Programación del CRC.......................................................................................................67
3.4 Programación de RemModbus Cliente..................................................................................69
4
API RemModbus................................................................................................... 70
Capítulo 3
WebCP2003, RemCP2003 & RemBridge...................................... 71
1
Introducción ........................................................................................................... 71
2
Requerimientos funcionales ............................................................................... 72
3
Requerimientos no funcionales ......................................................................... 73
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
. Índice
vii
4
Modelo de dominio .............................................................................................. 73
5
Diagrama de casos de uso.................................................................................... 74
6
Descripción de los casos de uso.......................................................................... 75
7
Diagramas de secuencia....................................................................................... 83
7.1 Procesos de login y logout .....................................................................................................83
7.2 WelcomeServlet .....................................................................................................................85
7.3 Ver medidas de un dispositivo...............................................................................................87
7.4 Editar medidas.......................................................................................................................90
7.5 Administrar usuarios ............................................................................................................91
7.6 Arrancar procesos en el servidor ...........................................................................................92
8
RemCP2003............................................................................................................. 93
9
RemBridge.............................................................................................................. 94
Capítulo 4
Resultados/Experimentos .............................................................. 95
1
RemModbus........................................................................................................... 95
2
WebCP2003............................................................................................................. 96
3
RemCP2003............................................................................................................. 96
4
RemBridge.............................................................................................................. 96
5
Experimentos.......................................................................................................... 97
Capítulo 5
Conclusiones.................................................................................... 98
Capítulo 6
Futuros desarrollos....................................................................... 100
Capítulo 7
Estudio Económico ....................................................................... 103
1
Planificación previa ............................................................................................ 103
2
Uso real aproximado del tiempo invertido en el proyecto .......................... 104
3
Valoración económica ........................................................................................ 104
Bibliografía............................................................................................................ 105
Anexo I Manuales de usuario.............................................................................. 107
Capítulo 1
API de RemModbus ...................................................................... 108
pfc_dsm.RemModbus Class SerialPort .................................................................. 108
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
. Índice
viii
Capítulo 2
Manual de RemModbus ............................................................... 112
Capítulo 3
Manual de WebCP2003 ................................................................ 116
1
Entrar en la aplicación............................................................................................. 116
2
Sistema inteligente de interacción........................................................................... 117
3
Interacción simple ................................................................................................... 118
4
Administración del polling y obtención de medidas............................................... 119
5
Administración de usuarios..................................................................................... 121
5.1 Editar usuario. ....................................................................................................................121
5.2 Borrar usuario .....................................................................................................................122
5.3 Añadir usuario ....................................................................................................................123
Capítulo 4
Manual de RemCP2003 ................................................................ 124
Capítulo 5
Manual de RemBridge.................................................................. 126
Anexo 2 CP200X Communication Protocol...................................................... 127
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Índice
1
MEMORIA
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
2
Capítulo 1 INTRODUCCIÓN
En la introducción se van a estudiar tanto las soluciones alternativas a ciertas partes
del proyecto basadas en otros trabajos previos o en otras tecnologías existentes, como
las soluciones tomadas por el equipo de desarrollo. Se recomienda la lectura del
resumen ofrecido anteriormente, para tener una visión general del proyecto y facilitar
la comprensión de éste.
Como ejemplo, hemos visto anteriormente que uno de los pilares sobre los que se
fundamenta este proyecto, consiste en el desarrollo e implementación de un sistema
que permite la comunicación de cualquier aplicación con la red Modbus. Aquí
veremos por qué este punto es interesante y por qué se ha decidido implantar.
Más adelante veremos los objetivos a alcanzar, con una breve descripción, la
metodología de desarrollo del proyecto, sus fases, las herramientas, tecnologías y
recursos que se han utilizado durante todo el ciclo de desarrollo e implementación,
etc.
En general durante la introducción, distinguiremos entre las dos grandes partes del
proyecto:
1. Temas relacionados con Modbus sobre TCP y su programación.
2. Temas relacionados con el CP2003 y su uso remoto.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
3
1 Estado del arte
Se establecerá el entorno tecnológico anterior al desarrollo del proyecto,
desarrollando además las diferentes soluciones disponibles a los problemas
planteados.
Antes de entrar en el tema del funcionamiento de una red Modbus sobre una red
TCP/IP o en el dispositivo CP2003, es conveniente describir Modbus: qué es, cómo
funciona y para qué se utiliza.
El protocolo Modbus es un protocolo abierto, lo que significa que puede ser utilizado
gratuitamente por los desarrolladores. Aprovechándose de esto y de su sencillo
diseño y versatilidad, Modbus se ha convertido desde su creación en 1979 en el
estándar de facto de entornos industriales, siendo utilizado para la comunicación
entre señales de instrumentación o dispositivos de control y un controlador principal
o un sistema de recogida de datos, como por ejemplo, y en este caso, un ordenador.
Si tratamos de localizar las competencias de una aplicación Modbus en el modelo
OSI, vamos a ver que el protocolo se acomoda en dos niveles,
o
Nivel de aplicación (aplication layer), donde trabajarían los
programas que utilizan los dispositivos e interpretan los datos de
dichos instrumentos. (Ej: Windmill, Hyperterminal, etc.).
o
Nivel de protocolo (data-link layer), donde se localizaría el
intercambio de tramas básicas del protocolo Modbus.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
4
APLICACIÓN
MODBUS
NIVELES OSI
7
Aplicación
SI
Protocolo de aplicación
6
Presentación
NO
5
Sesión
NO
4
Transporte
NO
3
Red
NO
2
Enlace
SI
Tramas Modbus
1
Físico
SI
RS485 o RS232
Figura 1: Niveles OSI y aplicaciones Modbus
Este protocolo se basa en una arquitectura sin estados Cliente-Servidor
(denominados maestro y esclavo respectivamente), donde cada dispositivo tiene un
número de esclavo que se utiliza a modo de dirección. Modbus permite ver a cada
dispositivo conectado como un banco de registros contiguos. Cada registro tiene una
dirección de 16 bits dentro del rango 0x0000 a 0xFFFF, y tiene un tamaño.
Dependiendo de cada dispositivo, almacenará un determinado tipo de información
(en el caso del CP2003, tensión, intensidad, etc.) o tendrá una determinada función
(para el CP2003, activar o desactivar un relé, disparar una alarma, etc.). Modbus
representa direcciones y datos mediante big-endian. Esto se traduce en que el bit más
significativo es enviado primero, luego a la hora de transmitir una cantidad mayor
que un Byte, los 8 primeros bits se enviarán antes (Por ejemplo, 0x1F4E será enviado
como 0x1F 0x4E).
Como medio físico de transmisión, el protocolo puede utilizar tanto RS232, como
RS485, ambos medios de tipo serie. RS232 es usado para comunicaciones de corta
distancia punto a punto (así como RS422, el cual es una extensión “bidireccional” de
RS232 para entornos industriales), mientras que RS485, además de permitir
distancias mas largas, puede ser utilizado para redes multipunto utilizando el
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
5
paradigma Maestro-Esclavo anteriormente mencionado. Lógicamente, el medio de
transmisión más utilizado, teniendo en cuenta esta información es RS485.
La comunicación se basa en el paradigma Request-Response, de lo que se denomina
comúnmente PDU (Protocol Data Unit). El protocolo permite mediante tramas,
consultar o actualizar el valor de dichos registros. La trama de petición es recibida
por todos los dispositivos de la red, pero solo es procesada si la trama esta dirigida al
identificador del instrumento que la recibe, enviando una respuesta modificando tan
solo el PDU. En resumen, cada trama de petición obtiene solo una trama de
respuesta, a no ser que haya un error de trama, en cuyo caso no se obtiene ningún
tipo de respuesta.
Figura 2: Comunicación Modbus
A
continuación
se
muestra
una
representación
sencilla
de
una
trama
Modbus:
ID
CMD
INFO
CRC
1 Byte
1 Byte
n Bytes
2 Bytes
Figura 3: Trama Modbus RTU
o
ID (1Byte) es el número de esclavo, que hace las veces de dirección.
Es posible que haya dos dispositivos con el mismo slave number dentro de la
red, por lo que hay que tenerlo en cuenta a la hora de introducir un nuevo
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
6
dispositivo, y programar su dirección adecuadamente. Se permite direccionar
hasta un máximo de 63 esclavos con RS485.
o
CMD (1Byte) es el tipo de orden enviado al esclavo. Hay dos tipos
básicos de órdenes: Lectura/Escritura de/en los registros del esclavo y
órdenes de control (reset, start/stop, etc.)
Figura 4: Comandos Modbus
o
INFO (nBytes) definido anteriormente como PDU, contiene la
información necesaria para la ejecución de la orden indicada en CMD. Esta
puede estar organizada en dirección del primer byte, y número de bytes a
escribir o leer en caso de Lectura/Escritura o podrían ser códigos de
subfunciones para el caso de ordenes de control.
o
CRC (2Bytes) Mecanismo de control de errores de transmisión (cyclic
redundancy check)
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
7
2 Motivación del proyecto
2.1 Modbus sobre TCP
Existe un método para acceder remotamente a la red Modbus vía TCP/IP: el
protocolo Modbus/TCP. Éste no es más que una extensión de Modbus, introducida
por Schneider Automation, que encapsula el las tramas Modbus sobre tramas TCP
para permitir su envío y recepción a través de Internet o una intranet. De igual forma
que Modbus, es abierto y se ha convertido en el protocolo de facto para este tipo de
comunicaciones. A continuación se va a describir como se encapsularía en
Modbus/TCP una trama Modbus de petición o respuesta. Estas tramas poseen una
cabecera compuesta por 6 Bytes divididas en tres campos, como se aprecia en el
gráfico.
TRAMA
ID
CMD
ID DE PROT
LONGITUD
INFO
CRC
MODBUS
ID TRANS
TRAMA MODBUS
TRAMA
MODBUS/TCP
Figura 5: Trama Modbus RTU encapsulada sobre Modbus/TCP
Posición del Byte y su significado
Byte 0 - Identificador de transacción. Copiado por el servidor. Normalmente 0.
Byte 1 - Identificador de transacción. Copiado por el servidor. Normalmente 0.
Byte 2 - Identificador de protocolo = 0.
Byte 3 - Identificador de protocolo = 0.
Byte 4 - Campo de longitud (byte alto) = 0.Ya que los mensajes son menores a 256.
Byte 5 - Campo de longitud (byte bajo). Número de bytes siguientes.
Byte 6 - Identificador de unidad (ID), previamente dirección esclavo.
Byte 7 - Código de función Modbus (CMD).
Byte 8+ - Los datos necesarios.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
8
Las soluciones comerciales que utilizan Modbus/TCP ofrecen dos tipos de
arquitectura en función de en que lado se deseen situar los dispositivos maestros, si
en la parte Serie o en la parte TCP. La arquitectura más utilizada es aquella en la que
los dispositivos maestros, es decir, los dispositivos que solicitan la información de
los esclavos, están en la parte TCP.
Modbus Master 1
(Cliente)
Esclavo 1
INTERNET ó
INTRANET
TCP/IP
RS232
Modbus TCP
Modbus RTU
(Servidor)
(Maestro)
Esclavo 2
TCP/IP
Modbus Master 2
(Cliente)
RS485 /
RS422
Esclavo 3
Figura 6: Arquitectura Modbus/TCP. Maestros en el lado TCP
Para poder implementar el protocolo Modbus/TCP resulta necesario adquirir la pieza
fundamental que hace funcionar esta arquitectura, que es un elemento hardware que
cumple la función de pasarela entre el protocolo TCP y el protocolo Modbus. Este
gateway, normalmente y dependiendo de la empresa que lo proporcione, suele incluir
embebido un sistema de páginas Web que permite navegar a través de los
dispositivos de la red y mostrar el estado de sus registros como si estuviéramos
utilizando un terminal de operaciones. Otros gateways son programables, por
ejemplo en Java y/o permiten instalar aplicaciones o servidores Web en su interior,
optimizando así el uso de las características de un dispositivo concreto al que se
conecte.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
9
2.2 Uso del CP2003
El Multiconvertidor Programable CP200X es un equipo de la empresa española
SACI, que recibe señales de energía de una red eléctrica, las mide y procesa, y las
envía a distancia mediante tres salidas de tipo analógico, dos salidas de tipo digital
todo o nada y opcionalmente, una salida serie de comunicaciones con enlace hacia un
ordenador o dispositivo central de control, accesible mediante el protocolo Modbus.
Las salidas analógicas pueden ser configuradas para representar cualquiera de las
variables medidas. Asimismo, las salidas digitales pueden representar o bien
impulsos correspondientes a la energía consumida, o bien una señal de alarma sobre
alguna de las variables medidas.
SACI ofrece por medio de su página Web (http://www.saci.es) una herramienta
software para el manejo dentro de la red local del dispositivo. Por otra parte para
utilizar esta herramienta es necesario obtener previamente una licencia, de modo que
no puede utilizarse de forma gratuita, y no ha podido ser probada.
Red Eléctrica
Sistema de Control
CP2003
Figura 7: Conexión básica del CP200X
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
10
Datos de información técnica:
El empleo de microprocesador permite un proceso de medida totalmente digital. El
Microprocesador controla el convertidor A/D, toma las muestras, las almacena, y las
procesa, obteniendo los valores de las variables básicas, de la forma siguiente:
Ecuación 1: Ecuaciones de cálculo de medidas
I i2, j
Vi 2,j
∑
∑
Vi = 32 I i = 32 Si = Pi 2 + Qi2
(V
∑
P=
i, j
i
* Ii , j )
32
Qi =
∑ ((V
− 8) * I i , j )
i, j
32
Para la medida de frecuencia se dispone del temporizador programable del micro,
que mide el periodo de la señal de red, entre dos pasos por cero sucesivos. La
determinación
de
la
frecuencia
permite
que
el
microprocesador ajuste el tiempo de toma de muestras, de
forma que el equipo puede trabajar indistintamente entre
los extremos del rango 45 - 65 Hz.
Una memoria EEPROM tipo serie se encarga de almacenar
los datos de configuración del equipo, tanto en lo que se refiere a datos de usuario,
como a los de calibración del equipo. El multiconvertidor además ofrece tres tipos de
salida:
Serie: La salida de comunicaciones, puede ser bien RS232, o RS485. No esta aislada
respecto de la analógica S2, pero si del resto.
Analógicas: Las salidas analógicas se encuentran asimismo aisladas del resto de
circuitos, y disponen de una fuente de alimentación individual mediante
convertidores CC/CC.
Digitales: Dos salidas digitales a base de relés se pueden utilizar, para envío de
pulsos de energía a distancia, o como señales de contactos maniobrados desde el
PLC o PC.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
11
3 Motivación del proyecto
3.1 Desarrollo de un entorno para el desarrollo de aplicaciones remotas
Modbus
Este primer apartado justificara la creación de un sistema que facilite el desarrollo de
aplicaciones remotas en Java, para permitir el acceso a la red Modbus a través de
Internet o intranet.
La motivación más importante de esta primera parte del proyecto es que va a permitir
a futuros usuarios desarrollar fácilmente aplicaciones que trabajen sobre redes o
dispositivos Modbus, sin tener la necesidad de utilizar una solución comercial que
incorpore una pasarela, y evitando de esta forma tener que incluir otro dispositivo
hardware en la red, con el gasto y las complicaciones que eso implica. Solo será
necesario un ordenador típico con Microsoft Windows y un puerto serie típico
RS232 ó RS485, para que se conecte a la red y haga las veces de servidor, o de
gateway.
Muy importante es también, que no solo se pretende establecer una comunicación,
sino que se pretende desarrollar todo un entorno capacitado para recolectar
información de la red, y traspasar las fronteras del protocolo ofreciendo servicios de
control de acceso y de control y recuperación de errores, cosa que un protocolo sin
estados y sin capa OSI de transporte como es Modbus, no posee.
Además se pretende facilitar la labor de los programadores, evitándoles el estudio del
protocolo ya desarrollado Modbus/TCP, descrito con anterioridad, que sería
necesario para desarrollar cualquier aplicación remota. Muchos ingenieros y
desarrolladores de software industrial, no están familiarizados en comunicaciones
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
12
TCP/IP y ven cómo sus trabajos para la administración de estas redes típicamente
industriales, tienen que quedarse limitados al entorno físico de la red.
Gracias a esta utilidad Java, se podrá potenciar el desarrollo de aplicaciones remotas
por parte de todos desarrolladores que hemos mencionado antes, ya que pretendemos
abstraer al diseñador o programador de todo el entorno de comunicación de manera
que no tenga que preocuparse por ningún tema de protocolos de Internet. También
podremos asegurar que estos podrán abstraerse de trabajar a nivel de puertos serie.
Esto se suele llevar a cabo con una librería de comunicación serie de Java, de la que
no hay demasiada documentación, además de no ser intuitiva y no todas sus
utilidades funcionan correctamente en todos los entornos. Para facilitar aun más las
cosas, se dispondrá de una API que detalle las funcionalidades y operaciones que se
pueden realizar en la red. De esta manera, utilizar esta utilidad a la hora de programar
será tan fácil como pueda ser utilizar cualquier otra librería de Java mientras
programas.
Otra gran ventaja que ofrecerá esta utilidad es el amplio abanico de programas que
permitirá desarrollar, ya que de cara al usuario, las entradas y salidas básicas de
nuestra aplicación podrán recrear en su ordenador el funcionamiento de una
transacción típica Modbus. Esto significa que se podrán realizar desde programas
especializados orientados a un dispositivo Modbus en concreto, hasta programas
orientados a cualquier instrumento Modbus conectado a nuestra red RS485, pasando
por programas de administración de red, o incluso aplicaciones Web como las que
ofrecen empresas como Lantronix1 o Intellicom2 en sus gateways Modbus –
Modbus/TCP.
1
http://www.lantronix.com/
2
http://www.intellicom.se/
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
13
3.2 Desarrollo de aplicaciones Modbus remotas
Una vez justificado el desarrollo de una formula capaz de facilitar el acceso remoto y
la programación de aplicaciones remotas, debemos estudiar en que medida ofrecen
ventajas las aplicaciones remotas para redes y dispositivos Modbus.
o
La más evidente ventaja del acceso remoto, es que no es necesario un
desplazamiento físico hasta donde esté implementada la red, por lo que
inmediatamente se reducirán los costes de transporte y tiempo de todas las
operaciones de mantenimiento o control que se realicen normalmente
sobre la red o sobre un dispositivo.
o
La gestión de sistemas distribuidos se hace más sencilla usando las
tecnologías de Internet disponibles, por lo tanto conseguiremos mejorar
este aspecto.
o
Esta tecnología nos brinda también la posibilidad de mejorar el servicio a
los clientes. Los tiempos de respuesta se reducirán y podrán desarrollarse
nuevos servicios que carecían de sentido en un ámbito meramente local.
o
Por otra parte podremos aprovechar infraestructuras serie y TCP ya
creadas sin necesidad de modificarlas, y continuar ofreciendo conexiones
multipunto.
o
Mediante un Standard de comunicación universal como es TCP/IP y un
protocolo público Modbus, obtenemos una red realmente abierta, para un
intercambio y proceso de datos.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
o
14
Se ofrece la posibilidad de realizar conexiones remotas con equipos de
campo, pero no olvidemos que también se ofrece la posibilidad de realizar
conexiones locales por medio de la LAN (Local Access Network). Es
importante resaltar este aspecto, ya que el mercado de portátiles esta
dejando de incorporar rápida y progresivamente las conexiones serie tipo
RS232, que se venían incluyendo sus productos. La empresa hp
(http://www.hp.com) por ejemplo, ya no ofrece este tipo de conexión en
sus últimos portátiles, y es muy común ver como los últimos modelos de
las principales empresas, ya no implementan este tipo de puertos, que
como hemos visto, son muy necesarios en entornos industriales, en medida
de que la gran mayoría equipos de campo trabajan bajo protocolos serie,
más concretamente, Modbus. Todo esto, e incluyendo la incorporación de
tecnologías inalámbricas de acceso a redes Ethernet (WiFi), convierten
este tipo de aplicaciones, no solo en una solución a la falta de puertos
COM en los portátiles, sino una herramienta cómoda de conexión a redes
Modbus sin necesidad de cables.
Cliente #1 TCP/IP
Servidor TCP/IP
Esclavo #1 Modbus
Maestro Modbus
RS485
Esclavo #2 Modbus
Cliente #2
TCP/IP
Figura 8: Ventajas wireless aplicadas al mundo TCP - Modbus
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
15
3.3 Controlador remoto del CP2003
Dos puntos pueden resumir la motivación a la hora de crear una herramienta que se
comunique con el equipo CP2003 de SACI:
1. Necesidad de ofrecer un servicio: El origen de este proyecto surge de la
necesidad transmitida por el director de obtener un polling remoto de medidas
energéticas, sobre una red eléctrica y utilizando el dispositivo CP2003. Este
será proporcionado por el laboratorio de la Universidad Pontificia Comillas.
Como hemos visto anteriormente, SACI si proporciona una herramienta, bajo
licencia, de manejo de su equipo, pero ésta, además de ser de pago, no
proporcionaría acceso remoto.
2. Necesidad de probar la herramienta de desarrollo: Desde un punto de
vista más personal, esto representa una buena oportunidad para probar la
potencia y sencillez del sistema de desarrollo creado con anterioridad, en una
aplicación con un uso real, pudiendo así implementar las funciones y
utilidades de la API de nuestra herramienta de desarrollo.
Vamos a tratar de exponer un ejemplo típico en el que un control de energía de la red
eléctrica como el que ofrece CP2003 puede ser útil. Supongamos que el propietario
de un hotel está preocupado por el consumo y la calidad de su servicio, y no sabe
cuanto gasto le puede suponer mantener el aire acondicionado en servicio, por
ejemplo, durante los días fríos o de invierno. El dueño del hotel supone que si
mantiene encendido el aire en estas circunstancias, el consumo será menor que
durante el verano o los días calurosos, ya que mucha gente no hará uso de él. Sin
embargo también sabe que mantener encendido este servicio para todo el hotel
supondría un gasto. Sistemas como el CP2003 pueden ayudar a cuantificar esas
suposiciones y ayudar a justificar las decisiones que se tomen. Sin embargo este tipo
de operaciones no se llevarían a cabo si el dueño del hotel tuviera que ir al lugar
donde esta conectado a la red eléctrica el dispositivo y tomar nota de los datos. El
acceso remoto va a facilitar sustancialmente las operaciones administrativas de este
tipo.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
16
4 Identificación de Necesidades
4.1 Objetivos
A partir de este momento nos referiremos como RemModbus, a la herramienta que
se va a crear para permitir y facilitar el desarrollo de aplicaciones Modbus remotas
en Java, y como RemCP2003
4.1.1 Objetivos Generales
Desarrollar una aplicación que facilite el desarrollo de aplicaciones
Modbus sobre Internet o intranet. (RemModus)
Proporcionar acceso remoto a un conjunto de medidas realizadas al
dispositivo CP2003 (RemCP2003).
Desarrollar RemCP2003 utilizando RemModbus.
RemCP200X
RemModbus
Figura 9: Cooperación entre productos finales
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
17
4.1.2 Objetivos de RemModbus
Conseguir la comunicación básica Modbus: intercambio de PDUs.
Permitir, mediante una instanciación muy sencilla, el acceso de cualquier
aplicación Modbus a la red, de forma remota.
Permitir acceso múltiple a la aplicación.
Aplicación escalable.
Diseñar una arquitectura modular que permita incorporar fácilmente
varios dispositivos a la red.
Implementar esa arquitectura y permitir comunicar con varios dispositivos
Desarrollar una API que facilite la utilización de RemModbus.
Trasladar a nuestra aplicación de desarrollo todo el potencial y la sencillez
de la red Modbus que sea posible.
Establecer un control de acceso sobre la red.
Permitir a las implantaciones utilizar distintos niveles de usuario.
Permitir la implementación de un polling de tramas Modbus sobre la red.
Permitir el acceso a los resultados de dicho polling.
Utilidad de búsqueda automática de dispositivos Modbus conectados a la
red.
Ofrecer cierto reconocimiento y recuperación de fallos, necesario para
aplicaciones remotas, y no ofrecido por Modbus. Por ejemplo, solucionar
la colisión que se provocaría si se ejecutan dos peticiones al mismo
tiempo o reponerse ante una situación de no respuesta.
Ofrecer información sobre el estado de la red, o mejor dicho del sistema
que administra la red (RemModbus).
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
18
4.1.3 Objetivos de RemCP2003
Entendamos provisionalmente como RemCP2003 a cualquier aplicación que
haga uso de la red de forma remota y en concreto del CP2003, utilizando
RemModbus.
Creación del programa que permita, instanciando solo una clase, a
cualquier aplicación Modbus ya creada (por ejemplo la ofrecida por SACI
para CP200X), acceder a la red administrada por RemModbus y por tanto
a sus dispositivos de forma totalmente transparente.
Creación de una aplicación Java RemCP2003.
Creación de un Web Service RemCP2003.
Administración de usuarios.
Implementación de competencias según nivel de usuario.
Implementar la comunicación básica “request-response”.
Dar soporte al trabajo sobre varios equipos CP2003.
Administración de polling en función de las necesidades de cada
dispositivo.
Administración del sistema (RemModbus) que maneja la red Modbus, y
por tanto administración de la misma
Implementar la mayor cantidad de recursos disponibles en RemModbus
para conseguir una aplicación sólida y evaluar su potencia y versatilidad.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
19
4.2 Alcance de la aplicación
Se desarrollará en primer lugar la herramienta RemModbus con las funcionalidades
necesarias para dar soporte a los requerimientos de una aplicación remota que
necesita ser desarrollada. En el ámbito de este proyecto esta aplicación es la que
hasta ahora conocemos como RemCP2003.
Dado que uno de los objetivos consiste en probar y evaluar la sencillez, versatilidad y
potencial de RemModbus, se ha decidido dividir la segunda parte del proyecto,
consistente en la utilización de la herramienta (concretamente sobre CP2003) y en
lugar de desarrollar una sola aplicación que haga uso del máximo de funciones
posibles, se van a desarrollar tres tipos de aplicaciones modulares que tendrán
distintos objetivos.
De esta manera vamos a dividir lo que antes conocíamos como RemModbus en tres
aplicaciones modulares:
1. BridgeModbus: Nos va a permitir crear un puente entre un puerto COM
virtual del cliente y la red Modbus a la que nos conectaremos remotamente.
El objetivo de esta aplicación es permitir que cualquier programa ya
desarrollado y preparado para trabajar sólo en ámbito local, pueda hacerlo de
manera remota. Consistirá en la aplicación más sencilla de todas a la hora de
codificar, ya que solo tendremos que instanciar RemModbus y llamar a uno
de sus métodos.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
20
2. RemCP2003: Mantendremos el nombre original para aquella aplicación Java
que permitirá, en función del nivel de usuario, enviar o solo tramas definidas
con anterioridad o además tramas arbitrarias a juicio del usuario.
3. WebCP2003: Para demostrar la flexibilidad de RemModbus, se ha decidido
implementar un Web Service basado en él. Mediante esta herramienta Web
podremos acceder a parámetros de funcionalidad de la red, conocer su estado,
los dispositivos conectados, administrar el polling y administrar usuarios.
Todo ello en función también del nivel de usuario.
4.3 Tipología de los usuarios
A partir de la información recopilada hasta ahora ya se puede perfilar a qué tipos de
usuarios está dirigido este proyecto.
•
Usuarios de empresa: Cualquier usuario que necesite tomar medidas de
energía de una red eléctrica, por ejemplo un gerente para tomar decisiones
administrativas en función del consumo de una planta, o un analista
interesado en estudiar las variaciones de ciertas medidas como voltaje o
intensidad de un entorno eléctrico.
•
Usuarios comunes: Cualquier persona que tenga contratado un plan eléctrico
y sospeche que podría ahorrar más con otro más barato, pero no sabe
realmente cuanta energía utiliza, y por lo tanto no sabe que plan se adapta
mejor a sus necesidades
•
Programadores y desarrolladores industriales o relacionados con el protocolo
Modbus.
•
Usuarios de dispositivos o redes Modbus.
•
Usuarios de CP2003.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
21
4.4 Restricciones
El sistema presenta algunas restricciones importantes, algunos de ellos no a la hora
de desarrollar los productos, pero si a la hora de utilizarlos:
•
RemModbus en su versión Servidor, sólo funciona en Microsoft Windows. El
sistema se ha probado satisfactoriamente en XP SP2 y Vista.
•
BridgeModbus, al utilizar la misma tecnología que RemModbus, sólo
funciona en Microsoft Windows. El sistema se ha probado satisfactoriamente
en XP SP2 y Vista.
•
La base de datos de usuarios debe estar alojada en un servidor MySQL.
•
El servidor MySQL por defecto, se encuentra alojado en de la Universidad de
Westminster, Londres (“jdbc:mysql://rhino.cscs.wmin.ac.uk:3306/3sfe617”,
Usuario: 3sfe617, Contraseña: 3sfe617, nombre de la tabla de usuarios:
w1092467_user).
•
Para un correcto funcionamiento de RemModbus y BridgeModbus, se deben
instalar las librerías de comunicación de Java en las carpetas correspondientes
de la JRE.
•
Las entradas y salidas de RemModbus se efectuarán en forma de
java.lang.String, que comúnmente serán tramas Modbus con el siguiente
formato: 0x01-0x04-0x04-0xb5-0x00-0x01…
•
Dado que los PCs que implementan puertos COM, típicamente funcionan
sobre RS232, si se desea permitir la conexión de varios dispositivos se debe
crear una red RS485. Para ello el laboratorio ofrece convertidores hardware
RS232-RS485.
•
Para la ejecución del Web Service de WebCP2003, se necesitará Apache
Tomcat.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
22
5 Metodología de desarrollo
Método incremental o evolutivo. –
Como hemos venido estableciendo, este proyecto se divide en varias fases. Además y
como la mayoría de los proyectos cada fase se divide a su vez en distintas subfases,
que posiblemente estén formadas por distintas etapas.
Se han estudiado varios métodos existentes para ver cuál es la arquitectura de
metodología que mejor se adapta a la que hemos utilizado para el desarrollo del
proyecto. La que más se aproxima es denominada método incremental o evolutivo,
con el cual “se comienza el desarrollo satisfaciendo un conjunto de requisitos, una
base estable. Las siguientes versiones proveen los requisitos que faltan,
evolucionando el sistema fase a fase” [L01].
Primero se han definido unos principios
mínimos para poder codificar un primer
Fase n
modelo del núcleo del sistema sobre el que
Fase 2
poder trabajar. Posteriormente se ha dividido
Fase 1
en fases el proyecto estableciendo claramente
sus las competencias que debía abordar, y se
ha aplicado este modelo a cada una de esas fases, pudiéndose obtener de cada etapa
un realizar un primer modelo del núcleo del sistema y codificarlo. Esto se adapta
muy bien a nuestras necesidades ya que no teníamos certeza de cómo se desarrollaría
la aplicación, ni cómo íbamos a solucionar ciertos problemas de implantación.
Por otra parte el modelo evolutivo o incremental, se adapta muy bien a la
programación orientada a objetos, y dado que utilizamos Java para su desarrollo,
parece ser de nuevo la mejor opción.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
23
6 Recursos, herramientas y tecnologías empleadas
Para el desarrollo de en Java se ha utilizado
o Java 2 Standard Edition (J2SE) como lenguaje de programación.
o NetBeans IDE 5.5.1 como entorno de programación.
o NetBeans GUI Builder para el desarrollo de interfaces gráficas de
Java.Swing.
o Librería Java javax.comm para las comunicaciones serie.
o NetBeans Java Runtime Environment (JRE) como entorno de
ejecución.
o Notepad++ 4.5 para ediciones puntuales de código.
VSPD XP4, para establecer una conexión entre dos puertos virtuales.
Para el acceso a Bases de Datos (BBDD),
o Servidor MySQL para alojar la BBDD
o MySQL Administrator 1.2.12 para conexión, creación y edición de
tablas e información de mi BBDD
o MySQL Java Connector 5.1.6 para permitir a la aplicación Java
conectarse a la BBDD e interactuar con ella.
Para el diseño y planificación de la aplicación,
o Jude-UML 1.6.2 para la creación de diagramas.
o Microsoft Visio 2002
o Microsoft Project 2002
Para el desarrollo de este documento
o Microsoft Office XP
o Adobe Photoshop CS2 para la edición de gráficos
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
24
Se han utilizado varias tecnologías de comunicaciones
o TCP, Ethernet, 10/100BaseT
o Serie, Modbus, RS485
o Osciloscopio para el estudio de señales RS232 y RS485.
Para la comunicación Serie,
o CP2003
o PLCs y pupitre de mando para proporcionar mas funcionalidad al
CP2003
o Windmill comDebug y Hyperterminal para la captura e interpretación
de tramas Modbus.
Se han utilizado dos convertidores hardware,
o Convertidor USB – Serial
o Convertidor RS232 – RS485
Se ha desarrollado tecnología Web Service basada en Servlet y JSP
o Apache Tomcat para ejecutar el servidor Web
o Adobe Macromedia Dreamweaver CS2 para la edición de las páginas
JSP.
o Notepad++ 4.5 para ediciones puntuales de código.
o Adobe Photoshop CS2 para la creación y edición de imágenes.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
25
7 Estudio de la arquitectura
7.1 RemModbus y RemBridge
Como con toda aplicación Java se va a precisar de un entorno de ejecución tipo JVM
(Java Virtual Machine). También hemos visto en restricciones que estas dos
aplicaciones deben estar montadas sobre Microsoft Windows, debido a que el uso de
los puertos COM de unos sistemas operativos (OS) a otros. Con el fin de orientar el
producto al mayor número de usuarios posible, se ha pensado que era más útil
centrarse en Windows por encima de otros OS como Linux. Es por eso que se ha
decidido utilizar la librería JavaX (Java Standard Extension) Java Communications,
orientada a Windows.
Es necesario disponer de un puerto serie físico en el ordenador que ejecute
RemModbus y de dos puertos virtuales serie conectados entre sí en el ordenador que
ejecute RemBridge. Un convertidor USB-Serial y una aplicación de administración
de puertos virtuales, solucionarían este problema (no se proporcionan).
En caso de querer dar soporte a toda una red de dispositivos Modbus, será necesario
un convertidor de señal RS232-RS485 (proporcionado por la Universidad).
7.2 RemCP2003 y WebCP2003
Será necesario un entorno de ejecución JVM para estas dos aplicaciones. Se precisará
que el ordenador que aloje WebCP2003 no tenga el puerto 3306 bloqueado, ya que
las conexiones a la BBDD se realizan por ese puerto.
Lógicamente, es necesario al menos un CP2003.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Introducción
26
7.3 Arquitectura extendida de la aplicación.
Red
CP2003 #1
Cliente 1
Eléctrica
RS485
Servidor
RemModbus
RS232
CP2003 #2
Convertidor
RS232/RS485
Router
RS485
10/100BaseT
TCP/IP
Dispositivo
Modbus
Cliente 4
Cliente 2
WebCP2003
RemCP2003
Usando
Cliente 3
RemModbus
Figura 10: Diseño ampliado de la arquitectura
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
27
Capítulo 2 REMMODBUS
1 Introducción
En este capítulo tiene como propósito centrarse en el diseño, fases y programación de
RemModbus, ya que a partir de este punto las dos partes del proyecto dejan de tener
los suficientes elementos comunes como para ser tratadas por igual.
Como esta aplicación trabajará sobre una red Modbus es interesante concretar un
aspecto de Modbus que no se mencionó con anterioridad y que hay que tener en
cuenta a la hora de diseñar. Existen dos variantes, con diferentes representaciones
numéricas de los datos y pequeñas diferencias en el control de trama. “Modbus RTU
es una representación binaria compacta de los datos mientras que Modbus ASCII es
una representación legible del protocolo pero menos eficiente” [19]. Ambas
implementaciones del protocolo son serie. El formato RTU finaliza la trama con un
suma de Control de Redundancia Cíclica (CRC, 2 Bytes), sin embargo en ASCII se
añade un carácter de encabezamiento («:» = 0x3A) y los caracteres CR y LF
(Carriage Return y Line Feed, 0x0D0A, que al trabajar con Big Endian de 16 bits se
traduce en dos campos de dos Bytes: 0x0D 0x0A) a continuación del PDU. La trama
ASCII se finaliza con una suma de Control de Redundancia Longitudinal (LRC, 1
Byte).
‘:‘ (0x3A)
ID
CMD
INFO (PDU)
CR
LF
LRC
Figura 11: Trama Modbus ASCII
Dado que el formato utilizado por SACI para CP2003 es el RTU y ademas es el más
extendido, las aplicaciones se han orientado a este tipo de formato, por lo que NO se
permite la comunicación Modbus ASCII en este proyecto
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
28
2 Diseño
RemModbus va a estar dividido en dos subprogramas, que funcionarán bajo una
arquitectura Cliente/Servidor que se comunicarán entre ellos mediante un protocolo
propio diseñado expresamente para RemModbus.
El programa Servidor se encargará principalmente de recibir y validar las conexiones
entrantes, así como de la transmisión serie de tramas y la administración del estado
de la red. Recordemos que el protocolo Modbus es un protocolo sin estados ni nivel
de transporte. Esta aplicación nos va a permitir establecer ciertos principios de
control y estado.
El programa Cliente, de cara al usuario, consistirá en una clase a instanciar que
permita la utilización y el acceso a la información ofrecida por el Servidor, mediante
el uso de sus métodos y de forma totalmente transparente al usuario, en función de
las necesidades del usuario.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
29
2.1 Diseño de la Base de Datos
Como veremos a continuación no se precisa una lógica muy desarrollada para el
diseño de este apartado ya que tan solo necesitaremos una tabla en la que podamos
albergar un conjunto de usuarios, sus contraseñas, y el nivel que tienen. No obstante
se especificará aquí por si se requieren modificaciones posteriores.
Diseño lógico de la Base de Datos
•
w1092467_user
(NAME, PASS, PERMISSION)
El nombre de la tabla está adecuado a las normas de la Universidad de Westminster.
NAME
Será el alias del usuario. Se definirá como clave primaria.
PASS
Guardará la contraseña del usuario.
PERMISSION
Nivel del usuario. A discreción de los programadores finales
Definición SQL de las tablas
CREATE TABLE w1092467_user (
NAME
VARCHAR (20) NOT NULL,
PASS
VARCHAR (20) NOT NULL,
PERMISSION
VARCHAR (20),
PRIMARY KEY (NAME);
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
30
2.2 Diseño del protocolo RemModbus
Se ha diseñado un protocolo que se adapte perfectamente a las necesidades de
comunicación entre los programas Cliente y Servidor del paquete RemModbus. Esta
comunicación comúnmente se iniciará por parte del cliente, que requerirá algún tipo
de acción por parte del servidor.
1. Trama de acción
3. Trama de confirmación
2. Proceso
Cliente
Servidor
Figura 12: Protocolo RemModbus
En el ejemplo vemos como un cliente envía una trama RemModbus al servidor
pidiéndole algún tipo de acción. Esta acción puede consistir desde un proceso
complicado como el de conexión hasta una consulta puntual de un estado concreto de
la red, o por supuesto una transmisión de una trama Modbus.
CABECERA
DATOS
LONGITUD
Figura 13: Trama RemModbus
A continuación estudiaremos el diseño y la funcionalidad de las tramas RemModbus.
El protocolo esta diseñado para que cada trama enviada, reciba al menos una trama
de respuesta por parte del receptor de la trama, ya sea para indicar que la operación
ha tenido éxito o para notificar del error. Esto nos ofrece la información necesaria
para tener la posibilidad de implementar un sistema de detección y recuperación de
errores donde antes no se podía.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
31
Se permitirán cuatro tipos distintos de operación en el servidor, en función del valor
de “CABECERA”, que tendrá un tamaño de 4 Bytes. Si es de tipo:
i.
CON, se estará iniciando un proceso de conexión.
ii.
SYN, se esta enviando o solicitando información al servidor para
mantener sincronizados tanto a cliente como a servidor. Las distintas
subclases de las tramas de sincronización se abordarán en la parte de
programación de este mismo capítulo
iii.
DAT, la información del campo de DATOS será normalmente una
trama Modbus, que tendrá como finalidad ser transmitida en la red de
destino.
iv.
DAO, estamos hablando de un intento de acceso a la BBDD para
consulta o modificación de usuarios.
Los valores comunes a cliente y servidor son todas aquellas tramas cuya cabecera sea
de tipo:
v.
ACK, o cualquiera de sus variantes: NACK. ACK_DAT, etc.
El campo “LONGITUD” de 4 Bytes, como su propio nombre indica nos va a
permitir saber hasta donde tenemos que leer para obtener el resto de la trama. Esto
significa que vamos a poder enviar en el campo de “DATOS” hasta 2 32 − 1 Bytes, lo
cual cubre de sobra nuestras necesidades.
Finalmente el campo “DATOS” contendrá la información necesaria para la
operación que se precise, ya sea en la parte del servidor como en la parte del cliente.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
32
2.2.1 Proceso de conexión y establecimiento de usuario:
Intercambio de tramas. Formato:
CLIENTE
CABECERA (DATOS)
(acción)
SERVIDOR
(acción)
1. CON (usuario + contraseña)
0. Establecer conexión sobre
puerto de escucha
0. Escuchando en el puerto de
escucha “well known”
2. Validación de usuario.
4. ACK_CON (puerto + nivel de usuario)
3. Cálculo de Puerto
5. Se termina la conexión con
el cliente del puerto well known
5. Establecer escucha en el
puerto recibido
6. Escuchando en dicho puerto
4. ACK_DAT (puerto + nivel de usuario)
6. Primer envío de información:
Lista de dispositivos
conectados.
Figura 14: Establecimiento de conexión en el protocolo RemModbus
Para implementar un sistema que permita la conexión simultánea de varios usuarios a
la red se ha optado por un sistema en el cual a cada conexión se le establece un
puerto en el servidor, que además nos servirá de identificador. Para resolver el
problema de cómo sabe el cliente que puertos están libres en el servidor, utilizamos
una pequeña modificación en el concepto de la conexión: el cliente inicia una
conexión sobre un puerto well known (conocido de antemano) del servidor, sobre el
que tiene la certeza que esta escuchando. A continuación el servidor, tras hacer las
validaciones oportunas de usuario (conexión a la BBDD y comprobar si es correcto),
si todo ha funcionado bien, enviará una trama ACK_CON con el puerto asignado a la
conexión, y el nivel del usuario validado, obtenido de la base de datos. Es decir, se
cerrará la conexión sobre el puerto de escucha, y será el servidor el que inicie la
conexión sobre el cliente. En caso de que la validación de usuario no sea positiva, se
enviará una trama NACK, y no se seguiría con el proceso. Posteriormente el servidor
volverá a enviar una trama por la nueva conexión. La trama será en este caso de tipo
ACK_DAT y contendrá la última actualización de la lista de dispositivos conectados.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
33
2.2.2 Otras transacciones cliente – servidor. Lógica de confirmaciones.
Después de comprender el funcionamiento de la lógica de conexión se puede pensar
que el protocolo es complejo y poco amigable a la hora de trabajar con el. Sin
embargo, el protocolo no solo es fácil de entender como veremos ahora, sino que
también es fácil de programar y utilizar, como veremos mas adelante.
Toda la lista de transacciones que veremos más adelante sigue siempre la misma
lógica, basada en la trama de confirmación recibida.
1. CAB (DATOS)
0. Realizar operación de tipo
CAB en el Servidor
1. ACK_CAB (void)
2. Procesar operación de tipo
CAB en el Servidor
1. CAB (DATOS)
0. Realizar operación de tipo
CAB en el Servidor
1. ACK_DAT (DATOS)
2. Procesar operación de tipo
CAB en el Servidor
1. CAB (DATOS)
0. Realizar operación de tipo
CAB en el Servidor
3. NACK (void) o NACK_DAT (DATOS)
2. Procesar operación de tipo
CAB en el Servidor
Figura 15: Lógica de confirmaciones del protocolo RemModbus
Si la operación en el servidor ha sido satisfactoria, se enviará una trama de
confirmación ACK_CAB (donde CAB es el tipo de trama enviada originalmente) en
caso de que no se necesite información adicional o ACK_DAT, en caso contrario. Si
la operación no ha podido llevarse a cabo por alguna razón, se transmite una trama
de tipo NACK, o NACK_DAT, siguiendo la misma lógica.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
34
2.2.3 Lista de transacciones
Tipo CON: (transacción vista con anterioridad)
CON + Usuario y Contraseña.
ACK_CON + Puerto
Tipo SYN:
SYN_POLON :
Arranca o detiene el polling. Devuelve el estado.
SYN_POL:
Devuelve en que estado se encuentra el polling.
SYN_POLDAT + lista polling:
Actualiza la lista de polling en el server.
SYN_CON:
Desconecta al usuario del puerto de la conexión.
SYN_FIN:
Devuelve la última revisión de los dispositivos conectados.
SYN_FINON:
Arranca el proceso de búsqueda de dispositivos. Devuelve el tiempo estimado
para la finalización del proceso.
SYN_CAN:
Permite al usuario renunciar a la siguiente trama que fuera a recibir.
SYN_ETA:
Devuelve el tiempo estimado para que el servidor se quede sin ninguna
ocupación, o NACK si ya está libre.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
35
Tipo DAT:
DAT + trama:
Envía a la red Modbus trama, y devuelve la respuesta de la red. Mediante
esta trama si el servidor esta ocupado atendiendo alguna labor administrativa
como la búsqueda de dispositivos, se cancela el envío a la red Modbus y se
devuelve NACK + ETA (Estimated Time of Arrival).
DAT_ABS: + trama:
Funciona de la misma forma que DAT a excepción de que si hay un proceso
funcionando, la petición se encola y el cliente debe esperar su turno. Una vez
enviada la trama no se puede cancelar la ejecución de la trama.
Tipo DAO:
DAO_UPD + nombre, campo a cambiar y nuevo valor del campo:
Nos permite editar el valor del campo indicado, del nombre de usuario.
DAO_DEL + nombre:
Nos permite eliminar el usuario indicado.
DAO_ADD + nombre, contraseña y nivel de usuario:
Crea un usuario con los parámetros indicados.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
36
2.3 Diseño de RemModbus Servidor
Esta versión del paquete RemModbus hará de representante del dispositivo maestro
que desee interactuar con la aplicación. Debe ser instalada en un ordenador
conectado a la red Modbus, normalmente mediante RS232. Para el uso de varios
dispositivos dentro de la red se recomienda utilizar un convertidor de señal RS232RS485 como los que ofrece el laboratorio de la universidad. La aplicación tiene tres
partes muy bien diferenciadas, la primera, de acceso a los puertos serie del
ordenador, y a la información que se transmita o reciba de ellos, y la segunda, de
procesamiento de conexiones entrantes, y una última que interprete las ordenes se
reciban de los clientes conectados.
2.3.1 Lógica del enlace físico con los puertos del protocolo Serie.
Diagrama 1: Enlace a puertos serie
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
37
2.3.2 Lógica de conexión de equipos remotos
Diagrama 2: Procesador de conexiones entrantes
2.3.3 Diseño de control de estado de la red.
Para implementar un sistema de control de estado, que permita conocer en todo
momento detalles concretos de la red, se va a crear una clase que albergue todo este
tipo de información. Adelantamos que el nombre de esta clase va a ser Estado.java.
Es imperativo para el correcto funcionamiento de la aplicación que esta clase se
mantenga actualizada en todo momento, ya que será de alguna manera la base de
datos de la red, y la referencia a la que acudirán otros procesos y programas para
realizar sus operaciones. A partir de ahora conviene distinguir entre conexión o uso
de la red (Modbus), que será interpretado como uso físico del RS232 o RS485 y
conexión y uso del sistema, entendiendo por sistema ‘RemModbus’. Empecemos por
establecer a continuación cuales serán las competencias de esta clase.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
38
Acceso a la red Modbus.
o Que
tipo
de
proceso
esta
utilizando
la
red
actualmente
(transmitiendo), si es que se da el caso. Entendemos por tipo de
proceso, un usuario accediendo a la red, el proceso de polling, o el
proceso de descubrimiento de dispositivos.
Administración del polling. Saber en todo momento si,
o Hay intención de hacer polling, aunque no se este ejecutando porque
este otro proceso ejecutándose.
o El polling se está ejecutando.
o Cual es la lista de tramas que lo conforma
o Cuales son las respuestas obtenidas a esa lista de tramas
Administración de usuarios. Saber en todo momento,
o Que usuarios están conectados y a través de que puerto.
o Cuales de ellos desean transmitir.
o Ofrecer desconexión.
Administración de cola de acceso a la red Modbus. Hay que considerar,
o No todos los dispositivos pueden transmitir. Hay que desarrollar un
método de acceso a la red.
o Ofrecer métodos para sumarse a la cola.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
39
Administración de los dispositivos conectados
o Ofrecer un sistema común para todos los dispositivos Modbus que
permita el descubrimiento de los dispositivos de la red.
o Estado de dicho sistema. Si está en marcha o no.
o Que dispositivos están conectados.
o Tiempo estimado para que termine el proceso de finding
(descubrimiento)
o Posibilidad de introducir manualmente los dispositivos
Información y actividades relacionadas con el enlace a la red Modbus.
o Obtención de canales físicos de transmisión.
o Métodos de transmisión y recepción de tramas.
Control de los tiempos de respuesta de tramas a una request sobre un equipo.
o Utilizado para deducir si la red ha contestado a una determinada
trama.
Estado de la conexión TCP/IP y Modbus
o Está el sistema conectado a la red o no.
o Está el sistema escuchando en el puerto de escucha o no.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
40
2.3.4 Lógica de colas.
Como Modbus no ofrece mecanismo control de envío, ni de acceso a la red, ni de
recuperación y retransmisión de tramas, tenemos que buscar una solución para evitar
el problema que se plantea ante la situación en la que se transmitan varias tramas al
mismo tiempo, o antes de que el primer emisor haya recibido su respuesta.
Intentaremos representar el problema real de cualquier red Modbus con varios
maestros accediendo simultáneamente, con un ejemplo.
Usuario #1
Dispositivo #1
RS485
Usuario #2
Dispositivo #2
Figura 16: Red Modbus
Hipótesis: El usuario #1 (u1) transmite una trama 0x01-0x01-0x01 a la que en
condiciones normales el
dispositivo #1 (d1) contestaría 0x11-0x11-0x11. De la
misma forma el usuario #2 (u2) transmite una trama 0x02-0x02-0x02 a la que en
condiciones normales el dispositivo #2 (d2) contestaría 0x22-0x22-0x22.
[1] Supongamos que u1 transmite e inmediatamente lo hace u2. De cara a d1 y d2
se recibiría una sola trama formada por una mezcla aleatoria de los bits de la trama
de u1 y de la trama de u2, por lo que aunque los dos dispositivos recibirán la trama
ninguno sabrá procesarla y no se obtendrá respuesta.
[2] Supongamos que u1 transmite y d1 reconoce la trama. Mientras u2 ha
transmitido y su trama llega a d2 justo después de que d1 reconociera la trama, con lo
que d2 también la reconoce. Por lo tanto tenemos otra colisión formada por las
respuestas, por ejemplo 0x11-0x22-0x11-0x11-0x22-0x22. Los usuarios no podrán
interpretar la respuesta. Además ¿quién recibe la trama? ¿u1, u2, los dos o ninguno?
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
41
Además se puede dar la posibilidad de antes de que u1 reciba la respuesta de d1 y
éste ya haya contestado, u2 transmita. Recordemos que RS232 es un medio halfduplex (la información puede viajar en un sentido o en otro, pero no al mismo
tiempo) por lo que debemos evitar esta situación en la solución que ofrezcamos, y
hacer que la red Modbus completa (incluyendo RS485) funcione en modo halfduplex.
Si recordamos el aspecto de nuestra arquitectura y la enfrentamos a una típica como
la del ejemplo anterior vemos que la principal diferencia reside en que nuestra
arquitectura provee a la red Modbus de un solo dispositivo maestro real
(RemModbus) al que se conectan los maestros potenciales. Esto nos va a permitir
crear un cuello de botella para administrar quién entra a la red en cada momento.
Requerimientos funcionales para el acceso a colas:
R01 – Para conexiones modulares de usuario, que constan de un input y un output,
se utilizara un sistema FIFO (First In First Out)
R02 – Toda transmisión modular ya transmitida debe terminar su ejecución y
esperar a la respuesta de la red.
R03 – El proceso de descubrimiento de dispositivos, se considera una acción de
actualización del sistema, que debe ejecutarse antes que cualquier proceso
que esté en la cola.
R04 – Cualquier proceso tiene una prioridad mayor que el polling. Es decir, el
polling solo se ejecutará si no hay nada que precise ejecutarse.
A continuación veremos su aplicación en los métodos que acceden a la red:
Comunicación Modbus, Descubrimiento de dispositivos y Polling
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
42
2.3.5 Lógica de la comunicación Modbus.
Diagrama 3: Comunicación Modbus
Recordemos que cada trama Modbus transmitida obtiene una o ninguna respuesta en
función de si ha sido reconocida y aceptada por el equipo Modbus o no. Este
diagrama muestra también la implicación del cliente, desde la recepción de una trama
DAT enviada por él, hasta el envío de la respuesta obtenida de la red. Nótese además
la implantación de la lógica de la diferencia entre DAT y DAT_ABS explicada con
anterioridad. Hay que destacar también la implicación del sistema de colas para el
usuario, recordemos, FIFO.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
43
2.3.6 Diseño de control de obtención de respuestas.
Estudiando el diagrama anterior observamos que la finalización de la aplicación,
depende de que la red conteste a la trama, pues el programa quedaría bloqueado en
“Recibir trama” hasta que haya respuesta. Esto se debe a la implementación de otro
sistema de control de la red que se ha implantado. El objetivo es que si al cabo de un
cierto tiempo no se ha leído la trama, supongamos que hubo un error y actuemos en
consecuencia. Esto se conseguirá imponiendo un timeout a la instrucción de lectura.
Diagrama 4: Timeout
Vemos que en caso de no recibir nada, creamos una trama ficticia con el valor
binario ‘0’, aquí representado en hexadecimal 0x00.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
44
2.3.7 Lógica del descubrimiento de dispositivos conectados a la red (Finding).
Vamos a definir el proceso de finding como una actualización de estado, para el
correcto funcionamiento del sistema, por lo que es se supone que si se ha ejecutado,
es porque se sospecha que la lista de dispositivos del sistema ha quedado obsoleta.
Por tanto vamos a establecer el siguiente requisito funcional:
R05 – El proceso de descubrimiento de dispositivos no puede ser interrumpido por
ningún usuario o proceso hasta su correcta terminación.
Diagrama 5: Finding
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
45
2.3.8 Lógica del polling.
A diferencia del finding, el este proceso si que puede ser detenido o interrumpido. De
hecho no tiene sentido que no lo sea, ya que es un proceso infinito por definición. La
solución que se ha adoptado para permitir este tipo de ejecuciones en nuestro
sistema, es aceptar listas de tramas del usuario, y establecer si se ejecutan o no. De la
misma forma que se reciben las listas de tramas, se ofrecerá la posibilidad de
recuperar una lista con las respuestas obtenidas a esas tramas, por lo que es muy
importante mantener un control sobre qué trama request obtiene qué trama response.
Como es lógico cualquier transacción o proceso se ejecutará antes que cualquier
transacción de polling respetando R04. Además añadimos otro requisito funcional,
que se antoja evidente, pero que hay que tener en cuenta a la hora de programar.
R06 – El proceso de polling que es detenido por otro proceso o transacción, debe ser
reactivado al terminar dicho proceso o transacción.
Diagrama 6: Polling
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
46
2.3.9 Lógica de transmisión de tramas. CRC.
Hemos visto como generábamos un cuello de botella para el acceso a la red y luego
invocábamos al envío y recepción de tramas. Hay que recordar que estamos
utilizando una modalidad de Modbus llamada RTU, cuya peculiaridad es que termina
sus tramas con una suma de control de redundancia cíclica. Se ha de desarrollar una
función que calcule y añada este CRC al final de cada trama. Esta función debe de
estar preparada para el formato de datos utilizado por el sistema. Además hay que
tener en cuenta que no consiste en un típico CRC de 32 bits, sino que es de 16 bits.
Diagrama 7: Cálculo del CRC
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
47
2.4 Diseño de RemModbus Cliente
El objetivo del cliente se concentra en conectarse a la aplicación servidor de
RemModbus y hacer uso de sus funciones a través del protocolo RemModbus
detallado con anterioridad. Esta aplicación deberá ser instanciada por otra aplicación
Java en el ordenador cliente que desea utilizar los servicios de la red que administra
RemModbus. Por lo tanto ha de ser codificada de tal forma que su instanciación
resulte lo más sencillo posible para el programador. Hay que señalar que
RemModbus no tiene en cuenta el nivel de usuario a la hora de ejecutar operaciones,
ya que considera que es competencia de los programas que utilicen sus servicios.
Mediante su instanciación se debe poder permitir
Establecer una comunicación Modbus. Consultar el protocolo Modbus para
ver los distintos tipos de comunicación (operaciones DAT)
Obtener los datos del usuario, sobre todo el nivel de usuario para poder
permitir actuar en consecuencia al programador.
Obtener los equipos conectados de forma pasiva (sin forzar actualización).
Obtener los equipos conectados de forma activa (forzar actualización).
Actualizar las tramas de polling en el servidor.
Obtener resultados del polling.
Obtener tramas de polling actuales del servidor.
Ejecutar y detener polling y/o obtener su estado.
Ejecutar finding y/o obtener su estado. Obtener ETA en caso de que este
funcionando el proceso.
Establecer un puente entre un puerto COM del usuario y la aplicación.
Desconexión del usuario.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
48
3 Programación y pruebas
Antes de comenzar a programar necesitamos instalar las librerías a utilizar:
javax.comm consta de tres archivos. Instalar en las rutas especificadas.
- win32com.dll: guardarlo en la carpeta ..\Java\jdk\jre\bin
- javax.comm.properties: copiarlo en la carpeta ..\Java\jdk\jre\lib
- comm.jar: copiarlo en la carpeta ..\Java\jdk\jre\lib\ext
La instalación suele dar problemas en función de a donde está apuntando
realmente la JRE o la JDK, y de cuál de ellas se está utilizando para la
ejecución. Se recomienda consultar la FAQ de la API de comunicaciones de
Java [20]. Esta instalación será obligatoria para el equipo que desee utilizar
tanto la versión servidor de RemModbus como mas adelante veremos,
RemModbus.
mysql_connector también será utilizado por el servidor RemModbus.
Importar los paquetes necesarios.
Diagrama 8: Organización de RemModbus
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
-
49
pfc_dsm.RemModbus.Inet contendrá las herramientas necesarias para
el protocolo RemModbus, por lo que deberá ser importado por cliente
y servidor, puesto que ambos utilizan sus servicios.
-
pfc_dsm.RemModbus.DAO incluye la lógica de las conexiones a la
BBDD. Puesto que sólo el servidor hace uso de operaciones de este
tipo, será el único que precise importarlas.
-
pfc_dsm.RemModbus.Modbus sirve para acceder al protocolo serie y
establecer un enlace con él. Debe ser importado por el servidor en
cualquier caso y por el cliente cuando necesite crear un puente virtual.
-
pfc_dsm.RemModbus.Utilidades
deben
seguirse
las
mismas
directrices que para pfc_dsm.RemModbus.Modbus.
A pesar de que la API de javax.comm ofrece un sistema de eventos para la recepción
y envío de datos a través del puerto serie, se ha descubierto que no funcionaba
correctamente en algunos casos puntuales, necesarios para desarrollar la aplicación
como estaba disñado. Es por eso que han tenido que ampliarse ligeramente las
competencias de la clase Estado.java y bloquear los procesos con bucles en lugar de
con eventos. Sin embargo el resultado ha sido satisfactorio.
Durante este capítulo se explicarán únicamente la finalidad o funcionamiento de las
funciones o métodos que, o bien no tengan un nombre intuitivo, o bien su desarrollo
a la hora de programar tenga algún aspecto interesante. Tampoco se incluirán todas
los métodos en los diagramas o en los apartados.
Se ha tomado la decisión de estandarizar cualquier proceso de intercambio de datos
entre programas y procesos, independientemente de cómo trabajen internamente.
Además se ha optado porque el intercambio de tramas Modbus sea el interpretado
generalmente para estas redes. Es decir como suelen utilizarse lógicamente los datos
de una trama Modbus.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
50
Requisitos no funcionales
NF01 – Las comunicaciones entre programas y procesos se realizaran por medio
de cadenas de caracteres, enviándolas y recibiéndolas como objetos
java.lang.String.
NF02 – Elementos de una lista se enviarán separados por el carácter ‘&’ o por el
juego de caracteres ‘---‘ en el caso de la conexión.
NF03 – Las tramas serán enviadas y recibidas en todo el entorno RemModbus
como agrupaciones
de 16 bits
e interpretadas
como números
hexadecimales con el siguiente formato: 0xAA donde AA representa el
valor hexadecimal.
NF04 – Cada una de estas agrupaciones se separará de la siguiente mediante el
carácter ‘-‘.
NF05 – La lógica de separación de NF04 se hará extensible a cualquier juego de
elementos de una misma entidad lógica.
NF06 – La aplicación se desarrollara en J2SE.
NF07 – Se usará MySQL para el almacenamiento.
Localizado en rhino.cscs.wmin.ac.uk/3sfe617
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
51
3.1 Programación del acceso a la BBDD
3.1.1 Diagrama de clases
Diagrama 9: Conexión a la base de datos
Se ha decido crear, una clase abstracta DAO que se encargue de almacenar la
información relativa a la BBDD y otra clase que herede de ella, que se ocupe de las
labores administrativas de la base de datos como puede ser
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
52
3.2 Programación del protocolo RemModbus
Para la utilización del protocolo se van a utilizar las herramientas que se han
desarrollado para esta parte del proyecto. Estas están alojadas en el paquete Inet
[Diagrama 8: Organización de RemModbus], que consiste en tres clases:
TramaInet.java, TramaInetIS.java y TramaInetOS.java.
3.3.1 TramaInet.java
Nos dará la oportunidad de instanciar las tramas para acceder fácilmente a sus
campos. A continuación se muestra la parte del código que codifica el tipo de tramas
y el diagrama de clase correspondiente.
public static final int CON
= 29;
public static final int ACK_CON
= 19;
public static final int ACK_DAT
= 39;
public static final int DAT
= 2;
//+trama Modbus. Con finding devuelve ETA
public static final int DAT_ABS
= 1;
//+trama Modbus. Se trans. tb con finding
public static final int SYN_POLON
= 49;
//Pregunta el estado del polling
public static final int SYN_POLRUN
= 48;
//StartStop polling de forma remota
public static final int SYN_FIN
= 46;
//pide la lista de ids
public static final int SYN_FINON
= 44;
//Start finding de forma remota
public static final int SYN_POLDAT
= 47;
//En DAT va la lista de polling
public static final int SYN_POL
= 45;
//pide la lista de poll
public static final int SYN_CON
= 41;
//desconecta al user (logout)
public static final int SYN_CAN
= 42;
//renuncia a la sig.trama respuesta
public static final int SYN_ETA
= 43;
//pide ETA
public static final int ACK_SYN
= 59;
//Ready+lista polling actual u otro
public static final int NACK
= 90;
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
53
public static final int NACK_DAT
= 99;
public static final int MAXDATA
= Integer.MAX_VALUE;
protected int tipo;
//almacena el tipo de trama. uno de los de arriba
protected byte[] datos; //el campo INFO del protocolo Modbus
protected int longitud; //hasta donde hay que leer.
Organización de métodos:
Diagrama 10: TramaInet
Cabe destacar la posibilidad de obtener el campo de datos como String o como
byte[].
3.3.2 TramaInetIS.java y TramaInetOS.java
Diagrama 11: TramaInetIn y TramaInetOS
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
54
Estas dos clases nos van a permitir establecer los canales por los que vamos a enviar
y recibir la información proveniente del protocolo RemModbus.
Gracias a este paquete, nos va a resultar muy sencilla la comunicación con el
protocolo Modbus. Lo primero que debemos hacer es crear los TramaInetIS y
TramaInetOut de la forma siguiente
Socket in = new Socket(…)
//creación de canales tis y tos (entrada y salida)
TramaInetIS tis = new TramaInetIS(in.getInputStream());
TramaInetOS tos = new TramaInetOS(in.getOutputStream());
Una vez creados los canales, cada vez que se quiera recibir o enviar una trama, solo
habrá que hacer uso de los métodos correspondientes. Respectivamente:
//Ejemplo de lectura de trama RemModbus
TramaInet trama = tis.readTramaInet();
//Ejemplo de escritura de trama RemModbus
tos.writeTramaInet(new TramaInet(TramaInet.NACK_DAT, “0x00-0x00”));
//En caso de querer ver que tipo de trama sigue sin leerla realmente:
int tipoSiguienteTrama = tis.siguienteTipoTramaInet();
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
55
3.3 Programación de RemModbus Servidor
El servidor RemModbus tendrá un aspecto similar al siguiente [Figura 17], desde el
que inicialmente podremos en primer lugar, conectarnos a la red Modbus o a la red
TCP/IP. En términos de programación se refiere a crear un nuevo Enlace.java y un
nuevo Server.java. También podremos ejecutar el polling o el finding. También
podremos falsear el proceso de finding si conocemos de antemano las direcciones de
los dispositivos conectados3.
Figura 17: RemModbus Servidor
3
No se ha implementado ningún mecanismo de detección de errores de formato por lo que hay que
tener cuidado a la hora de insertar las direcciones o el sistema se comportara de forma errática.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
56
3.3.1 Programación de gestión conexión con protocolo serie: Enlace.java
Diagrama 12: Enlace.java
Se solicita información del usuario, para establecer los parámetros de conexión a la
red serie. Los parámetros pedidos son tales como puerto COM al que desea
conectarse, velocidad de transmisión, bits de parada, control de flujo, bits de parada,
etc. A continuación creará la conexión4 utilizando la API javax.comm y establecerá
los canales de entrada y de salida típicos.
3.3.2 Programación de gestión de conexiones remotas
3.3.2.1 Server.java
Se encargara de recibir las conexiones entrantes, decidir si son o no aceptadas
y arrancar un servidor personalizado para cada conexión aceptada.
Diagrama 13 Server.java
4
Al crearse una conexión serie, el puerto queda bloqueado no permitiéndose más conexiones sobre él
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
57
El servidor de conexiones entrantes está montado sobre un Thread, bloqueado
dentro de un bucle infinito en la instrucción 3
1 int listeningPort = 9999
2 ServerSocket hall = new ServerSocket(listeningPort,10);
3 Socket in = hall.accept();
Vemos que Server escucha siempre en el puerto well known ‘9999’. Una vez
validado el acceso, se calculara un puerto en el rango [8000 – 8030], en
función de los puertos que se estén utilizando. Esto significa que solo
aceptaremos hasta 30 conexiones remotas. Si se llega al límite se envía una
IOException. Con ese puerto calculado y la dirección IP del cliente, creamos
una nueva ServerSession
3.3.2.2 ServerSesion.java
Diagrama 14. ServerSession.java
El constructor de ServerSession es el encargado real de crear la nueva
conexión. Una vez creada, envía de acuerdo al protocolo RemModbus la
trama de dispositivos conectados. Se arranca el Thread, que queda bloqueado
de la misma manera que Server.java. A partir de este punto recibe las tramas
del protocolo RemModbus, y actúa en consecuencia tras interpretar el tipo de
trama. Típicamente llamara a una función u otra mandando en caso de ser
necesario, una modificación sobre Estado.java.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
58
3.3.3 Programación de gestión de estado: Estado.java
Dada la importancia de esta clase se va a proceder a mostrar todas las definiciones de
atributos. Habrá una y solo una instanciación de esta clase, que debe estar presente
en todas las instancias que efectúen una modificación de estado5. Aprovechando esta
situación se añadirán los métodos necesarios para la transmisión de tramas al puesto
serie.
public static final int POLLING = 991;
//Para determinar quien
public static final int GETDIRECCIONES = 992;
//esta accediendo a la
public static final int ACCESOMAESTRO = 993;
//red Modbus actualmente
private int acceso;
//(sobre acceso)
private boolean onTCP;
//indica si esta conectado a red TCP
private boolean onModbus;
//indica si esta conectado a red MDBS
//polling\\
private boolean polling = false;
//TRUE si hay intencion de polling.
private ArrayList pollingList;
//Ristra de tramas de pregunta poll
private ArrayList pollingListRespone;// ” de tramas de respuesta polling
//formato: "0x01-0x02-0xa3...." los 2 a.l. como manda los NF
private ArrayList accessQueue;
//el turno para varios users, etc
private ArrayList usList;
//Lista de los usuarios conectados
private User currentUserModbus;
//Mantener user en poder del acceso.
private ArrayList modbusId;
//Lista de disp Modbus conectados
//Se guardan sin 0x
5
Es completamente necesario que cualquier modificación en el estado de la aplicación, se vea
reflejado en la instancia única de Estado.java.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
59
private boolean findingDone = true;
//Cuando esta parado el finding
private int findingProgress;
//porcentaje completado finding
private Enlace link;
//via de comunicación con MODBUS.
private Thread cuenta;
//Modifican la variable que dice si
private Timeout to;
//la red responde o no a la trama
private boolean timeOver = true;
//Control de respuesta a trama
private boolean readingModbus = false;//control de lectura del COM;
private boolean tramaOutReady = false;// se ha leido 1 trama completa?
private Trama tramaToSend, tramaReceived;
private Polling poll;
//Polling
private Thread pllng;
private boolean pollRunned = false;//true si se ejecuto una vez
//para no rehacer la inic y tener 2
private UserDAO udao;
//para acceder a los datos de users
Puesto que esta clase implementa más de 50 métodos, vamos a pasar a explicar sólo
una de ellas a modo de ejemplo de uso de Estado.java
public void setFindingProgress(int i){
findingProgress = i;
}
public int getFindingETA(){
return (((255-findingProgress)*to.getTimeout())/100); //en segundos
}
private int getFindingProgress(){
return (((findingProgress + 1)*100)/255);
}
Este ejemplo concreto se permite obtener el tiempo estimado que tardará el finding
en terminar de ejecutarse. Este proceso va actualizando el valor de findingProgress,
así al pedir el progreso o el ETA del finding obtendremos un valor actualizado.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
60
3.3.4 Programación de colas
Este proceso se basa en la misma forma de proceder que en el ejemplo anterior de
petición de progreso y ETA del finding. Los procesos que quieren transmitir, se
añaden en una posición determinada de una cola como se vio en el apartado de
diseño. Los procesos que optarán a transmitir son una comunicación modular
Modbus iniciada por el usuario, o un proceso de polling o finding.
- Proceso de polling. Para cada trama que quiera enviar,
while( !estado.getPollingIntention()
|| estado.getAcceso() != Estado.POLLING
|| !estado.getQueue().isEmpty())
{/*NO HACER NADA*/ try{Thread.sleep(500);}catch(Exception e){}}
//estado.setAcceso(Estado.POLLING);
//estado.setPollingOn(true);
estado.addUserToQueue(u);
//LOGICA POLLING + ENVIO
estado.leaveQueue();
- Comunicación modular (request-response)
estado.addUserToQueue(usuario);
estado.setAcceso(Estado.ACCESOMAESTRO);
//LOGICA DE ENVIO y RECEPCION
if(estado.getPollingIntention())
estado.setAcceso(Estado.POLLING);
else
estado.setAcceso(0);
estado.leaveQueue();
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
61
- Proceso de finding
estado.isFindingDone(false);
if(estado.getAcceso() == Estado.ACCESOMAESTRO){
if(estado.getPollingIntention())
{
try{
estado.addUserToQueue(u,2);
}catch(Exception ex){
estado.addUserToQueue(u,1);
}estado.setAcceso(Estado.GETDIRECCIONES);
}else
estado.addUserToQueue(u,1);
}else
estado.addUserToQueue(u);
if(estado.getAcceso() == Estado.POLLING){
estado.setAcceso(Estado.GETDIRECCIONES);
}
}while(((User)estado.getQueue().get(0)).getPort() != -2){}
estado.setAcceso(Estado.GETDIRECCIONES);
estado.isFindingDone(false);
//LOGICA INTERNA
if(estado.getPollingIntention())
estado.setAcceso(Estado.POLLING);
else
estado.setAcceso(0);
estado.leaveQueue();
estado.isFindingDone(true);
Para más información, referirse a los comentarios del código.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
62
3.3.5 Programación de comunicación Modbus y control de obtención de respuestas.
El envío de tramas se hará directamente sobre un método de Estado.java
enviarTrama(String trama) utilizando las herramientas mostradas, sin embargo la
recepción se hará en un nuevo Thread ReceiveTrama.java
Diagrama 15: ReceiveTrama.java
Se ha establecido durante el diseño que para controlar la falta de respuesta de la red
se debía de incorporar un timeout a una instrucción. Evidentemente eso no es posible
en Java de forma directa, ni en ningún lenguaje de programación. Empezaremos a
manejar los parámetros necesarios en la ejecución de ReceiveTrama.java desde la
función recibeTrama() de Estado.java:
//EJECUCION DEL THREAD RECEIVETRAMA.JAVA DESDE ESTADO.JAVA\\
this.timeOver = false;
//Aqui controlaremos el timeout ó si hay respuesta antes\\
if(!this.getReadingModbus()){
ReceiveTrama rt = new ReceiveTrama(this);
Thread recibela = new Thread(rt);
//recibela SOLO escucha y crea tramas REALES.
recibela.start();
}
//bloqueamos:
while(timeOver
instruccion”
==
false
&&
tramaOutReady
==
false)
//”Timeout
de
{/*ESPERAMOS*/}
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
la
Memoria. RemModbus
63
Para poder continuar la ejecución se tendrá que modificar uno de los dos valores
timeOver o tramaOutReady, ReveiveTrama realizará las siguientes operaciones sobre
los atributos de control de respuesta de la instancia de Estado.java (a partir de este
momento, se conocerá simplemente como estado) para acabar modificando
tramaOutReady.
//INTERIOR DEL THREAD RECEIVE TRAMA\\
tramaReceived = new Trama();
estado.setTramaOutReady(false);
//modificacion de tramaOutReady
//trata de leer trama
//en caso de leer algo
estado.setTramaReceived(tramaReceived);
estado.setTramaOutReady(true);
//modificacion de tramaOutReady
Paralelamente a la ejecución de este hilo se ejecutará desde él, otro Thread
Timeout.java,
Diagrama 16: Timeout.java
//EJECUCION DE TIMEOVER.JAVA\\
estado.setTimeOver(false);
//modificacion de estado.timeOver
try{
sleep(time);
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
64
}catch (InterruptedException ie){
System.out.println("Fallo de Timeout");
}
if(!outdated){
estado.setTimeOver(true);
//modificacion de estado.timeOver
}
Donde time está establecido como 3000 ms, tiempo de sobra para que se realice una
transacción de ida y vuelta Modbus, y modificará el otro valor de estado timeOver,
que tiene bloqueada la ejecución. Una vez modificado uno de los dos atributos,
continuaria la ejecución.
//CONTINUA LA EJECUCION EN ESTADO.JAVA\\
to.isOutdated(true);
//modifica Timeover.java: timeover ya no es util
if(!tramaOutReady)
tramaReceived = new Trama("0x00");
Si se leyó algo de la red Modbus antes de que acabara Timeout, continuaría la
ejecución despreciándose el timeout. En caso contrario se crea una trama falsa.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
65
3.3.6 Programación del finding: FindDevices.java
Sigue el proceso típico:
-
Comienzo: Modificación de atributos implicados en estado
-
Desarrollo: Lógica + Modificación de atributos implicados en estado
-
Finalización: Modificación de atributos implicados en estado
Lógica
Dado que manejamos un campo de dirección o número de esclavo de 16 bits
(recordemos su representación lógica en hexadecimal: 0xAA) vamos a tener 216 − 1 =
255 direcciones posibles, de las que sabemos que 0xC7 y 0x00 no están disponibles.
Se creará un bucle desde i = 1 hasta i < 256 donde en cada iteración se enviará una
trama de prueba para ver si se obtiene respuesta. En caso afirmativo el valor
hexadecimal de el contador i se guardará en el ArrayList de dispositivos conectados.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
66
3.3.7 Programación del polling
Sigue el proceso típico:
-
Comienzo: Modificación de atributos implicados en estado
-
Desarrollo: Lógica + Modificación de atributos implicados en estado
-
Finalización: Modificación de atributos implicados en estado
Lógica
Trabajamos con dos ArrayList paralelos, uno con las tramas request y otro con las
response. Leemos en orden del ArrayList de request y guardamos el índice en el que
esta esa trama. Posteriormente la enviamos y recibimos la response que introducimos
el índice que obtuvimos anteriormente en el ArrayList correspondiente.
Puede darse el caso de que se haya cambiado el ArrayList sobre el q trabaja el
Iterator que estemos trabajando con información falsa. Esta situación se soluciona
actualizando un boolean en estado que indique que la trama ha cambiado, y, al final
de cada envió de trama en polling hacer la siguiente comprobación
if(estado.isTramasPollingChanged()){
tramasPolling = estado.getTramasPolling();
it = tramasPolling.iterator();
tramasPollingOut = new ArrayList();
}
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
67
3.3.8 Programación del CRC
El método de cálculo de CRC está localizado en la clase Trama, del paquete
pfc_dsm.Modbus. El propio método tiene un sistema para detectar si el CRC se ha
incluido previamente en la trama, no añadiéndolo por tanto. Esto es útil sobre todo
para la utilización como puente del sistema.
Se han tenido muchos problemas con la programación de esta suma de verificación.
Los diagramas no eran suficientemente claros y no se tenía conocimiento del
funcionamiento de los operadores de datos. Finalmente se optó por utilizar cadenas
binarias representadas sobre Strings. Para facilitar la comprensión del método se
muestran los dos campos del CRC que daría como resultado la trama 0x3F-0x63
0x3f
----------------------------------1111111111000000 tiene un 0 en vuelta0. desplazo todos los bits a la derecha
0111111111100000
0111111111100000 tiene un 0 en vuelta1. desplazo todos los bits a la derecha
0011111111110000
0011111111110000 tiene un 0 en vuelta2. desplazo todos los bits a la derecha
0001111111111000
0001111111111000 tiene un 0 en vuelta3. desplazo todos los bits a la derecha
0000111111111100
0000111111111100 tiene un 0 en vuelta4. desplazo todos los bits a la derecha
0000011111111110
0000011111111110 tiene un 0 en vuelta5. desplazo todos los bits a la derecha
0000001111111111
0000001111111111 tiene un 1 en vuelta6. desplazo todos los bits a la derecha
y XOR con 0xa001
1010000111111110
1010000111111110 tiene un 0 en vuelta7. desplazo todos los bits a la derecha
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
68
0101000011111111
----------------------------------0x63
----------------------------------0101000010011100 tiene un 0 en vuelta0. desplazo todos los bits a la derecha
0010100001001110
0010100001001110 tiene un 0 en vuelta1. desplazo todos los bits a la derecha
0001010000100111
0001010000100111 tiene un 1 en vuelta2. desplazo todos los bits a la derecha
y XOR con 0xa001
1010101000010010
1010101000010010 tiene un 0 en vuelta3. desplazo todos los bits a la derecha
0101010100001001
0101010100001001 tiene un 1 en vuelta4. desplazo todos los bits a la derecha
y XOR con 0xa001
1000101010000101
1000101010000101 tiene un 1 en vuelta5. desplazo todos los bits a la derecha
y XOR con 0xa001
1110010101000011
1110010101000011 tiene un 1 en vuelta6. desplazo todos los bits a la derecha
y XOR con 0xa001
1101001010100000
1101001010100000 tiene un 0 en vuelta7. desplazo todos los bits a la derecha
0110100101010000
0110100101010000
01010000 0110100
0x50 0x69
Nótese que del resultado final se divide en dos cadenas de 8 bits y se cambian de
posición.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
69
3.4 Programación de RemModbus Cliente
Figura 18: RemModbus Cliente
RemoteConnection.java es la única novedad que presenta el cliente frente a las clases
del servidor. Implementa todo lo necesario para la utilización del sistema: conexión,
funciones del servidor, recuperación de estado del servidor, comunicación modbus,
etc. Muchos de estos métodos que implementa como String modbusCommunication
(String trama) son los mismos que se utilizan en el servidor, ligeramente adaptados.
Para la implementación de puentes por ejemplo se utiliza una versión modificada de
ese mismo método modbusCommunication, que consiste en envolver ese método en
su
homonimo
del
servidor,
pero
invertido.
De
ahí
el
nombre
reverseModbusComunication():
Envía trama
Recibe trama
Figura 19: modbusComunication (server)
En el servidor este método simplente envía una trama a la red serie y recibe su
respuesta
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. RemModbus
70
Recibe
Envía
Recibe
Envía
trama
tramaInet
tramaInet
trama
Figura 20: reverseModbusCommunication (cliente)
La función para el cliente funciona inicialmente de la forma inversa. Escucha en un
puerto, y lo que recibe lo reenvía utilizando modbusComunication del cliente, la cual
invoca al método anteriormente mostrado [Figura 19], que tiene el mismo nombre. Se
ejecuta en el servidor y se obtiene la trama que es devuelta al cliente en “recibe
tramaInet” del gráfico. Finalmente esta trama se envía al puerto COM desde el que se
recibió la trama original.
4 API RemModbus
Se ha desarrollado una API siguiendo la estética de las APIs de Java. Para mas
información, se encuentra en la parte de Manuales de Usuario. Consulte el índice.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
71
Capítulo 3 WEBCP2003, REMCP2003 &
REMBRIDGE
1 Introducción
En este capítulo tiene como propósito centrarse en el diseño, fases y programación de
las aplicaciones que hacen uso remoto de la red Modbus mediante RemModbus.
No se prestara demasiada atención al diseño y programación de los programas
RemModbus2003 y RemBridge, ya que no presentan ningún tipo de complicación o
entramado a ese nivel, y se limitan a simplemente a instanciar la clase
RemoteConnection y utilizar los métodos no utilizados directa o claramente por
Web2003.
Por otro lado tenemos Web2003, que sí que es un sistema que consta de un completo
diseño y una buena programación. Está basado en el acceso a la red Modbus a través
de RemModbus como las otras, pero con la peculiaridad de que está montado sobre
un Web Service y ofrece sus servicios a través de un simple navegador Web, incluso
desde una PDA o un teléfono móvil.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
72
2 Requerimientos funcionales
[R01] Un usuario debe tener asignado un nivel. ‘Owner’ (nivel alto) ó ‘Subscriber’
(nivel bajo).
[R02] Solo podrán acceder al sistema los usuarios registrados en RemModbus.
[R03] Todo usuario del sistema sin nivel se le asignara el nivel ‘Subscriber’ para la
sesión.
[R04] El sistema debe mostrar los dispositivos conectados para todos los usuarios.
[R05] El sistema debe ofrecer una forma de establecer unas determinadas tomas de
medida para que el usuario añada o quite las que desee
[R06] Solo los usuarios de nivel alto pueden modificar que tomas de medida se
deben tomar en el servidor (polling)
[R07] Cualquier usuario independientemente de su nivel puede ver el estado de la
toma de medidas
[R08] Un ‘Owner’ debe poder administrar6 los usuarios de RemModbus.
[R09] Un ‘Owner’ debe poder ejecutar el proceso de descubrimiento de dispositivos
[R10] Cualquier usuario puede detener o arrancar el polling
[R11] El sistema no debe dejar arrancar un polling vacío.
[R12] El sistema debe mostrar cuándo esta ocupado el servidor, actualizando los
dispositivos conectados, y el tiempo estimado hasta que vuelva a quedar libre.
[R13] Todo usuario debe tener opción de consultar información a cerca de los
dispositivos conectados.
[R14] Todo usuario debe tener opción de desconectarse de RemModbus.
[R15] El sistema reconocerá situaciones en las que se pueda estar manejando
información obsoleta, y ofrecerá al usuario la opción de actualizarla
6
Administrar: Dar de alta nuevos usuarios, borrar usuarios, modificar usuarios
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
73
3 Requerimientos no funcionales
[NF01] La aplicación debe validar la información
[NF01] La aplicación debe utilizar Apache Tomcat como servidor.
[NF01] La aplicación debe ser desarrollada en JSEE.
[NF01] La aplicación debe utilizar tecnología basada en Servlets
[NF01] Las páginas mostradas deben ser JSP
4 Modelo de dominio
Diagrama 17: Modelo de dominio WebCP2003
El diagrama superior muestra los conceptos básicos del dominio del problema así
como las relaciones más importantes entre las entidades principales.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
74
5 Diagrama de casos de uso
Diagrama 18: Casos de uso WebCP2003
Se han plasmado las acciones que pueden realizarlos distintos tipos de usuario en
función de su nivel, a partir de la información plasmada en los requerimientos
funcionales. Se describe un caso de uso para la ayuda a su interpretación.
“Todo usuario de tipo Owner tiene opción de añadir una medida al polling, pero un
usuario de tipo Subscriber no”
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
75
6 Descripción de los casos de uso
Login
Actor principal
Usuario
Actor secundario
-
Condiciones
-
previas
Trigger
Submit del usuario
Escenario principal
Variaciones
1
El sistema muestra la página de acceso
2
El usuario rellena usuario y contraseña
3
El sistema reenvía a la página principal
2a. El usuario no rellena todos los huecos
2b. El usuario / contraseña son incorrectos
Excepciones
1
El sistema muestra página de error
2
El usuario confirma
3
Vuelta a 1
2a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a 1
Logout
Actor principal
Usuario
Actor secundario
-
Condiciones
-
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
76
previas
Trigger
Selección del usuario
Escenario principal
Excepciones
1
El usuario pulsa Logout
2
El sistema reenvía a la página de login
2a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a 1
Ver dispositivos Modbus
Actor principal
Usuario
Actor secundario
-
Condiciones
-
previas
Trigger
Escenario principal
Operación de Servlet
1
El sistema muestra la página de bienvenida con los
usuarios conectados
Variaciones
1a. No hay dispositivos conectados
1b. El servidor se está actualizando
1
El
sistema
muestra
el
(los)
correspondiente(s) en la misma página y
aviso(s)
ofrece
actualizar el estado
2
El usuario confirma
3
Vuelta a 1
1a.2a. El usuario no confirma
1b.2a. El usuario no confirma
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
1
Excepciones
77
No se actualiza hasta la siguiente acción de servlet.
2a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a pagina de inicio
Ver medidas de un dispositivos Modbus
Actor principal
Usuario
Actor secundario
-
Condiciones
-
previas
Trigger
Selección de usuario
Escenario principal
1
El usuario elige un dispositivo de la lista de
dispositivos
2
El sistema muestra la página del dispositivo con las
medidas
Variaciones
-
Excepciones
1a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a pagina de inicio
2a. La información puede estar obsoleta
2b. El servidor se está actualizando
•
El
sistema
muestra
el
(los)
correspondiente(s) en la misma página y
aviso(s)
ofrece
actualizar el estadoEl usuario confirma
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
78
Editar medidas de un dispositivos Modbus
Actor principal
Usuario
Actor secundario
-
Condiciones
Estar en la página de dispositivo
previas
Trigger
Usuario Owner
Selección de usuario
Escenario principal
1
El usuario elige una medida de la lista de medidas
para observar o dejar de observar
2
El sistema muestra que se ha modificado el polling.
Cada vez que se muestre una página se debe de
ofrecer la opción de actualizarlo en el servidor o de
deshacer los cambios
Variaciones
-
Excepciones
1a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a pagina de inicio
2a. La información puede estar obsoleta
2b. El servidor se está actualizando
•
El
sistema
muestra
el
(los)
correspondiente(s) en la misma página y
aviso(s)
ofrece
actualizar el estadoEl usuario confirma
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
79
Actualizar polling en el servidor
Actor principal
Usuario
Actor secundario
-
Condiciones
Usuario Owner
previas
Trigger
Selección de usuario
Escenario principal
1
El usuario elige una medida de la lista de medidas
para observar o dejar de observar
2
El sistema lo actualiza y retira el mensaje de polling
modificado.
Variaciones
-
Excepciones
1a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a pagina de inicio
1b. La información puede estar obsoleta
1c. El servidor se está actualizando
•
El
sistema
muestra
el
(los)
correspondiente(s) en la misma página y
aviso(s)
ofrece
actualizar el estadoEl usuario confirma
Administrar usuarios
Actor principal
Usuario
Actor secundario
-
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
Condiciones
80
Usuario Owner
previas
Trigger
Selección de usuario
Escenario principal
1
El sistema muestra que el usuario tiene permisos
para administrar usuarios
2
El usuario selecciona la opción
3
El sistema muestra los usuarios, contraseñas y
permisos.
4
El usuario realiza alguna actualización
5
El sistema ejecuta la decisión del usuario y refresca
la página.
Variaciones
-
Excepciones
1a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a pagina de inicio
2a. La información puede estar obsoleta
2b. El servidor se está actualizando
•
El
sistema
muestra
el
(los)
correspondiente(s) en la misma página y
aviso(s)
ofrece
actualizar el estadoEl usuario confirma
5a. Fallo de la base de datos
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a pagina de inicio
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
81
Start/Stop de Polling
Actor principal
Usuario
Actor secundario
-
Condiciones
-
previas
Trigger
Selección de usuario
Escenario principal
1
El sistema muestra la opción de arrancar o parar el
polling en función de como esté, siempre que no esté
vacío.
2
El usuario selecciona Start/Stop
3
El sistema ejecuta la operación y refresca la página
Variaciones
-
Excepciones
1a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a pagina de inicio
2a. La información puede estar obsoleta y el polling haber
sido arrancado o detenido por otro proceso.
•
El sistema comprueba el estado del servidor y lo
compara con el de la aplicación antes de continuar
con el cambio de estado
2b. El servidor se está actualizando
•
El
sistema
muestra
el
(los)
correspondiente(s) en la misma página y
aviso(s)
ofrece
actualizar el estadoEl usuario confirma
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
82
Start de Finding
Actor principal
Usuario
Actor secundario
-
Condiciones
Usuario Owner
previas
Trigger
Selección de usuario
Escenario principal
1
El sistema muestra la opción de arrancar el finding
si tiene sospecha de que está obsoleto.
2
El usuario selecciona Start
3
El sistema ejecuta la operación y refresca la página
Variaciones
-
Excepciones
1a La conexión con RemModbus no está disponible
•
El sistema muestra página de error
•
El usuario confirma
•
Vuelta a pagina de inicio
2a. La información puede estar obsoleta y el finding puede
haber sido arrancado o detenido por otro proceso.
•
El sistema comprueba el estado del servidor y lo
compara con el de la aplicación antes de continuar
con el cambio de estado
Hay bastantes más casos de uso pero dado que todos siguen la misma lógica no se
añadirán más a este documento.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
83
7 Diagramas de secuencia
A continuación se mostraran los diagramas de secuencia de los procesos más
importantes y una breve explicación de los mismos si procede.
7.1 Procesos de login y logout
Diagrama 19: Secuencia de Login
El proceso se fundamenta en la creación de un nuevo usuario, su validación en el
servidor por medio de RemoteConnection, y su actualización con el permiso. La
creación y uso de Display se explicará más adelante. Se envía el control a
WelcomeServlet cuyo diagrama de secuencia se encuentra también detallado.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
84
Diagrama 20: Secuencia de Logout
Si un usuario desea desconectarse, deberá poder hacerlo en cualquier página por eso
sería interesante incluir un botón de logout en todas las cabeceras de página. El
proceso de desconexión o logout es muy simple, ya que no requiere nada más que
solicitar la acción a RemoteConnection. A continuación se destruyen user y
RemoteConnection para permitir nuevas conexiones y no tener datos de sesión.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
85
7.2 WelcomeServlet
En adelante todo forward que se haga sobre WelcomeServlet hará las siguientes
operaciones indicadas en el diagrama que sigue
Diagrama 21: Secuencia de WelcomeServlet
La sesión se actualizará en términos de dispositivos conectados y lista de tramas de
polling. El sistema Web ofrece un sistema que permite reconocer situaciones
potenciales de información obsoleta. Unos ejemplos de situación potencial de
información obsoleta, serían
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
86
que las tramas de polling de medidas no puedan ser interpretadas
que una consulta de petición de número de serie devuelva error
que las tramas de polling se hayan modificado en la aplicación Web y no estén
actualizadas
etc.
El sistema se ha diseñado para que la página JSP ‘welcome’ sea una especie de
escritorio para el usuario, por lo que la mayor parte del tiempo la invertirá en ella. Es
por eso que cualquier aviso ante situaciones como la anterior, o cualquier otro
relacionado con las acciones que pueda realizar a cabo el usuario dependiendo de la
situación, se realicen en dicha página. A la hora de programar esto lo hemos
solucionado con variables verdadero/falso que se estructuran dentro de la clase
Display, para mantener más orden en HttpSession. Así por ejemplo mostraremos los
mensajes oportunos cuando sea necesario:
<!—Codigo adaptado de welcome.jsp-->
<% if (display.isFindingRunning()) {%>
<h3><br>
<form method="POST" action="welcome" name="eta">
<table width="90%" border="0">
<tr>
<td width="669"><div align="left">
<p> <!-–(…)--> servidor se esta actualizando <!-–(…)--> </p>
</td>
<td width="89"><input type="submit" value="Actualizar"></td>
</tr>
</table><br>
</form>
</h3><br>
<% } %>
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
87
7.3 Ver medidas de un dispositivo
Diagrama 22: Secuencia de Ver un Dispositivo
Muestra el proceso que se sigue para mostrar las medidas que se están tomando o se
pueden tomar del dispositivo seleccionado en la pantalla anterior. En resumen, la JSP
encargada de mostrar esa información accederá a los datos necesarios, que
ViewDeviceServlet ha preparado para ella. Nótese que puede ser también entendido
el diagrama como el diagrama de secuencia de ViewDeviceServlet, desde la
instrucción 1.1.1.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
88
Interpretando los datos
[Para más información, consultar Anexo 1: CP200X Communication Protocol]
El dispositivo CP2003, aunque es extensible a muchos dispositivos Modbus, ofrece
la información en cinco formatos diferentes.
-
ASCII: Como caracteres, enviados en el orden específico. Utilizado
para operaciones como lectura del número de serie, etc.
-
BYTE: Ocho bits. Utilizado para parámetros de estado o control
-
WORD: 16 bits, dos Bytes. Enviado como: MSB7-LSB8
-
LONG: Cuatro Bytes. Enviados como: MSB-[ ]-[ ]-LSB
-
IEEE: Cuatro Bytes. Es el utilizado para las medidas de polling de
WebCP2003, en el CP200X.
El formato IEEE (coma flotante)
La interpretación y programación de esto ha sido complicada. Se explicará como se
ha de interpretar la información de este tipo. Como hemos visto se deben leer cuatro
Bytes, que tendrán la siguiente información:
BYTE1: SIGNO + EXPONENTE
BYTE2: MANTISA HIGH
BYTE3: MANTISA MIDDLE
BYTE4: MANTISA LOW
7
Most Significative Bit: Bit más significativo
8
Less Significative Bit: Bit menos significativo
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
89
Hay que tener en cuenta que la posición real de esos Bytes no se ajusta a esa
numeración sino que hay que modificar la posición de las parejas de WORDS. Asi
por ejemplo el hipotético PDU recibido de una trama 0x0A-0x00-0x43-0x5E, sería
de acuerdo a la numeración establecida arriba: 0x43(Byte1), 0x5E(Byte2),
0x0A(Byte3), 0x00(Byte4)
Si SIGNO es el valor binario 0 quiere decir positivo, si es 1 quiere decir negativo.
EXPONENTE (EXP) es el exponente, con offset 127.
Para hallar el valor:
Ecuación 2: Cálculo de dato IEEE
(
)
(
)
23


Value = − 1SIGNO * 2 EXP −127 * 1 + ∑ 2 −i * M i 
i =1


Para hallar el valor de los parámetros:
Byte1
7
Byte2
6
SG E7
5
4
3
E6 E5 E4
2
1
0
E3 E2 E1
7
6
5
3
2
1
0
E0 M1 M2 M3 M4 M5 M6 M7
EXPONENTE
MANTISA ->
Byte3
7
4
Byte4
6
5
4
3
2
1
0
M8 M9 M10M11M12M13M14 M15
7
6
5
4
3
2
1
0
M16M17M18M19M20 M21M22M23
<- MANTISA
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
90
7.4 Editar medidas
Diagrama 23: Secuencia de Editar Medidas del Polling
Se debe tener en cuenta que después de la acción detallada el sistema Web no estará
en concordancia con el sistema RemModbus. WebCP2003 mostrará un aviso con dos
opciones, deshacer los cambios (recargaría el polling del servidor) o actualizar el
polling en el servidor (modificar el polling del servidor). Para estas opciones, como
para las demás que se presentan se utilizarán los métodos de RemoteConnection.
Consultar la API desarrollada y adjunta para más información.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
91
7.5 Administrar usuarios
El diagrama se divide en dos partes, la de acceso a la página de edición de usuarios y
la de la administración en si.
Diagrama 24: Secuencia de Administrar Usuarios
Solo si un usuario es Owner se le mostrará la opción de administrar a los usuarios.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
92
7.6 Arrancar procesos en el servidor
Diagrama 25: Secuencia de Arrancar Finding
En el diagrama se muestra como ejemplo como funciona la lógica que hace al
proceso de finding ser arrancado por el usuario. Se ha escogido este ejemplo porque
en esencia hace lo mismo que el proceso de arrancar polling, pero tiene menos
operaciones de actualización y la secuencia se ve más clara. Si se presta atención al
punto 3, se solicita el estado del finding antes de arrancarlo. Esto se hace por si el
proceso ha sido arrancado mientras la página no era refrescada. Hay que tener en
cuenta también que normalmente esto no sucederá ya que ese mismo proceso de
reconocimiento se hace a menudo, para tener el sistema actualizado el mayor tiempo
posible.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. WebCP2003, RemCP2003 & RemBridge
8 RemCP2003
Ilustración 1: RemCP2003
Esta aplicación modular tendrá como objetivos
probar la conexión a RemModbus desde una aplicación Java
probar el uso de una comunicación Modbus (request – response)
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
93
Memoria. WebCP2003, RemCP2003 & RemBridge
94
9 RemBridge
Esta aplicación modular será una utilidad que permitirá establecer de forma
transparente, un puente RS232 virtual entre un puerto COM del cliente y el puerto
que conecta a RemModbus a la red de dispositivos.
Por favor, refiérase al Capítulo 2 RemModbus, apartado 3, Programación y pruebas,
para la correcta y siga los pasos de instalación de librerías de RemModbus. Además
se precisará crear dos puertos COM virtuales y establecer una comunicación entre
ellos. Existen programas ya desarrollados con esa finalidad como VSPD XP4.
Modbus app sobre RemBridge
RemModbus Servidor
INET
virtual
COM2
COM3
COM1
ESCLAVO
TCP/IP
TCP/IP
Figura 21: Lógica RemBridge
COM1 y COM2 son puertos virtuales con una conexión virtual entre ellos de manera
que lo que envía uno, es recibido por el otro. RemBridge escucha en COM2 y una
aplicación Modbus local cualquiera se conecta a COM1 como si el dispositivo
estuviera conectado a ese puerto y envía una trama. Al recibir información
RemBridge la reenvía por TCP usando RemModbus.RemoteConnection. La trama se
procesa como un DAT_ABS (ver diseño de protocolo RemModbus) y se envía la
respuesta. RemBridge la recibe y la transmite a COM2, por lo que la aplicación
Modbus recibirá esa información de COM1.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Resultados/Experimentos
95
Capítulo 4 RESULTADOS/EXPERIMENTOS
1 RemModbus
Es una aplicación que de forma remota y local,
Permite administrar una red Modbus.
Proporciona la comunicación básica Modbus: intercambio de tramas.
Permite mediante una instanciación muy sencilla, el acceso de cualquier
aplicación Modbus a la red, de forma remota.
Permite acceso múltiple a la aplicación.
Permite varios dispositivos Modbus conectados
Ofrece facilidades de uso de Modbus a programadores industriales
generalmente
Ofrece una documentación en forma de API que facilita aún más la
programación y el diseño de aplicaciones Modbus.
Permite control de acceso a la red e implantación de niveles de usuario.
Permite ejecutar una serie de instrucciones sobre la red y obtener los
resultados, algo que hemos llamado `polling`.
Ofrece una utilidad de búsqueda automática de dispositivos Modbus
conectados a la red, a la que hemos dado el nombre de ‘finding’
Ofrece control y recuperación de errores sobre una arquitectura que
originalmente no la tiene (Modbus)
Permite un enlace transparente con la red Modbus y con el protocolo
RemModbus.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Resultados/Experimentos
96
2 WebCP2003
Es un servidor Web que esta diseñado para obtener de forma remota información de
uno o varios dispositivos CP2003 y además,
Administra el polling de medidas a tomar sobre la red
Administra el estado de la red Modbus. Se sabe en todo momento que
dispositivos tiene conectados, si está funcionando el polling, si un
dispositivo no está funcionando correctamente, etc.
Administra los usuarios de la red a la que nos conectamos.
Considera el nivel de usuario para establecer responsabilidades.
Está montado sobre RemModbus.
3 RemCP2003
Programa Java para la ejecución de consultas definidas sobre un CP2003.
Implementar la comunicación básica “request-response”.
4 RemBridge
Una instanciación de la utilidad de RemModbus para la creación de puertos virtuales
Permite acceder a la red administrada por RemModbus y por tanto a sus
dispositivos de forma totalmente transparente. Cualquier aplicación
interactuará con la red de forma remota sin saberlo.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Resultados/Experimentos
97
5 Experimentos
Durante el estudio del diseño de la arquitectura física de la red Modbus, se reparó en
el convertidor hardware de señal RS232 a RS485. Surgió la idea de realizar la
conversión entre los protocolos por medio de software, por lo que se procedió al
estudio preliminar de la señal. Se conectó un osciloscopio al sistema y se estudiaron
las tramas capturadas a cada uno de los lados del convertidor. Se observaron que las
diferencias entre ambas eran mínimas, ya que lo que variaba de una a otra era el
significado de 1 y 0 (tensión en uno, y no tensión en el otro). Aparentemente la
intensidad también variaba. Sin embargo implementar este método hubiera supuesto
demasiado estudio de la situación y arquitectura de los medios de transmisión, ya que
no se sabía si físicamente se podía hacer.
También se ha descartado la idea de la actualización automática de dispositivos
conectados, ante un error. Esto es que cuando una trama que se ejecuta sobre un
dispositivo no responde, el sistema supone que el registro de dispositivos conectados
no está actualizado, y arranca el proceso de finding. Esta función estuvo implantada
durante mucho tiempo en el sistema, pero finalmente se retiró de él por dos razones
importantes: La primera, que dada la lógica de colas implantada, se ralentizaba el
sistema en situaciones en las que no era absolutamente necesario, y la segunda, que
se pensó que no era una competencia directa del sistema local.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Conclusiones
98
Capítulo 5 CONCLUSIONES
Hay que tener en cuenta que se carecía de base alguna acerca de cómo funcionaban
los entornos o las comunicaciones industriales antes del desarrollo de la aplicación.
Normalmente no son ámbitos de los que un ingeniero informático tenga un buen
nivel de conocimiento, por su bajo nivel, muy especializado o al detalle de bit. Es por
tanto que se ha requerido mucho tiempo de familiarización con los dispositivos y de
estudio de arquitecturas y de alternativas de desarrollo. Se ha gastado mucho tiempo
consultando distintas páginas de Internet, con informaciones incompletas o
contradictorias, hasta que finalmente se ha tenido un concepto claro. Es por esto que
el desarrollo de este proyecto me ha permitido familiarizarme no solo con el
protocolo Modbus o con el dispositivo CP2003, sino con todo su entorno. Por
ejemplo antes del proyecto nunca antes había utilizado un osciloscopio, un plc o un
pupitre de mando, de los que lo más que tenía en el mejor de los casos, era una ligera
idea.
He comprobado en mi propio pellejo que la mejor manera de afrontar un problema,
es dividirlo en problemas más sencillos, e ir atajándolos poco a poco. Me he
divertido haciendo el proyecto y también lo he pasado mal. Me he visto superado por
la funcionalidad que debía tener el proyecto, y he sabido cómo solucionarlo.
Se ha mejorado la capacidad de diseño. Además se ha comprobado que el tiempo que
se pierde diseñando o elaborando diagramas, se gana a la hora de programar. Un muy
buen diseño puede convertirse en una especie de guión para el programador, donde
este solo tenga la necesidad de diseñar. El buen diseño en este proyecto ha permitido
la creación de utilidades que facilitan la programación. El ejemplo más claro es
RemModbus pero esa filosofía la encontramos también a lo largo de todo el
proyecto, por ejemplo en la definición de un protocolo de comunicación por Internet.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Conclusiones
99
Se han utilizado una gran cantidad de tecnologías lo que ha mejorado mi
programación y más concretamente mi manejo de Java, HTML, SQL, CSS, Servlets,
etc. Se han aprendido muchas técnicas de programación: el uso de ciertas clases de
Java, operadores de datos, etc.
Finalmente se han conseguido cumplir los objetivos planteados inicialmente, y todos
los secundarios que han ido surgiendo durante el proceso de diseño y de
programación. Personalmente espero que nuestro proyecto pueda se realmente útil,
ya sea en su programación, su diseño, o en su concepto, y pueda ser utilizado por
otros programadores o usuarios.
Es importante destacar la aportación realizada, de desarrollar una herramienta y su
API para desarrollar el objetivo inicial, que consistía simplemente en desarrollar una
aplicación que se conectara remotamente un dispositivo Modbus, el CP2003. Esto
nos hizo cambiar el alcance de la aplicación, limitando un poco la funcionalidad que
tendría inicialmente la aplicación inicial, y desarrollando dos sistemas más
modulares que realicen las operaciones sobre el dispositivo, pero añadiendo el valor
añadido de RemBridge (Ver Capítulo 3, apartado RemBridge). Con esta aportación
ampliamos el rango de utilización a otras aplicaciones Modbus que funcionen sobre
otros dispositivos, y facilitamos el desarrollo de otras aplicaciones aumentando
considerablemente el grado de abstracción sobre detalles técnicos.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Futuros desarrollos
100
Capítulo 6 FUTUROS DESARROLLOS
Para poder aseverar que el proyecto se ha terminado y puede ser distribuido quedan
cosas por hacer. Cosas que aún no podemos saber. A pesar de que ambas partes del
proyecto ya pueden ser utilizadas y ser útiles, es muy posible que muchos
desarrolladores a la hora de utilizar RemModbus, por ejemplo, sientan que necesitan
más opciones en el servidor. Sé que esto puede suceder, puesto que me ha sucedido a
mi mismo, a pesar del buen diseño del sistema, del que se hace gala con anterioridad.
Es importante que otros diseñadores y programadores creen aplicaciones reales para
ver que necesidades, no pueden ser satisfechas por el sistema. Afortunadamente El
diseño de la aplicación es tan flexible y modular que permite añadir fácilmente
nuevas funcionalidades.
Por otra parte los programas de utilización de CP2003 están orientados a satisfacer
unos objetivos muy puntuales y no implementan toda la funcionalidad del
dispositivo, que es mucha. Futuros desarrollos pueden tener en cuenta esta situación,
y acabar construyendo un controlador remoto del CP2003, en el que se implementen
todas las opciones que ofrece CP2003.
En el caso de RemBridge estamos dependiendo de alguna aplicación que cree un
puente y dos puertos COM virtuales, y los conecte entre ellos. Con más tiempo se
podría haber incluido esta faceta en el alcance o el ámbito del proyecto. Sería muy
interesante desarrollar este punto, aunque el desarrollo de la API para programadores
perdería un poco de sentido, o mejor dicho, de utilidad.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Futuros desarrollos
101
Además, hay elementos que se ha visto que pueden hacer la aplicación más flexible o
más funcional como por ejemplo:
Cambio de base de datos. Actualmente se utiliza y no se ofrece la posibilidad
de cambiar, una base de datos en un servidor de Internet, al que se accede
mediante un puerto determinado. En algunas redes públicas o compartidas no
se podrán realizar conexiones a ese puerto. Adicionalmente hace que la
aplicación sea dependiente de un elemento absolutamente externo y estático.
Se recomienda implementar un método que permita de forma automatizada:
1. Cambiar la localización de la base de datos.
2. Crear las tablas necesarias.
3. Incluir un registro por defecto, que permita el acceso, del tipo
USER=admin, PASS=root, PERMISSION=full
Convertir señal RS232 a RS485 por software. Estudiar la posibilidad real de
realizar esta conversión. Ver capítulo de Resultados/Experimentos para más
información.
Permitir comunicación Modbus ASCII [Ver Programación RemModbus].
Llevaría un tiempo cambiar la lógica pero no sería complejo el diseño. Se
ofrecen ideas de referencia para su implantación.
1. Establecer protocolo que usa la red en el servidor RemModbus.
2. Establecer tramas SYN para modificar el protocolo y permitir que el
cliente sepa cómo está funcionando el sistema.
3. Creación alternativa de Trama.java
Establecer utilidades que creen el formato típico de las tramas cuando se
comunican entre procesos o aplicaciones, a partir de ArrayList(), Vector(),
etc. Y la utilidad inversa. Se podría haber implementado ya pero no se tenía
la necesidad ya que cuando surgió la idea ya no era necesario.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Futuros desarrollos
102
Estudiar la posibilidad o la utilidad de implementar en el servidor de
RemModbus o en una aplicación que se conecte, el envío de e-mails ante
medidas tomadas que se hayan preestablecido como peligrosas o dignas de
observación. Estudiar si es competencia de RemModbus o de aplicaciones
que hagan uso de el.
Actualmente se guarda solamente la última respuesta a una trama de polling.
Se propone guardar un historial de las últimas respuestas a una misma trama
de polling. Esto puede permitir a aplicaciones tipo WebCP2003 realizar
gráficas de evolución y permitir un estudio más exhaustivo de la evolución de
los resultados del polling. Estudiar si es competencia de RemModbus o de
aplicaciones que hagan uso de el.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Estudio Económico
103
Capítulo 7 ESTUDIO ECONÓMICO
1 Planificación previa
Ilustración 2: Planificación inicial
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Estudio Económico
104
2 Uso real aproximado del tiempo invertido en el proyecto
Investigación y aprendizaje: 60 horas
Identificación de necesidades: 15 horas
Diseño: 120 horas
Programación: 100 horas
Pruebas: 20 horas
Teniendo en cuenta que algunas actividades se solapan, el trabajo habrá llevado unas
300 horas. Si a esto le añadimos la documentación, nos moveríamos en torno a las
350 horas.
3 Valoración económica
Se quiere estimar el coste real del proyecto, incluyendo horas de trabajo, software y
hardware y material empleado para el aprendizaje.
Equipo (a 3 años): 200 €
Software (VSPD XP4): 90 €
Horas de trabajo: 7000 €
Libros: 100 €
COSTE TOTAL DEL PROYECTO: 7400 €
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Bibliografía
105
BIBLIOGRAFÍA
[1]
Eckel, Bruce Thinking in Java (3rd Edition Revision 4)
(2002) Prentice Hall.
[2]
Barranco de Areva, J. Metodología del análisis estructurado de sistemas.
(1994) Universidad Pontificia Comillas, Libros de texto (20), Madrid.
[3]
Bowman, J.S.; Emerson S.L.; Darnovsky, M.; The practical SQL Handbook (3rd
Edition)
(1997) Addison-Wesley Developers Press.
[4]
Castro Ponce, M. Tecnología de Computadores.
(1999) Universidad Pontificia Comillas, Encuadernaciones. Madrid.
[5]
Tejedor, Miguel Redes de Computadores (Vol. 1.)
(2004) Universidad Pontificia Comillas, Encuadernaciones. Madrid.
[6]
Tejedor, M.; Castro Ponce, M. Redes de Computadores (Vol. 2).
(2004) Universidad Pontificia Comillas, Encuadernaciones. Madrid.
[7]
Rodríguez Mondéjar, J.A.; Fundamentos de Comunicaciones Industriales.
Universidad Pontificia Comillas, Practicas de Laboratorio.
[8]
Rodríguez Mondéjar, J.A.; Comunicaciones Industriales Avanzadas.
Universidad Pontificia Comillas, Practicas de Laboratorio.
[9]
Jiménez Buendía, M.; Comunicaciones Industriales
Universidad Politécnica de Cartagena, Departamento de Tecnología
Electrónica.
[10]
Ruiz Olaya, L.F.; Implementación de una red Modbus/TCP
(2002) Escuela de Ingeniería Eléctrica y Electrónica de Santiago de Cali, Tesis
[11]
SACI, CP2003 Communication Protocol
(2001) SACI, Manuales
[12]
Guías, Manuales y Especificaciones: http://www.modbus.org/specs.php
[13]
http://www.simplymodbus.ca/FAQ.htm
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Memoria. Bibliografía
[14]
http://jamod.sourceforge.net/kbase/protocol.html
[15]
http://www.rtaautomation.com/modbustcp/index.html
[16]
http://www.intellicom.se/ModbusTCP_overview.shtml
[17]
http://java.sun.com/products/javacomm/reference/api/index.html
[18]
http://java.sun.com/j2se/1.4.2/docs/api/
[19]
http://es.wikipedia.org/wiki/ y http://en.wikipedia.org/wiki/
[20]
http://java.sun.com/products/javacomm/reference/faqs/index.html
106
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Bibliografía
107
ANEXO I MANUALES DE
USUARIO
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. API de RemModbus
108
Capítulo 1 API DE REMMODBUS
Package pfc_dsm.RemModbus
Class Summary
RemoteConnection
A remote connection with a RemModbus application
pfc_dsm.RemModbus
Class SerialPort
java.lang.Object
pfc_dsm.RemModbus
public class RemoteConnection
Provides full access, for use and administration, for implementations of the
RemModbus server application. Please refer to the official documentation for further
generic or specific information.
Author:
Daniel Segura Martínez
Field Summary
static int
MAIN_PORT
Port number where the server receive incoming connections
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. API de RemModbus
109
Constructor Summary
RemoteConnection(String ip, String user, String pass)
Creates a new connection with the RemModbus server application.
Parameters:
ip – the ip direction where the RemModbus server app is located.
user – nickname or login name.
pass – password of the user.
Method Summary
String
getModbusIds()
Obtains the last revision of the connected devices of the client
Return Format:
“01-02-03”…
String
getPermission()
Returns the permission status of the user
String
getPollingResults()
Obtains the results of the polling from the server
boolean
getPollingStatus()
Obtains whether the polling is running or not, from the server
boolean
getServerStatus()
Obtains whether the finding is running or not, from the server, and
updates the ETA time from the server
String
getUser()
Returns the nickname of the user
boolean
isConected()
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. API de RemModbus
110
Obtains whether the system is connected or not, from the server
boolean
logout()
Ends the connection with the server
String
modbusCommunication(String modbusIn, int tipo)
Obtains the Modbus net response for the modbusIn frame with the
format “0x01-0x02-0xa0”
Parameters:
modbusIn – frame to be transmitted in the server system.
tipo – Specifies whether the frame will be transmitted even
if the server is busy or not. Positive case means that the
client will have to wait until the server finish.
Values:
1 for transmit even if the server is busy
2 for transmit if the server is not busy
Return Format:
“0x01-0x02-0xa0”
Return Values:
starting with “0x00” if no response is obtained or server is
busy (case tipo = 2)
normal return format in at any other situation
void
reverseModbusCommunication(String com, int baud, int
databits, int stop, int parity, int flows)
Establishes a virtual bridge between the local COM port and the
remote COM port.
Parameters:
com – Local COM port where we want to listen
baud – Specifies the baud rate
databits – Specifies the data bits
stop – Specifies the stop bits
parity – Specifies the parity
flows – Specifies the flow control
Formats:
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. API de RemModbus
111
“0x01-0x02-0xa0”
boolean
runFinding()
Starts the finding process in the server, and returns false if the
process could not be started. Updates ETA time from the server.
void
runModbusListening(boolean modbusConnected)
boolean
runPolling()
Starts or stop the polling process in the server. Returns the polling
status in the server
String
setLink()
Returns the permission status of the user
String
updateDevicesFromServer()
Returns the last connected devices list from the server or “Error”
boolean
updateDevicesInServer()
Deprecated. Forces the finding process to be executed in the server
String
updatePollingFromServer()
Returns the polling list from the server or “Error”
boolean
updatePollingInServer(String pollList)
Sets the new polling frames into the server logic. And returns the
status of the operation.
Parameters:
pollList – the frame list to be executed in the server. It
needs to have the followinf format:
“0x01-0x02-0xa0&0x02-0x02-0xa0&0x01-0x32-0xa0”…
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de RemModbus
112
Capítulo 2 MANUAL DE REMMODBUS
Este capítulo contendrá una breve descripción del servidor RemModbus y su manejo.
Ilustración 3: RemModbus Servidor
Para empezar a administrar la red Serie y las conexiones entrantes debemos pulsar
sobre los botones de conexión a red Modbus y red TCP/IP. Es importante que ambos
botones se activen para un correcto funcionamiento del servidor. Al pulsar sobre el
primero de ellos, se abrirá la ventana que se muestra a continuación. Sobre ella
tendremos que elegir bajo qué parámetros vamos a controlar la red Modbus.
(Velocidad de transmisión, bits de parada, puerto COM que proporciona la conexión
a la red, etc.)
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de RemModbus
113
Ilustración 4: Configuración de la conexión Modbus
Mediante el menú desplegable “Menú” de la parte superior de la aplicación
tendremos acceso a los procesos de finding y polling. El menú “Administración”
debe ser manejado con cuidado ya que permite modificar parámetros internos del
programa.
Ilustración 5: Menú Administración
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de RemModbus
114
La primera opción nos permitirá introducir manualmente los dispositivos que están
conectados a la red. Esto puede ser muy útil si no se quiere esperar al proceso de
descubrimiento de dispositivos, pero es necesario conocer el número de esclavo de
los dispositivos de antemano.
Ilustración 6: Introducir direcciones manualmente
Para modificar el resto de las opciones del menú se abrirán ventanas similares a la
anterior. La segunda opción nos va a permitir limitar el rango de direcciones en las
que buscar con el finding. Por ejemplo, si el administrador de la red sabe que todos
sus dispositivos se encuentran entre el 0x00 y el 0x0F, no tiene por que esperar a que
busque también desde el 0x10 al 0xFF. La última de las opciones de este menú sirve
para decidir cuánto deseamos esperar antes de suponer que la red no contestará a la
trama.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de RemModbus
115
Ilustración 7: RemModbus funcionando
RemModbus se estructura en 5 ventanas principales, cada una con una finalidad
informativa. La primera muestra la actividad local e interacción con la red Modbus,
mientras que la de debajo suyo (Acceso Remoto) se ocupa de las acciones llevadas a
cabo por los usuarios conectados mediante los programas que funcionan con
RemModbus. En las ventanas de la derecha vemos los detalles de los procesos de
polling y finding, y los usuarios conectados con su puerto asignado.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de WebCP2003
116
Capítulo 3 MANUAL DE WEBCP2003
1 Entrar en la aplicación
Ilustración 8: Entrando en WebCP2003
Esta es la primera página de la aplicación. Para evitar complicaciones se ha
establecido un usuario ya registrado y su contraseña en la pantalla de inicio. Una vez
validados pasaremos a la página principal de la aplicación, la cual está concebida
como una especie de escritorio desde el cual podremos acceder a las distintas
opciones de manejo de la red Modbus, controlada por RemModbus, así como a los
detalles de cada dispositivo CP200X
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de WebCP2003
117
2 Sistema inteligente de interacción
El manejo de la aplicación Web esta fundamentado en un sistema inteligente
desarrollado exclusivamente para evaluar el estado en el que se encuentra la red, y
ofrecer las diferentes opciones disponibles o más lógicas para cada situación
concreta. Esto se ha llevado a cabo mostrando mensajes emergentes en la pantalla
principal antes mencionada, que informan de la situación actual y las posibilidades
de interacción en ese marco. El manejo es muy intuitivo y fácil de comprender. A
continuación se muestra un ejemplo del funcionamiento con dichos mensajes.
Ilustración 9: Sistema inteligente de interacción
Vemos en la ilustración como el sistema ha detectado una situación potencial de
información obsoleta, y vemos también como ofrece dos soluciones posibles. Por
otra parte, se muestra que el servidor aun no tiene actualizada la lista del polling que
se ha confeccionado, y presenta la forma de hacerlo. En el último aviso vemos como
se detecta que el usuario tiene un nivel adecuado para administrar los usuarios.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de WebCP2003
118
3 Interacción simple
Hemos visto que el sistema se adapta automáticamente a la situación de la red y
ofrece los medios necesarios para efectuar los cambios pertinentes. Sin embargo,
siempre habrá situaciones en las que el usuario crea que debe ejecutar una acción o
un proceso, independientemente del estado de la red, bien porque tenga información
privilegiada de la red, o bien porque lo vea oportuno. Es por eso que se ha facilitado
un menú desplegable, que permite llevar a cabo estas acciones de forma unilateral,
independientemente del sistema inteligente. Para ello pulse en el botón Herramientas,
que abrirá un pequeño menú, que permite interactuar como se ha mencionado.
Ilustración 10: Menú Herramientas
Al accionar este menú, se desactivarán automáticamente los mensajes del sistema
inteligente, relacionados con él. La utilización de este menú está restringida a los
usuarios de más alto nivel, por razones de seguridad.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de WebCP2003
119
4 Administración del polling y obtención de medidas
El polling se define individualmente para cada dispositivo CP2003 conectado a la
red. Para ello podremos acceder desde la pantalla principal a cada uno de los
dispositivos conectados y establecer que medidas se quieren tomar. Una vez
hayamos terminado de seleccionar las medidas que queremos tomar sobre el
dispositivo, el sistema habrá detectado que ha habido algún cambio en el polling y
ofrecerá la posibilidad de guardar los cambios o por contrario, volver al estado inicial
del servidor.
Ilustración 11: Modificando el polling
En el ejemplo de arriba estamos añadiendo la medida VST sobre el dispositivo 0xA5.
En general, si decidimos guardar el polling, nos devolverá a la pantalla principal,
desde la que podremos acceder de nuevo a otro dispositivo sobre el que queramos
tomar medidas, en caso de necesitar observar mediciones de más de un dispositivo.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de WebCP2003
120
De esta forma vamos a ir definiendo el polling. Cuando hayamos terminado de
concretar las medidas que queremos incluir en el polling nos encontraremos en la
página principal con el siguiente aviso en forma de mensaje.
Ilustración 12: Modificando el polling II
Pulsamos en Actualizar, y el servidor RemModbus, cambiará su lista de polling. Por
último, es posible que sea necesario arrancar el proceso en el servidor, dependiendo
de si estuviera previamente funcionando o no. Para cualquiera de los casos se
mostrará un mensaje del estilo del aviso de la siguiente ilustración.
Ilustración 13: Start/stop polling
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de WebCP2003
121
5 Administración de usuarios
Al sistema de administración de usuarios sólo podrán acceder los usuarios de nivel
más alto. Para ello se dispondrá de un acceso por medio de mensaje típico de la
aplicación, y de otro por medio del desplegable Herramientas. Este apartado nos
permitirá tanto ver los usuarios del sistema como realizar modificaciones.
5.1 Editar usuario.
Para editar el nivel de acceso de un usuario, será necesario activar el modo edición
en la página de administración de usuarios, con el botón “Selección de niveles de
usuario”
Ilustración 14: Cambiando nivel de usuario
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de WebCP2003
122
Esta acción nos devolverá a la misma página anterior, pero preparada para editar.
Seleccionamos el usuario que queremos modificar, y pulsamos en “Cambiar Nivel”.
En el ejemplo vemos como hemos cambiado el nivel del usuario Michael Scofield a
Owner.
Ilustración 15: Modificando usuarios
5.2 Borrar usuario
El método a seguir para eliminar un usuario, es el mismo que para editarlo: en caso
de ser necesario activar el modo borrar, seleccionar el usuario a borrar y pulsar en
“Borrar Usuario”.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de WebCP2003
123
5.3 Añadir usuario
Los usuarios se añaden por medio del menú desplegable “Añadir Usuarios” de la
página de administración de usuarios, que se mantendrá desplegado hasta que
terminemos de añadir usuarios y volvamos a plegarlo.
Ilustración 16: Añadiendo usuarios
Se introducen los parámetros requeridos y se añade pulsando el botón.
Ilustración 17: Usuario añadido
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de RemCP2003
124
Capítulo 4 MANUAL DE REMCP2003
Ilustración 18: Conexión a RemModbus
Lo primero que se muestra en la aplicación es la ventana de conexión a RemModbus.
Introducimos usuario, contraseña y la dirección en la que reside la aplicación, y
pulsamos sobre el botón de conexión. La aplicación ofrece dos modos de actuación
según en que pestaña nos encontremos. La pestaña inicial nos permite conocer la
situación actual de un determinado valor.
Ilustración 19: RemCP2003. Toma de medidas
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de RemCP2003
125
En la ilustración de la página anterior hemos tomado la medida de voltaje VFR sobre
el dispositivo con dirección 0x03 y hemos obtenido un resultado de 222 V.
Ilustración 20: RemCP2003. Avanzado
La segunda pestaña nos permite actuar como administrador de cualquier red Modbus
introduciendo una trama arbitraria en la red. Para crear la trama se añade Byte a Byte
en hexadecimal. No se ofrece cálculo de CRC pero si RemModbus detecta que no
tiene CRC, lo añadirá él mismo. Vemos como se ha enviado la trama aleatoria 0x330x33-0x33-0x33-0x33-0x33- la cual lógicamente no ha obtenido respuesta como se
refleja abajo.
Recordemos que RemCP2003 sólo funciona con la modalidad DAT_ABS de
RemModbus por lo que si el servidor está ocupado, la aplicación quedará esperando
a que termine el servidor, para recibir una respuesta a la petición que se haga.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo I Manuales de usuario. Manual de RemBridge
126
Capítulo 5 MANUAL DE REMBRIDGE
El funcionamiento es muy sencillo ya que tan solo consiste en conectarse a
RemModbus con una ventana de conexión [Ilustración 18: Conexión a
RemModbus] y posteriormente en conectarse a un puerto COM del ordenador en el
que reside la aplicación [Ilustración 4: Configuración de la conexión Modbus], a
través del cual capturaremos el tráfico y lo enviaremos al servidor, que tratará las
tramas como cualquier otro programa RemModbus.
Ilustración 21: RemBridge
Permaneceremos conectados hasta que cerremos el la ventana anterior. Es importante
que se haya creado un puente entre dos puertos virtuales. En el caso anterior debe de
existir otro puerto virtual conectado a COM4, al que se conectaran las aplicaciones
típicas Modbus.
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.
Anexo 2 CP200X Communication Protocol. Manual de RemBridge
127
ANEXO 2 CP200X
COMMUNICATION PROTOCOL
Desarrollo en Java de un sistema de acceso remoto a Modbus. Implementación Web y Java del sistema para CP2003.