You are on page 1of 8

Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

Protocolo de comunicaciones DNP3

Casanova, Alejandro y Dusso, Joaqun


Universidad Nacional del Comahue/ Facultad de Ingeniera
Departamento de Electrotecnia
Argentina
Correo-e: alec.msj@hotmail.co m; joaquin_ dusso @hotmail.com

Abstract. Este artculo presenta una introduccin al protocolo DNP3 mostrando sus principales
caractersticas, presentando conceptos bsicos para su entendimiento y aplicacin, entregando una
implementacin en un sistema embebido utilizando el microcontrolador 18F4620 de la empresa
Microchip

1 Introduccin permite la interoperabilidad entre equipos de


diferentes fabricantes, esto significa por ejemplo que
DNP3 o Distributed Network Protocol 3 es un un usuario puede comprar el equipo del sistema,
estndar de telecomunicaciones que define las como una estacin principal de un fabricante, y ser
comunicaciones entre estaciones maestras, unidades capaz de agregar equipos RTU que provienen de otro
remotas (RTU) y otros dispositivos electrnicos fabricante.
inteligentes (IEDs). Fue desarrollado para lograr la
interoperabilidad entre los sistemas de empresas
elctricas, petroleras, de agua, entre otras .
DNP3 ha sido diseado especficamente para 1.1 Caractersticas de DNP3
aplicaciones SCADA (Control supervisor y
adquisicin de datos), esto implica la adquisicin de DNP3 ofrece caractersticas importantes, as como la
informacin y envo de comandos de control entre flexibilidad y la seguridad. Estos se resumen en la
dispositivos computarizados separados fsicamente. siguiente lista:
Est diseado para la transferencia de paquetes
Los mensajes se separan en varias tramas para
relativamente pequeos de datos de manera fiable
proporcionar un control ptimo de error y
con los mensajes que lleguen a participar de una secuencias rpidas de comunicacin.
secuencia determinista. En este sentido se diferencia
Permite topologa igual-igual, as como
de otros protocolos de uso general, tales como FTP,
maestro-esclavo.
que es parte de TCP/IP, que puede enviar archivos de
Permite topologa de mltiples maestros.
gran tamao, pero de una manera que generalmente
no es tan adecuada para el control SCADA. Solicitudes y respuestas con mltiples tipos de
datos en un solo mensaje, y permite objetos
Una caracterstica clave del protocolo DNP3 es que definidos por el usuario.
es un protocolo de estndar abierto y ha sido Permite comunicar excepciones/eventos sin
adoptado por un nmero significativo de fabricantes necesidad de encuestas por parte del maestro.
de equipos. La ventaja de un estndar abierto es que (Respuestas no solicitadas )

Congreso 2010, Pgina 1


Permite mensajes en Broadcast (Para todas son necesarias, esto se debe a que la estacin
las estaciones esclavas) principal puede invocar al sub-estacin a enviar una
Transferencia segura de "respuesta no solicitada" cuando se tiene un cambio
configuracin/archivos. que debe ser reportado.
Direccionar ms de 65 000 dispositivos en un As, en ausencia de cambios el sistema permanece en
solo enlace. reposo, o en un estado tranquilo, sin encuestas de la
Proporciona sincronizacin de tiempo y estacin principal, ni respuestas de los puestos
eventos con marca de tiempo. avanzados. En un sistema en reposo, por lo general
Confirmaciones al nivel de la Capa de Enlace una encuesta peridica de fondo, an se utiliza, tal
y/o Capa de Aplicacin garantizando as alta vez en intervalos de una hora, para tomar
integridad en la informacin. precauciones contra la falla de comunicaciones.
Asigna prioridades a un grupo de datos A pesar de la capacidad de las estaciones esclavas
(clases). para iniciar las comunicaciones dentro de DNP3,
slo las estaciones maestras puede iniciar las
solicitudes de datos, o ejecutar comandos, a otras
estaciones.
1.2 Topologas
Maestro/Esclavo.
Mltiple esclavos. 2 Fundamentos del protocolo.
Jerrquica con concentradores de datos
intermedios. El protocolo DNP3 presenta los datos de forma
Mltiples maestro. jerrquica, empezando en la parte inferior con la capa
fsica y llegando a la capa de aplicacin en la parte
superior (funciones de nivel superior). Aun as, en
lugar de asemejarse al protocolo de 7 capas de la OSI
(Open System Interconection interconexin de
sistemas abiertos), en el rea de SCADA y de
comunicaciones IED, hubo necesidad de un modelo
simplificado que omite algunas de las funciones de
nivel superior. Este modelo fue creado por la
Comisin Electrotcnica Internacional (IEC), que
define un modelo de 3 capas. Esto se conoce como
Enhanced Performance Architecture, o EPA. Este es
el modelo en que se basa DNP3.

Fig. 2: Modelos OSI y EPA.

2.1 Estructura del mensaje DNP3


En la figura 3 se muestra cmo el mensaje
transmitido se construye en DNP3. Cada capa del
Fig 1: Topologas soportadas. modelo toma la informacin tomada de la capa
superior, y aade la informacin relativa a los
servicios prestados por sta. La informacin adicional
DNP3 soporta los modos operativos de encuestas y se suele aadir en el encabezamiento, es decir, frente
funcionamiento por excepcin. Esta ltima se llama al mensaje original.
as porque las encuestas para comprobar cambios no As, durante el montaje del mensaje, el mensaje ir

2
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

Fig. 3: Estructura de mensaje.

creciendo en tamao en cada capa que pase, pero satlite. Pero tambin se implementa sobre una capa
tambin en este proceso se desmonta en unidades ms fsica como Ethernet encapsulndolo en paquetes
pequeas de datos. TCP/IP.
De esta forma cuando se trasmite un mensaje, los 2.1.2 Capa de enlace de datos
datos se encapsulan en fragmentos a nivel de
aplicacin. El tamao mximo de un fragmento est La capa de enlace de datos proporciona una
establecido en 2048 bytes. El nivel de transporte se transmisin fiable de datos a travs del medio fsico.
encarga de adaptar los fragmentos para poder Mientras que la capa fsica tiene que ver con el paso
encapsularlos en tramas (nivel de enlace), para lo de una seal, o un poco de datos, la capa de enlace de
cual, secciona el mensaje del nivel de aplicacin si es datos est relacionada con el paso de grupos de datos,
necesario, y les agrega la cabecera de transporte de y estos grupos pueden ser contemplados como una
un byte formando un segmento que puede ser como trama.
mximo de 250 bytes. Por ltimo en el nivel de Las funciones que ofrece la capa de enlace incluyen
enlace, al segmento recibido del nivel de transporte el control de flujo y deteccin de errores. Esto se
se le aade una cabecera de enlace de diez bytes en la logra agregando una cabecera a cada trama (10 bytes)
cual se incluyen dos bytes de CRC y luego, cada 16 con la insercin de un cdigo inicial de 16-bits
bytes recibidos se agrega un CRC de 16-bits. A este (Start), cantidad de bytes enviados en la trama, un
conjunto de datos se lo denomina trama, la cual tiene byte para control de flujo, direccin de destino,
como mximo 292 bytes. direccin de origen y un CRC de 16-bit para la
2.1.1 Capa fsica cabecera y cada 16 bytes de la trama. En caso de que
el mensaje no sea mltiplo de 16 bytes, cabe aclarar
El nivel fsico es el medio fsico sobre el cual se que, se agrega un CRC de 16-bits al grupo de bytes
transmite el protocolo. El elemento de datos a este sin rellenar con ceros (0x00). El tamao mximo de
nivel es esencialmente el bit, es decir, tiene que ver una trama de enlace de datos es de 292 bytes.
con la forma de pasar un poco de datos a la vez a
El byte de control de flujo informa sobre la direccin
travs de los medios fsicos. La definicin de la capa
del mensaje (A->B o B->A), he implementa
fsica incluye las especificaciones elctricas, pin-out,
funciones para determinar el estado de la conexin
velocidades de comunicacin y las funciones para el
lgica. Entre las funciones se incluyen: ACK, NACK,
control de los medios de comunicacin, tales como
Reset del enlace, peticin de confirmacin ACK,
los detalles necesarios para establecer y mantener el
estado del enlace y respuesta del estado del enlace.
enlace fsico, y para controlar el flujo de datos.
Cuando se solicita confirmacin a nivel enlace de los
Comnmente, DNP se especifica sobre una capa
datos, el receptor responde con un ACK si la
fsica serial simple tal como RS232 o RS485
cabecera recibida es correcta y libre de errores.
usando medios fsicos tales como fibra, radio o

Congreso 2010, Pgina 3


2.1.3 Capa de pseudo-transporte cabeceras de objeto identifican los tipos de datos del
objeto de datos. Estos mensajes no necesariamente
Esta capa est incluida en DNP3 para permitir la pueden estar contenidos en el mensaje, por ejemplo
transmisin de grandes bloques de datos. Divide el cuando la estacin principal realiza una peticin de
fragmento recibido por parte de la capa de aplicacin datos el mensaje contendr la cabecera objeto
en varios segmentos, agregndole una cabecera de 1 indicando el tipo de datos, y la estacin secundaria
byte a cada uno que indica si se trata del primer, el responder con la misma cabecera objeto y con los
ltimo, uno intermedio o un nico segmento del datos correspondientes. En la figura 4 se muestra la
mensaje. Tambin agrega un contador de secuencia estructura.
para detectar si hay prdida de algunos de los
segmentos del mensaje. En un mensaje podemos tener varios tipos de datos,
por lo que, cada uno tendr su cabecera de objeto y
2.1.4 Capa de aplicacin. datos correspondientes. La cabecera de objeto puede
La capa de aplicacin es el nivel donde se genera los tener entre 3 a 11 bytes de longitud, y est
conformada por los campos de Objeto, Calificador y
datos para el envo de una solicitud o una respuesta.
Rango. El campo objeto adems est dividido en dos
Al igual que la capa de pseudo-transporte agrega una
cabecera (2 o 4 bytes dependiendo si es una solicitud bytes, grupo de objeto y variacin del objeto
respectivamente.
o una respuesta) para dar la posibilidad de transmitir
mensajes de un solo fragmento o mltiples El grupo de objeto especifica el tipo de datos, como
fragmentos, de esta manera permite el concepto de entradas analgicas, entradas binarias, contadores,
mensajes de tamao ilimitado. Adems indica si es etc. El campo variacin especfica una variacin
necesario o se ha pedido una solicitud de particular del tipo de datos (Entrada analgica 16-
confirmacin a nivel aplicacin (est confirmacin no bits, 32-bits, etc.).
solo nos indica que se ha recibido el dato, sino que
adems el mensaje completo est libre de errores),
indica si es un mensaje no solicitado, he integra un
campo de funcin a nivel aplicacin para indicar el
propsito o la operacin solicitada del mensaje.
Mientras que DNP3 permite mltiples tipos de datos
en un nico mensaje, slo permite una sola operacin
solicitada sobre los tipos de datos en el
mensaje. Algunos ejemplos de funciones que se
incluyen: Confirmar (para la confirmacin de la capa
de aplicacin), leer, escribir; seleccionar, operar (para
seleccionar antes de operar sobre salidas binarias),
operar directamente; congelar, borrar (para Tabla 1: Grupo de datos.
contadores), habilitar, deshabilitar los mensajes no El campo calificador indica el modo de
solicitados, y asignar clase (vase ms adelante) a un direccionamiento de las variables con las cuales
determinado tipo de datos entre otras. trabajar, entre estos modos de direccionamiento
2.2 Modelos de Objetos de datos en DNP3 tenemos, direcciones por rango (variables
consecutivas e identificadas por el ndice como en un
En DNP3 los datos siempre consisten de dos partes, arreglo de variables), direccionamiento absoluto
una cabecera de objeto y un objeto de datos. Las (direcciones de la memoria), direccionamiento sin

Fig. 4: Estructura de Objetos de datos.

4
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
rango (identificadas por el ndice pero de variables no la re-definicin del tipo de datos soportados por el
consecutivas) y todas las variables disponibles. Todos compilador, y las definiciones y funciones necesarias
estos tipos de direccionamiento tienen un cdigo para controlar el hardware. De esta manera evitamos
establecido que depender si se necesita 8-bits, 16- restringir la librera a una arquitectura, y para migrar
bits o 32-bits para establecer el rango o direccionar. solo hay que modificar estos archivos.
El campo rango es un adicional para el calificador, en El archivo ConfigStackDNP.h contiene las
donde se indicar la cantidad de datos solicitados, o definiciones para determinar qu tipo de datos
el inicio y el final del rango, o nada. objetos de DNP se han de implementar, configurar
sus cantidades, sus prioridades (Clase) y su ejecucin
Los distintos tipos de datos pueden ser reportados
en hardware (Pines utilizados). Tenemos por
como variables estticas o por eventos. Utilizando
ejemplo:
por eventos, solo se transmite informacin de los
cambios ocurridos desde la ltima encuesta #define MY_ADDRESS 0x0004
reduciendo notablemente el trfico sobre la lnea de
comunicacin. A esto comnmente se lo llama
reporte por excepcin (RBE por sus siglas en ingles) #define STACK_USE_INPUT_BINARY
Otra caracterstica importante que ofrece DNP3 es #define STACK_USE_OUTPUT_BINARY
agrupar los objetos de datos en clases asignndoles
#define STACK_USE_INPUT_ANALOG
prioridades, y permitiendo solicitar datos de una
forma sencilla agrupando varios tipos de datos. Se #define STACK_USE_OUTPUT_ANALOG
dispone de cuatro (4) clases, Clase 0 que representa
todos los datos estticos, y las clases 1, 2, 3 que #define STACK_USE_COUNTER_BINARY
representan las diferentes prioridades de los datos por
evento de cambio. Debido a esto se pueden definir
distintas frecuencias de encuestas por parte de la #define MAX_INPUT_BINARY 4 // [Max 8]
estacin maestra dependiendo de las prioridades #define INPUT_BINARY_0 PORTCbits.RC0
(Encuesta de eventos). Adems se realiza una
encuesta de integridad que consiste en el escaneo de #define INPUT_BINARY_1 PORTCbits.RC1
la Clase 0, que se hace con poca frecuencia por la
cantidad de datos que son solicitados.
Entre otras. Al disearse de esta forma la librera es
muy flexible a cualquier modificacin.
3 Implementacin Luego disponemos de los archivos
ObjectsDataDNP.c y ObjectsDataDNP.h que
Se ha desarrollado una librera realizada en MPLAB contienen las definiciones de las variables utilizadas
C18 (fcilmente exportable a otro compilador) que para almacenar los tipos de datos objetos
implementa algunas caractersticas del protocolo implementados por el Stack y las funciones que
DNP3 permitiendo trabajar con variables binarias de realizan una actualizacin de dichas variables cuando
entrada y salida, contadores internos, variables en la ejecucin del protocolo son solicitadas.
analgicas enteras o flotantes de entrada, variables
analgicas flotantes de salida, control de indicadores Finalmente llegamos a los archivos Stack_DNP.c y
internos, encuestas por clase y envo de mensajes no Stack_DNP.h. El archivo fuente tiene todas las
solicitados. funciones necesarias para llevar a cabo la
implementacin del protocolo, de las cuales cuatro de
Se ha embebido en un microcontrolador de la familia ellas deben ser llamadas oportunamente por el
18F de Microchip, especficamente el 18F4620, y se programa del usuario. El medio fsico implementado
ha logrado establecer con xito comunicacin con el para la comunicacin DNP es RS232 utilizando el
software KepServer (entre otros) el cual es el mdulo UART del microcontrolador, controlando el
intermediario para realizar una aplicacin en flujo de datos, ya sea por recepcin o transmisin,
SCADA. mediante interrupciones realizando un sistema
En el Apndice I se entrega un perfil del dispositivo multitarea. Tambin para cumplir este propsito el
esclavo en donde se indican las caractersticas del timeout del protocolo es implementado mediante
Stack DNP3 implementado, tipos de datos interrupciones realizadas por el timer2, el cual puede
soportados. ser reemplazado por otro fcilmente.

La librera realizada consiste de ocho archivos, tres Las tareas a ser llamadas por el programa principal
archivos fuentes con sus respectivos archivos son:
cabeceras, ms dos archivos para establecer los tipos vInitStackDNP(): Inicializa el Stack, configurado las
de datos utilizados dependiendo del compilador y la variables internas del mismo, el mdulo UART del
configuracin del funcionamiento del Stack DNP3. microcontrolador y habilitando las interrupciones
Los archivos GenericTypeDefs.h, necesarias. Se llama al iniciarse el microcontrolador.
GenericHardware.h y GenericHardware.c contienen
Congreso 2010, Pgina 5
vStackTaskDNP(): Realiza las tareas necesarias, Referencias
segn se halla recibido datos validos a ser tratados o
en la preparacin de datos para realizar una respuesta [1] Clarke Gordon, Reynders Deon, Wright Edwin.
adecuada. sta debe ser llamada peridicamente por Practical Modern SCADA Protocols: DNP3,
el programa principal. 60870.5 and Related Systems . Newnes, First
published 2004.
vDNPUpdate(): Esta funcin es la encargada de
recibir o enviar datos mediante el mdulo UART del [2] Curtis Ken. A DNP3 Protocol Primer. DNP
microcontrolador. Debe ser ubicada dentro de la Users Group, 2000, 2005.
rutina de servicio de interrupciones.
vTickUpdate(): Mantiene control sobre el timeout del
protocolo. Al igual que la funcin anterior debe estar
dentro de la rutina de servicio de interrupciones.
vResponseUnsolicitedInputBinary(): Encargada de
generar una respuesta no solicitada al cambiar el
estado de las entradas binarias. El programa principal
debe detectar esta condicin y llamar a dicha funcin.
Las entradas binarias es el nico tipo de datos que se
implementa para generar una respuesta no solicitada.
En el Apndice II se muestra un ejemplo bsico de
cmo puede ser el programa principal del usuario, y
se adjunta un *.rar con la librera descripta.
En la figura 5 podemos ver una implementacin en
InTouch 10 utilizando a KEPServerEx V4.0 como
intermediario en la comunicacin entre el dispositivo
remoto y la interface de usuario.

Fig. 5: Interface de usuario.

Copyright 2010. Casanova-Dusso: El autor delega a la Organizacin del Segundo Congreso Virtual de
Microcontroladores la licencia para reproducir este documento para los fines del Congreso ya sea que este
artculo se publique en el sitio web del congreso, en un CD o en un documento impreso de las ponencias del
Segundo Congreso Virtual de Microcontroladores.

6
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

Apndice I

Perfil de dispositivo DNP3

Vendedor: UNCo, Neuqun, Argentina Dispositivo: UNCo_CasDus 1.0

Funcin del Dispositivo: Esclavo

Tipo de variables y direccionamientos disponibles:

Entradas binarias(Object 1 Variation 0 Qualifiers 00, 06)


Entradas binarias(Object 1 Variation 1 Qualifiers 00, 06)
Entradas binarias(Object 1 Variation 2 Qualifiers 00, 06)
Salidas binarias(Object 10 Variation 0 Qualifiers 00, 06)
Salidas binarias(Object 10 Variation 1 Qualifiers 00, 06)
Salidas binarias(Object 10 Variation 2 Qualifiers 00, 06)
Salidas binarias actuador (Object 12 Variation 1 Qualifiers 07, 17, 28)
Contadores binarios(Object 20 Variation 0 Qualifiers 00, 06)
Contadores binarios(Object 20 Variation 5 Qualifiers 00, 06)
Entradas analgicas (Object 30 Variation 0 Qualifiers 00, 06)
Entradas analgicas (Object 30 Variation 2 Qualifiers 00, 06)
Entradas analgicas (Object 30 Variation 4 Qualifiers 00, 06)
Entradas analgicas (Object 30 Variation 5 Qualifiers 00, 06)
Salidas analgicas (Object 40 Variation 0 Qualifiers 00, 06)
Salidas analgicas (Object 40 Variation 3 Qualifiers 00, 06)
Salidas analgicas actuador(Object 41 Variation 3 Qualifier 07, 17, 28)

Funciones utilizadas a nivel aplicacin:

Confirm (0x00)
Read (0x01)
Write (0x02)
Select (0x03)
Operate (0x04)

El tipo de datos Entradas binarias pueden configurarse para generar respuesta no solicitada al
ocurrir un cambio.

Tamao mximo de datos a nivel enlace: Tamao mximo de datos a nivel aplicacin:

Transmisin: 292 Transmisin: 249


Recepcin: 292 Recepcin: 249
Requerimiento de confirmacin a nivel enlace:
Configurable
Requerimiento de confirmacin a nivel aplicacin:
Configurable
Apndice II

#include <p18f4620.h>
#include "Stack_DNP.h"

#pragma config OSC=HSPLL


#pragma config IESO=OFF
#pragma config PWRT=ON
#pragma config WDT=OFF
#pragma config MCLRE=ON
#pragma config XINST=OFF
#pragma config DEBUG=OFF
#pragma config FCMEN=OFF
#pragma config LVP=OFF
#pragma config BOREN=OFF

UINT8 EstadoEntradasPasadas; // Para determinar cuando generar envio no solicitado.-

void YourHighPriorityISRCode();
void YourLowPriorityISRCode();

#pragma code HIGH_INTERRUPT_VECTOR = 0x08


void High_ISR (void) {
_asm goto YourHighPriorityISRCode _endasm
}
#pragma code LOW_INTERRUPT_VECTOR = 0x18
void Low_ISR (void){
_asm goto YourLowPriorityISRCode _endasm
}
#pragma code
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode(){
}
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode(){
// Recibe y envia datos segun sea necesario.-
vDNPUpdate();
// Actualiza Temporizacion para control de Timeout.-
vTickUpdate();

}
#pragma code

void main(void){

#if defined(STACK_USE_INPUT_BINARY)
vInitInputBinary();
#endif

#if defined(STACK_USE_OUTPUT_BINARY)
vInitOutputBinary();
#endif

#if defined(STACK_USE_COUNTER_BINARY)
vInitCounterBinary();
#endif

// Inicializa Stack DNP3.0


vInitStackDNP();

#if defined(STACK_USE_INPUT_BINARY) && defined(USE_UNSOLICITED_INPUT_BINARY)


EstadoEntradasPasadas=INPUT_BINARY;
#endif

while(1){
// Realiza las tareas correspondientes al Stack DNP3.0
vStackTaskDNP();
#if defined(STACK_USE_COUNTER_BINARY)
vUpdateCounterBinary();
#endif

#if defined(STACK_USE_INPUT_BINARY) && defined(USE_UNSOLICITED_INPUT_BINARY)


if(EstadoEntradasPasadas!=INPUT_BINARY){
EstadoEntradasPasadas=INPUT_BINARY;
vResponseUnsolicitedInputBinary();
}
#endif
}
}

You might also like