Professional Documents
Culture Documents
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
2
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
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
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.
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
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:
#include <p18f4620.h>
#include "Stack_DNP.h"
void YourHighPriorityISRCode();
void YourLowPriorityISRCode();
}
#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
while(1){
// Realiza las tareas correspondientes al Stack DNP3.0
vStackTaskDNP();
#if defined(STACK_USE_COUNTER_BINARY)
vUpdateCounterBinary();
#endif