Sunteți pe pagina 1din 15

GUIA DE PROGRAMACION

BLOQUES MODBUS - DINAUT

Nomenclatura del Documento


Versin
Realizado por
Fecha de Realizacin
Aprobado por
Fecha de Aprobacin

DIN Automatizacin SAC.

MAN-0100.DOC
1.0
Juan Pablo Chero - Din Automatizacin SAC
14/09/2010
Nilton Vallejo Castro
15/09/2010

-1-

Tabla de contenidos

1.
2.
3.
4.
5.

GENERALIDADES.....3
REQUERIMIENTOS...4
PARAMETRIZACION DE HARDWARE...5
BLOQUES DE FUNCIONAMIENTO.....7
TABLA DE ESCLAVO9
3.1 ESTRUCTURA DE DATOS DE CADA TAREA.10
3.2 EJEMPLO....10
6. TABLA DE VARIABLES.11
7. EJEMPLO APLICATIVO..........................................................12

DIN Automatizacin SAC.

-2-

1. GENERALIDADES
En este manual se ensear a establecer una comunicacin Modbus desde un PLC utilizando
una CP y los bloques de programa para Modbus que son una alternativa a las libreras ofrecidas
por Siemens para este fin.
EL PROTOCOLO MODBUS
es un sistema de transmisin de datos que controla la estructura de las comunicaciones que
tienen lugar entre la Estacin Central o Maestra y las Estaciones Esclavas (Autmatas, RTU,
PID, etc.). A cada equipo remoto se le asigna un nmero de dispositivo (direccin unvoca) en el
rango de 1 a 255 . Una comunicacin comprende una interrogacin y una respuesta, lo que
forma la ESTRUCTURA DE LAS TRAMAS del protocolo.
MODOS DE TRANSMISION:
Modo ASCII: Se caracteriza porque la trama comienza con el carcter 2 puntos ( : )
Cada carcter ocupa 1 BYTE. EL final de la trama se forma con los caracteres CR LF. El sistema
de numeracin es Hexadecimal.
Modo RTU Binario: Es ms complejo, es una secuencia de unos y ceros en paquetes
binarios de 8 bits. EL final de la trama se forma con los caracteres CR LF.

Algunas de ls funciones Modbus mas importantes:

El protocolo MODBUS define una estructura de mensajes que puede ser reconocida por
diferentes dispositivos independientemente del tipo de red de comunicaciones utilizada. El
protocolo describe el proceso para acceder a informacin de un dispositivo, cmo debe
responder ste, y como se notifican las situaciones de error.
El protocolo MODBUS define una red digital de comunicaciones con un solo master y uno o ms
dispositivos slave. Los equipos que poseen comunicacin Modbus generalmente poseen un
mapeo de registros en el cual se indica que tipo de informacin se esta enviando en cada
registro.

DIN Automatizacin SAC.

-3-

Por ejemplo:

En la figura se observa que en el registro 7 tenemos informacin de temperatura de el equipo,


en este caso la temperatura de los rodamientos 1 y 2.
Revisar el Mapeo de Seales de un equipo es el primer paso para establecer una comunicacin
Modbus, en el se identificarn que seales nos interesan y a que registro corresponden estas
seales.
2.- REQUERIMIENTOS
SOFTWARE: para poder utilizar estos bloques se requiere del software de Siemens step 7 , el
software CP PtP PARAM(para poder parametrizar nuestro hardware) y los
bloques de comunicacin Modbus que se explicaran mas adelante que no son
propiedad de Siemens. No es necesario contar con la librera de Siemens para
Modbus.
HARDWARE: Se requiere de una CP para conexin punto a punto la mas usada es la CP 341.

DIN Automatizacin SAC.

-4-

3.- PARAMETRIZACION DEL HARDWARE


Para poder parametrizar nuestra CP tenemos que ingresar a la ventana de hardware en step 7 y
hacer doble click en la CP se abrir la siguiente ventana:

En la pestaa direcciones se puede indicar que direccin fsica tendr nuestra CP, en este caso
tiene la direccin 368, tal como se muestra en la figura:

Hacemos click en parmetros y aparecer la siguiente ventana, en la que tenemos que indicar
que el protocolo es ASCII
DIN Automatizacin SAC.

-5-

Hacemos doble click en el cuadrado azul con la figura de una carta, en la ventana que se abrir
tenemos que indicar la velocidad de transmisin, la trama de bits de datos, el bit de parada y si
existe o no bit de paridad. Todos estos datos deben obtenerse del manual del equipo modbus
que queremos incluir a nuestra Red.

4. BLOQUES COMUNICACIN MODBUS


La comunicacin modbus utiliza los siguientes bloques:

DIN Automatizacin SAC.

-6-

Smbolo
Tabla Slv Modbus
BUFF_DB_RCV_MST
BUFF_DB_SND_MST
DB_RCV_MST
DB_SND_MST
Tabla CRC Master
MSTMDB_DB
R_DataDrives
MonModbus
CRC16
ModBUs
P_RCV_RK
P_SND_RK
MST_MODBUS

Direccin
DB
1
DB
9
DB
10
DB
7
DB
8
DB 50
DB 51
DB 52
DB 53
FC 50
FC 220
FB
7
FB
8
FB 51

Tipo
DB
1
DB
9
DB 10
FB
7
FB
8
DB 50
FB 51
DB 52
DB 53
FC 50
FC 220
FB
7
FB
8
FB 51

Comentario
Tabla de esclavos Modbus
Buffer Datos de Recepcin
Buffer Datos de Envo
Bloque Datos Instancia FB7
Bloque Datos Instancia FB8
Bloque Datos CRC
Bloque Datos Instancia FB51
Lectura de datos de Drives mediante Modbus
Datos de Monitoreo Comunicacin Modbus
Clculo de CRC
Bloques de comunicacin Modbus
Receive Data / Provide Data
Send Data / Fetch Data
Ejecuta tarea de maestro Modbus RTU

Los principales bloques (FB7, FB8, FB51) los cuales se detallan a continuacin:

FB7 RECEIVE DATA / PROVIDE DATA

De este bloque se utilizan bsicamente las seales:


LADDR: direccin fsica decimal de la CP
DB_NO: indica el nmero de DB que ser el Buffer de recepcin
DBB_NO: indica desde que registro dentro del DB indicado anteriormente se comenzaran a
almacenar los datos recibidos.

FB 8 SEND DATA / FETCH DATA

DIN Automatizacin SAC.

-7-

En este bloque al igual que el anterior se indica:


LADDR: direccin fsica en decimal de la CP
DB _NO: indica el nmero de DB que ser el Buffer de envo
DBB_NO: indica desde que registro dentro del DB indicado anteriormente se comenzaran a
almacenar los datos que sern enviados

FB51 MST_MODBUS

En este bloque se tienen las siguientes seales:


ENABLE:= Habilitador del bloque, para que el DB funcione la seal debe estar en uno
RESET

:= Reset del bloque

CLOCK
esclavo

:= Se debe indicar la marca de ciclo con el tiempo para cada reintento de bsqueda del

DIN Automatizacin SAC.

-8-

TX_DONE := Este bit indica que los datos han sido enviados sin error
RX_NDR := Este bit indica que los datos fueron recibidos sin error
SLV_TBL_DB:= Se debe colocar el N de DB en el que se encuentran las tareas a realizar
IMSG_DB_NO:= Buffer Datos de Recepcin
IMSG_LEN:=
OMSG_DB_NO:= Buffer Datos de Envo
CRC_DB_NO:= Bloque Datos CRC
REPLY_TIME:= indica el numero de veces que el bloque buscara al esclavo por cada reintento
RETRY_NO:= Indica el numero de reintentos del bloque

5.- TABLA DE ESCLAVOS:


El bloque de datos DB1 Tabla Slv Modbus contiene las tareas que el maestro modbus ejecutar
durante su ciclo de comunicacin.
La tabla de esclavos tiene la siguiente estructura.

DIN Automatizacin SAC.

-9-

Cada una de las estructuras de datos corresponde a una tarea especfica del maestro modbus. La
primera estructura (DBB0 .. DBB15) no es considerado en el ciclo de comunicacin del maestro.
Por lo tanto, la tarea N1 corresponde a siguiente estructura (DBB16 .. DBB31). El final de la tabla
de esclavos es determinado por el dato END_TABLE11 (WORD)=W#16#FFFF.
NOTA: Es muy importante indicar con la palabra W#16#FFFF el final de las tareas, si
esto no sucede la memoria del PLC se llenar y este pasara a STOP.

3.1 ESTRUCTURA DE DATOS DE CADA TAREA.


Cada tarea esta basada en la siguiente estructura de datos:

SLV_ADDR (byte): Direccin modbus del esclavo a consultar. En la figura se esta apuntando al
esclavo 1
FCT_CODE (byte): Cdigo de funcin a ejecutar (1: Lectura bits; 3: Lectura registros; 15:
Escritura bits; 16: Escritura registros).
START_ADDR (INT): Direccin Inicial de registros a trabajar. Se debe ingresar el valor
disminuido en una unidad.
REG_NO (INT): Nmero de registros a trabajar (leer/escribir).
DB_NO (INT): Nmero de Bloque de Datos a trabajar (recepcin/envo).
ADDRES (DWORD): rea del bloque de datos a trabajar (recepcin/envo).
TIME_REG (INT): Tiempo transcurrido desde ltima consulta (dato de diagnostico)
FREQUENCY (INT): Frecuencia de tiempo para ejecutar consulta.

3.2 EJEMPLO

DIN Automatizacin SAC.

- 10 -

En este caso tenemos al esclavo con la direccin 2, y como en el rea FCT_CODE se coloco el
nmero 3 entonces la funcin que realizaremos ser de lectura. Leeremos desde el registro 2
(recordemos que tenemos que restarle uno al numero indicado en la tabla de tareas), a partir de el
registro 2 leeremos los cinco registros siguientes.
Los datos adquiridos del esclavo se almacenarn en el DB52 el nmero de registro en el que se
almacena se calcula de la siguiente manera:
En la tabla de esclavos del ejemplo se indica el nmero 50 (ver en la figura el tem ADRESS) este
numero se encuentra en hexadecimal y hace referencia al espacio de memoria desde el cual se
almacenaran los registros recibidos del esclavo
50
A , nmero hexadecimal
8
Convertimos A a decimal y obtenemos 10 que es el registro desde el cual se almacenar la
informacin, es decir desde el registro DB52.DBW10.
NOTA: Si en el mapeo de datos del esclavo se desean leer registros que no estn en orden consecutivo
entonces se debern hacer tareas para cada grupo de registros consecutivos que se tenga, es decir, si
deseo leer los registros 1, 2,3 y luego el registro 7 entonces en una tarea indicare los tres primeros y en la
siguiente el registro 7.

6. TABLA DE VARIABLES

Como ayuda y para poder monitorear el enlace de la CP y el dispositivo podemos hacer uso de la tabla de
variables VAT2 que tiene la siguiente estructura:

DB51.DBX0.1 resetea los punteros y el temporizador


DB7.DBX0.1 Resetea la recepcin
DIN Automatizacin SAC.

- 11 -

DB8.DBX1.1 Resetea el Envo de datos


DB51.DBX 16.3 Cada vez que finalicemos una tarea con xito se encender la luz verde que lo confirma
DB8.DBX 22.0 indica fin del envo sin error
DB7.DBX18.0 indica que se ha recibido datos sin error
DB51.DBW 20 Indica el nmero de trabajos que se estn ejecutando
DB51.DBW 28 realiza el conteo del tiempo para cada reintento
DB51.DBW 30 cuenta el numero de reintentos para buscar el equipo modbus. Si el enlace se realiz
correctamente este conteo no debe darse.
NOTA Se aconseja dar un pulso a los 3 primeros bits que se indican en la tabla para resetear las
seales.

7. EJEMPLO APLICATIVO
Se tiene un equipo llamado watchdog que monitorea diferentes seales en un elevador; seales de
temperatura en rodamientos, desalineamiento superior e inferior y velocidad. Como se indic al principio lo
primero es conocer el mapeo de datos del equipo modbus e identificar que registros nos interesara leer.
Adicionalmente es bueno saber que direccin de esclavo tiene el equipo y a que velocidad trabajar
aunque en la mayora estos parmetros se pueden programar y modificar, estos datos nos servirn para
parametrizar nuestra CP, tal como fue indicado al principio de este manual.

DIN Automatizacin SAC.

- 12 -

En la figura tenemos el mapeo de datos de el equipo watchdog. En este caso supongamos que a
nosotros solo nos interesa saber la velocidad actual del equipo que esta en el registro 1, las alarmas de
baja velocidad y alta velocidad, registros 3 y 4 respectivamente. Adems se quiere saber que temperatura
marcan los sensores 1, 2, 3, 4,5 y 6 esto lo encontramos en los registro 10, 11 y 12 respectivamente.
Una vez identificados que registros nos interesan, pasamos a parametrizar el bloque FC6 que es donde se
llaman al FB7, FB51 y FB8.

DIN Automatizacin SAC.

- 13 -

La direccin fsica de nuestra CP es 256 esta direccin tenemos que indicarla en los bloques FB7 y FB8
(en caso de cambiar esta direccin en el equipo entonces tambin debe modificarse en los bloques, de lo
contrario no existir enlace entre la CP y el dispositivo Modbus). Tenemos en este caso la marca de ciclo
M0.6 que corresponde a un tiempo de 1 segundo (si se configura en el CPU otra marca de Ciclo entonces
este debe cambiarse tambin en el bloque FB51).
A continuacin se parametrizar el DB de tareas.
Como los registros que deseamos leer estn agrupados en tres grupos, entonces tendremos tres tareas de
la manera en que se muestra a continuacin:
TAREA 1
En este caso nuestro esclavo tiene la direccin 1, el cual debe indicarse en cada tarea. En la primera tarea
leeremos solo el registro 1 del watchdog este registro lo almacenaremos en el primer registro del DB52, es
decir, en el registro DB52.DBW0. Por lo que la tarea quedara de la siguiente manera:

START_ADDR: 1; ya que si nos damos cuenta en nuestro mapeo de datos el primer dato se encuentra en
el registro 0, si este registro 0 no existiera entonces tendramos que restarle 1 tal como se indica en la tabla
de tarea, con lo que el nmero indicado sera 0.
En otras palabras ya que queremos leer el registro 1 tendramos que restarle 1 ( 1 - 1=0) entonces el
numero indicado sera 0. Sin embargo como nuestro mapeo tiene el registro 0 entonces no sera necesario
hacer esta resta.
REG_N0 : como en esta primera tarea solo queremos leer este nico registro colocamos el numero 1
para hacer referencia que solo leeremos un registro.
DB_NO: 52; ya que los datos ledos se almacenaran en este DB
ADRESS: DW#16#84000000 ya que almacenaremos en el DB 52 desde el registro 0.
TAREA 2:

DIN Automatizacin SAC.

- 14 -

START_ADDR: 3; En este caso tampoco se resta uno por lo indicado anteriormente.


REG_NO: Ya que en este grupo leeremos 2 registros, el 3 y el 4, colocamos el numero 2 haciendo
referencia a ello.
ADRESS: D#16#8400008; En este caso para no sobrescribir lo almacenado anteriormente en la primera
tarea tenemos que indicar el registro dentro del DB52 donde queremos se escriba lo ledo en esta tarea,
Como el registro 0 ya esta ocupado escogemos el registro 1 y 2, solo tenemos que indicar a partir de que
registro se escribir para eso tenemos que hacer la siguiente operacin:
Queremos que se escriba a partir del registro 1, entonces 1x 8 =8 (nmero decimal) o transformamos a
hexadecimal y tenemos el mismo nmero 8. es por eso que la direccin es: DW#16#8400008.

TAREA 3

START_ADDR: 10; En este caso tampoco se resta uno por lo indicado anteriormente.
REG_NO: Ya que en este grupo leeremos 3 registros, el 10, 11 y 12, colocamos el nmero 3 haciendo
referencia a ello.
ADRESS: D#16#84000018; En este caso para no sobrescribir lo almacenado anteriormente en la primera
y segunda tarea tenemos que indicar el registro dentro del DB52 donde queremos se escriba lo leido en
esta tarea, Como el registro 0, 1 y 2 ya estn ocupados escogemos el registro 3,4 y 5, solo tenemos que
indicar a partir de que registro se escribir para eso tenemos que hacer la siguiente operacin:
Queremos que se escriba a partir del registro 3, entonces 3x 8 =24 (nmero decimal) lo transformamos a
hexadecimal y tenemos el mismo nmero 18. es por eso que la direccin es: DW#16#84000018.

OBSERVACION
Es posible cambiar el numero de los DB y FB si en caso estamos utilizando el mismo numero de bloques
en nuestro programa para que no haya conflictos, pero recordar que para eso debe modificarse tambin
todo bloque donde sean utilizados para indicar la nueva ruta y no se apunte hacia un DB o un FB que no
es el correcto.

DIN Automatizacin SAC.

- 15 -

S-ar putea să vă placă și