Guia de Ayuda Bloques Modbus

19
GUIA DE PROGRAMACION BLOQUES MODBUS - DINAUT Nomenclatura del Documento MAN-0100.DOC Versión 1.0 Realizado por Juan Pablo Chero - Din Automatización SAC Fecha de Realización 14/09/2010 Aprobado por Nilton Vallejo Castro Fecha de Aprobación 15/09/2010 DIN Automatización SAC. - 1 -

description

modbus

Transcript of Guia de Ayuda Bloques Modbus

Page 1: Guia de Ayuda Bloques Modbus

GUIA DE PROGRAMACIONBLOQUES MODBUS - DINAUT

Nomenclatura del Documento MAN-0100.DOCVersión 1.0Realizado por Juan Pablo Chero - Din Automatización SACFecha de Realización 14/09/2010Aprobado por Nilton Vallejo CastroFecha de Aprobación 15/09/2010

DIN Automatización SAC. - 1 -

Page 2: Guia de Ayuda Bloques Modbus

Tabla de contenidos

1. GENERALIDADES………….…………………………………..…………………………….……….32. REQUERIMIENTOS…………………………………………………………………………….……..43. PARAMETRIZACION DE HARDWARE……………………………………………………….……..54. BLOQUES DE FUNCIONAMIENTO…………………….…..……………………………………..…75. TABLA DE ESCLAVO…………………………………………………………………………………9

3.1 ESTRUCTURA DE DATOS DE CADA TAREA……………………………………………….103.2 EJEMPLO…..……………………………………………………………………………………..10

6. TABLA DE VARIABLES………………………………………………………………………………….11 7. EJEMPLO APLICATIVO………………………………………………..........................................................12

DIN Automatización SAC. - 2 -

Page 3: Guia de Ayuda Bloques Modbus

1. GENERALIDADES

En este manual se enseñará a establecer una comunicación Modbus desde un PLC utilizando una CP y los bloques de programa para Modbus que son una alternativa a las librerías ofrecidas por Siemens para este fin.

EL PROTOCOLO MODBUS

es un sistema de transmisión de datos que controla la estructura de las comunicaciones que tienen lugar entre la Estación Central o Maestra y las Estaciones Esclavas (Autómatas, RTU, PID, etc.). A cada equipo remoto se le asigna un número de dispositivo (dirección unívoca) en el rango de 1 a 255 . Una comunicación comprende una interrogación 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 carácter 2 puntos ( : ) Cada carácter ocupa 1 BYTE. EL final de la trama se forma con los caracteres CR LF. El sistema de numeración es Hexadecimal.

Modo RTU ó Binario: Es más 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 lãs 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 información de un dispositivo, cómo 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 más dispositivos slave. Los equipos que poseen comunicación Modbus generalmente poseen un mapeo de registros en el cual se indica que tipo de información se esta enviando en cada registro.

DIN Automatización SAC. - 3 -

Page 4: Guia de Ayuda Bloques Modbus

Por ejemplo:

En la figura se observa que en el registro 7 tenemos información de temperatura de el equipo, en este caso la temperatura de los rodamientos 1 y 2.

Revisar el Mapeo de Señales de un equipo es el primer paso para establecer una comunicación Modbus, en el se identificarán que señales nos interesan y a que registro corresponden estas señales.

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 comunicación Modbus que se explicaran mas adelante que no son propiedad de Siemens. No es necesario contar con la librería de Siemens para Modbus.

HARDWARE: Se requiere de una CP para conexión punto a punto la mas usada es la CP 341.

DIN Automatización SAC. - 4 -

Page 5: Guia de Ayuda Bloques Modbus

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 pestaña direcciones se puede indicar que dirección física tendrá nuestra CP, en este caso tiene la dirección 368, tal como se muestra en la figura:

DIN Automatización SAC. - 5 -

Page 6: Guia de Ayuda Bloques Modbus

Hacemos click en parámetros y aparecerá la siguiente ventana, en la que tenemos que indicar que el protocolo es ASCII

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 transmisión, 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.

DIN Automatización SAC. - 6 -

Page 7: Guia de Ayuda Bloques Modbus

4. BLOQUES COMUNICACIÓN MODBUSLa comunicación modbus utiliza los siguientes bloques:

Símbolo Dirección Tipo ComentarioTabla Slv Modbus DB 1 DB 1 Tabla de esclavos ModbusBUFF_DB_RCV_MST DB 9 DB 9 Buffer Datos de RecepciónBUFF_DB_SND_MST DB 10 DB 10 Buffer Datos de EnvíoDB_RCV_MST DB 7 FB 7 Bloque Datos Instancia FB7DB_SND_MST DB 8 FB 8 Bloque Datos Instancia FB8Tabla CRC Master DB 50 DB 50 Bloque Datos CRCMSTMDB_DB DB 51 FB 51 Bloque Datos Instancia FB51R_DataDrives DB 52 DB 52 Lectura de datos de Drives mediante ModbusMonModbus DB 53 DB 53 Datos de Monitoreo Comunicación ModbusCRC16 FC 50 FC 50 Cálculo de CRCModBUs FC 220 FC 220 Bloques de comunicación ModbusP_RCV_RK FB 7 FB 7 Receive Data / Provide DataP_SND_RK FB 8 FB 8 Send Data / Fetch DataMST_MODBUS FB 51 FB 51 Ejecuta tarea de maestro Modbus RTU

Los principales bloques (FB7, FB8, FB51) los cuales se detallan a continuación:

FB7 RECEIVE DATA / PROVIDE DATA

De este bloque se utilizan básicamente las señales:

LADDR: dirección física decimal de la CP

DB_NO: indica el número de DB que será el Buffer de recepción

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 Automatización SAC. - 7 -

Page 8: Guia de Ayuda Bloques Modbus

En este bloque al igual que el anterior se indica:

LADDR: dirección física en decimal de la CP

DB _NO: indica el número de DB que será el Buffer de envío

DBB_NO: indica desde que registro dentro del DB indicado anteriormente se comenzaran a almacenar los datos que serán enviados

FB51 MST_MODBUS

En este bloque se tienen las siguientes señales:

ENABLE:= Habilitador del bloque, para que el DB funcione la señal debe estar en uno

RESET := Reset del bloque

CLOCK := Se debe indicar la marca de ciclo con el tiempo para cada reintento de búsqueda del esclavo

DIN Automatización SAC. - 8 -

Page 9: Guia de Ayuda Bloques Modbus

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 Recepción

IMSG_LEN:=

OMSG_DB_NO:= Buffer Datos de Envío

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 comunicación.

La tabla de esclavos tiene la siguiente estructura.

DIN Automatización SAC. - 9 -

Page 10: Guia de Ayuda Bloques Modbus

Cada una de las estructuras de datos corresponde a una tarea específica del maestro modbus. La primera estructura (DBB0 .. DBB15) no es considerado en el ciclo de comunicación del maestro. Por lo tanto, la tarea Nº1 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): Dirección modbus del esclavo a consultar. En la figura se esta apuntando al esclavo 1

FCT_CODE (byte): Código de función a ejecutar (1: Lectura bits; 3: Lectura registros; 15: Escritura bits; 16: Escritura registros).

START_ADDR (INT): Dirección Inicial de registros a trabajar. Se debe ingresar el valor disminuido en una unidad.

REG_NO (INT): Número de registros a trabajar (leer/escribir).

DB_NO (INT): Número de Bloque de Datos a trabajar (recepción/envío).

ADDRES (DWORD): Área del bloque de datos a trabajar (recepción/envío).

TIME_REG (INT): Tiempo transcurrido desde última consulta (dato de diagnostico)

FREQUENCY (INT): Frecuencia de tiempo para ejecutar consulta.

3.2 EJEMPLO

DIN Automatización SAC. - 10 -

Page 11: Guia de Ayuda Bloques Modbus

En este caso tenemos al esclavo con la dirección 2, y como en el área FCT_CODE se coloco el número 3 entonces la función 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 almacenarán en el DB52 el número de registro en el que se almacena se calcula de la siguiente manera:

En la tabla de esclavos del ejemplo se indica el número 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

, número hexadecimal

Convertimos “A” a decimal y obtenemos “10” que es el registro desde el cual se almacenará la información, es decir desde el registro DB52.DBW10.

NOTA: Si en el mapeo de datos del esclavo se desean leer registros que no están en orden consecutivo entonces se deberán 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 recepción

DIN Automatización SAC. - 11 -

Page 12: Guia de Ayuda Bloques Modbus

DB8.DBX1.1 Resetea el Envío 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 envío sin error

DB7.DBX18.0 indica que se ha recibido datos sin error

DB51.DBW 20 Indica el número de trabajos que se están 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 señales.

7. EJEMPLO APLICATIVO

Se tiene un equipo llamado “watchdog” que monitorea diferentes señales en un elevador; señales 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 interesaría leer. Adicionalmente es bueno saber que dirección de esclavo tiene el equipo y a que velocidad trabajará aunque en la mayoría estos parámetros se pueden programar y modificar, estos datos nos servirán para parametrizar nuestra CP, tal como fue indicado al principio de este manual.

DIN Automatización SAC. - 12 -

Page 13: Guia de Ayuda Bloques Modbus

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. Además 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 Automatización SAC. - 13 -

Page 14: Guia de Ayuda Bloques Modbus

La dirección física de nuestra CP es 256 esta dirección tenemos que indicarla en los bloques FB7 y FB8 (en caso de cambiar esta dirección en el equipo entonces también 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 también en el bloque FB51).

A continuación se parametrizará el DB de tareas.

Como los registros que deseamos leer están agrupados en tres grupos, entonces tendremos tres tareas de la manera en que se muestra a continuación:

TAREA 1

En este caso nuestro esclavo tiene la dirección 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 quedaría 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 tendríamos que restarle 1 tal como se indica en la tabla de tarea, con lo que el número indicado sería 0.

En otras palabras ya que queremos leer el registro 1 tendríamos que restarle 1 ( 1 - 1=0) entonces el numero indicado sería 0. Sin embargo como nuestro mapeo tiene el registro 0 entonces no sería 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 leídos se almacenaran en este DB

ADRESS: DW#16#84000000 ya que almacenaremos en el DB 52 desde el registro 0.

TAREA 2:

DIN Automatización SAC. - 14 -

Page 15: Guia de Ayuda Bloques Modbus

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 leído 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 operación:

Queremos que se escriba a partir del registro 1, entonces 1x 8 =8 (número decimal) o transformamos a hexadecimal y tenemos el mismo número 8. es por eso que la dirección 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 número 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 están 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 operación:

Queremos que se escriba a partir del registro 3, entonces 3x 8 =24 (número decimal) lo transformamos a hexadecimal y tenemos el mismo número 18. es por eso que la dirección 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 también 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 Automatización SAC. - 15 -