1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas...

13
Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus 1.1 Objetivos El objetivo de esta práctica y de las siguientes es la utilización y la programación de una red modbus. El alumno debe ser capaz de: Diferenciar los tres niveles fundamentales de la red modbus: 1. Nivel físico: RS485. 2. Nivel de protocolo. Trama básica del protocolo modbus: cabecera, funciones, direcciones, datos, CRC. Organización maestro/esclavo. 3. Nivel de aplicación. Tipos de funciones disponibles en el equipo que se conecta vía modbus. Datos que se pueden leer del equipo. Información que se puede enviar al equipo. Trabajar la red modbus en modo programación y en modo mantenimiento: 1. Programación: montar la red con un maestro y varios esclavos. Programar el maestro para crear un sistema complejo dirigido por el maestro (un PC o un PLC). Aquí se incluye la versión más básica donde el maestro es la herramienta windmill. 2. Mantenimiento: utilizar una herramienta como windmill para capturar la información que circula entre maestro y esclavos con el fin de detectar anomalías. La herramienta trabaja como un espía. 1.2 Primeros pasos con el CP2003 En este apartado el alumno aprenderá a establecer una comunicación básica con el multiconvertidor CP2003 a través de la RS485 mediante protocolo MODBUS para leer información. También aprenderá a trabajar con el windmill en modo maestro de una red modbus y con el windmill en modo espía. El alumno aprenderá qué primeros pasos debe seguir cuando en la vida profesional tiene que poner en marcha un nuevo aparato: ver el manual del equipo, establecer la red, utilizar un programa de prueba (en nuestro caso windmill), intentar los ejemplos más sencillos que da el fabricante en su manual, etc. El CP2003 es un multiconvertidor que mide tensión, intensidad, potencia, etc. Permite enviar dichas medidas a un ordenador o un centro de control a través de una RS485 mediante protocolo MODBUS. En el laboratorio el alumno puede utilizar en vez del CP2003, equipos similares de la casa SACI (MAR144, LDA) con un direccionamiento MODBUS muy similar. El CP2003 está montado sobre una caja con las siguientes conexiones y bornas: Conexión de alimentación. Conexiones para RS485: +, - y GND. Bornas 24V, RL0 y RL1. Son dos salidas por contacto que proviene de 2 relés que llevan internamente el multiconvertidor. Los contactos están colocados entre 24V y RL0, y entre 24V y RL1. A través del protocolo MODBUS se pueden activar y desactivar dichos contactos. Bornas A01 y A02. Son dos salidas analógicas en intensidad que se pueden regular a través del protocolo MODBUS. Normalmente están definidas para que con el valor máximo se obtenga 20 mA y con el valor mínimo 0 mA.

Transcript of 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas...

Page 1: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13

1 Práctica MODBUS: Bus Modbus

1.1 Objetivos

El objetivo de esta práctica y de las siguientes es la utilización y la programación de una red modbus. El alumno debe ser capaz de:

• Diferenciar los tres niveles fundamentales de la red modbus:

1. Nivel físico: RS485.

2. Nivel de protocolo. Trama básica del protocolo modbus: cabecera, funciones, direcciones, datos, CRC. Organización maestro/esclavo.

3. Nivel de aplicación. Tipos de funciones disponibles en el equipo que se conecta vía modbus. Datos que se pueden leer del equipo. Información que se puede enviar al equipo.

• Trabajar la red modbus en modo programación y en modo mantenimiento:

1. Programación: montar la red con un maestro y varios esclavos. Programar el maestro para crear un sistema complejo dirigido por el maestro (un PC o un PLC). Aquí se incluye la versión más básica donde el maestro es la herramienta windmill.

2. Mantenimiento: utilizar una herramienta como windmill para capturar la información que circula entre maestro y esclavos con el fin de detectar anomalías. La herramienta trabaja como un espía.

1.2 Primeros pasos con el CP2003

En este apartado el alumno aprenderá a establecer una comunicación básica con el multiconvertidor CP2003 a través de la RS485 mediante protocolo MODBUS para leer información. También aprenderá a trabajar con el windmill en modo maestro de una red modbus y con el windmill en modo espía. El alumno aprenderá qué primeros pasos debe seguir cuando en la vida profesional tiene que poner en marcha un nuevo aparato: ver el manual del equipo, establecer la red, utilizar un programa de prueba (en nuestro caso windmill), intentar los ejemplos más sencillos que da el fabricante en su manual, etc.

El CP2003 es un multiconvertidor que mide tensión, intensidad, potencia, etc. Permite enviar dichas medidas a un ordenador o un centro de control a través de una RS485 mediante protocolo MODBUS. En el laboratorio el alumno puede utilizar en vez del CP2003, equipos similares de la casa SACI (MAR144, LDA) con un direccionamiento MODBUS muy similar.

El CP2003 está montado sobre una caja con las siguientes conexiones y bornas:

• Conexión de alimentación.

• Conexiones para RS485: +, - y GND.

• Bornas 24V, RL0 y RL1. Son dos salidas por contacto que proviene de 2 relés que llevan internamente el multiconvertidor. Los contactos están colocados entre 24V y RL0, y entre 24V y RL1. A través del protocolo MODBUS se pueden activar y desactivar dichos contactos.

• Bornas A01 y A02. Son dos salidas analógicas en intensidad que se pueden regular a través del protocolo MODBUS. Normalmente están definidas para que con el valor máximo se obtenga 20 mA y con el valor mínimo 0 mA.

Page 2: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 2 de 13

Una de las fases de medida de tensión está conectada a través de un divisor de tensión a 220V. El divisor de tensión está formado por una resistencia fija de 100K y una resistencia variable de 100K, también. Además, hay una conexión externa lateral para conectar una carga al convertidor. Con el potenciómetro y la carga, se puede medir tensión, intensidad y potencia en una fase.

MODBUS es un protocolo que permite ver a un instrumento desde un sistema remoto como un banco de registros contiguos. Cada registro tiene una dirección dentro del rango 0x0000 a 0xFFFF, y tiene un tamaño de 16 bits. Su equivalente pensando en una CPU es un mapa de memoria de 16 bits en el bus de direcciones y 16 bits en el bus de datos. Según el tipo de instrumento no todos los registros están disponibles y cada uno almacena un determinado tipo de información (tensión, intensidad, etc.) o tiene una determinada función (activar/desactivar un relé, disparar una alarma, etc.). El protocolo MODBUS permite mediante tramas enviadas a través de la RS485 consultar o actualizar el valor de dichos registros. Cada trama corresponde a función o comando dentro del protocolo.

La tabla siguiente presenta las funciones o comandos del protocolo que se van a utilizar en esta práctica:

Tabla 1 Comandos básicos del protocolo MODBUS

Comando Función Modo de uso

0x04

ó

0x03

Lectura de registros

M->S: MA,0x04,AH,AL,NH,NL,CRCL,CRCH

S->M: MA,0x04,NR,R0H,R0L,R1H,R1L,..,CRCL,CRCH

0x06 Escritura de un registro

M->S: MA,0x06,AH,AL,RH,RL,CRCL,CRCH

S->M: MA,0x06,AH,AL,RH,RL,CRCL,CRCH

0x10 Escritura de múltiples registros

M->S: MA,0x10,AH,AL,NH,NL,NB,R0H,R0L,..,CRCL,CRCH

S->M: MA,0x10,AH,AL,NH,NL,CRCL,CRCH

M->S=Dirección maestro-esclavo

S->M=Dirección esclavo-maestro

MA=Dirección MODBUS del dispositivo

AH,AL=Parte alta y baja de la dirección de un registro

NR=Número de bytes transmitidos

NH,NL=Número de registros ocupando 2 bytes

NB=Número de bytes equivalente al número de registros (2*número de registros)

RxH,RxL o RH,RL= Parte alta y baja de un valor leído o a escribir en un registro

En la página 3 del manual del equipo CP2003 (ver web del laboratorio) se describe el formato de las tramas que acepta el equipo, que se corresponden con la tabla anterior. A partir de la página 13 del manual hay ejemplos de las tramas que acepta y de las tramas de respuesta.

Para poner en marcha la comunicación vía protocolo MODBUS entre el ordenador, que actúa como maestro, y el CP2003, que actúa como esclavo, el primer paso es comprobar que el equipo funciona. Este paso se basa en utilizar los ejemplos que lleva el manual del CP2003. En la práctica profesional, cuando se recibe un nuevo equipo, el primer paso es

Page 3: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 3 de 13

intentar una comunicación sencilla siguiendo los ejemplos que da el fabricante. En este caso, siguiendo la página 13 del manual, utilizaremos el comando 04 para leer el número de serie del aparato que se encuentra a partir de la dirección 04B0 y que ocupa 5 registros (10 bytes). Se supone que el equipo tiene la dirección MODBUS 4C (76 en decimal).

Pasos a seguir:

1. Conecte el CP2003 a la red RS485, si no está ya montado.

2. Conecte el adaptado RS232/RS485 por un lado a la red RS485 y por otro al COM1 del ordenador.

3. Arranque el programa Windmill con la configuración COM1, 9600, 8 bits, sin paridad y un bit de stop.

4. Envíe al CP2003 el siguiente comando escrito en hexadecimal para preguntarle su identidad:

0x4C,0x04,0x04,0xB0,0x00,0x05,CRC.

CRC es un número de 16 bits que es calculado como el CRC del resto de la trama. Para incluir el CRC pulse CRC en el menú superior del Windmill. Windmill lo calcula automáticamente cada vez que se envía la trama. Al comando enviado desde el PC, el CP2003 deberá responder tal como muestra la siguiente figura:

Nota importante 1: Si varios grupos del laboratorio están conectados al mismo instrumento, sólo un grupo podrá hablar en cada mom ento con el instrumento. En la ventana de respuesta del windmill del resto de grup os aparecerá la conversación entre el grupo que está hablando (maestro) con el C P2003 (esclavo). Los grupos que sólo escuchan están actuando como espías. El modo e spía es muy útil en la práctica para detectar problemas en una red modbus o de otro tipo. Por ejemplo: en un windmill en modo espía se puede ver el verdadero CR C que envía el windmill que está trabajando en modo maestro.

Page 4: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 4 de 13

Nota importante 2: Si no responde el CP2003 puede s er debido a que la dirección MODBUS utilizada no es la correcta. El CP2003 tiene una dirección MODBUS a la que siempre responde: 0xC7 (199). Esta es una dirección muy útil para mantenimiento pero que no debe utilizarse nunca en operación. Env íe la trama cambiando 0x4C por 0xC7. Para saber cuál es la dirección del dispositi vo en operación lea el registro situado en la dirección 0x04B5 ( 0xC7,0x04,0x04,0xB5,0x00,0x01,CRC). Con esta nueva dirección intente nuevamente leer 5 registros a partir de la dirección 0x04B0.

En la página 13 del manual se describe lo que envía el CP2003 (primer ejemplo). A lo largo del manual del CP2003 aparecen una serie de tablas donde se indica la información que se puede encontrar en cada dirección o la función que se puede ejecutar. Por desgracia, las direcciones indicadas no son absolutas, sino relativas a una dirección base. En el caso del CP2003 la dirección base es 1000 (si no se modifica). Por ejemplo: en la tabla del apartado 1.2.6 se dice que el número de serie se encuentra a partir del registro situado en la dirección 200. La verdadera dirección no es 200 sino 1200 (0x4B0), como ya hemos visto en el ejemplo anterior.

Siguiendo las páginas 13, 11 y 3 del manual, las breves indicaciones dadas en este apartado y las vistas en clase, explique la trama enviada al CP2003 en el ejemplo anterior y la trama de respuesta del CP2003. Para determinar el verdadero valor del CRC mire lo capturado en el windmill de otro grupo trabajando en modo espía.

Pregunta 1: Explique la trama enviada y la respuesta. En este caso y en los siguientes no es necesario indicar el valor real del CRC enviado, basta con indicar CRC al final de la trama).

Siguiendo el ejemplo anterior lea el tipo de aparato (ver tabla 1.2.6 del manual del CP2003). El número de registros a leer es 3. Póngase de acuerdo con el resto de grupos para evitar demasiadas colisiones a la hora de acceder al CP2003, si está compartido.

Pregunta 2: Explique la trama enviada y la respuesta.

1.3 Lectura de datos del CP2003

En este apartado el alumno comprenderá la problemática de trabajar con información de varios tipos (byte, cadena de caracteres, palabra o word, datos en coma flotante) distribuida sobre un esquema rígido de registros de 16 bits.

El CP2003 maneja entre otros los siguientes tipos de datos:

• Byte: ocupa los 8 bits bajos de un registro de 16 bits. La parte alta está a 0.

• Word o palabra: ocupa un registro completo de 16 bits.

• IEEE754 de 32 bits (IEEE32 en adelante): es el formato de coma flotante simple (32 bits) y ocupa 2 registros. Cuando se transmite, primero se envía el registro bajo y después el registro alto. En el anexo 2 (página 17 del manual del CP2003) se explica cómo pasar de coma flotante en binario a decimal. Ejemplo: 0x40 0xA0 0x00 0x00 significa 5. El ejemplo anterior cuando se transmite aparece en la trama como 0x00 0x00 0x40 0xA0.

• String o cadena de caracteres: Es una cadena de caracteres que utiliza registros contiguos, 1 registro por cada 2 caracteres. Es el caso del ejemplo anterior.

1.3.1 Lectura de datos de tipo byte

Page 5: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 5 de 13

Siguiendo la tabla del apartado 1.2.6, leer la dirección modbus del equipo. Para ello enviar al CP2003 la trama:

0x4C,0x04,0x04,0xB5,0x00,0x01,CRC.

El equipo responderá con la dirección del equipo.

Pregunta 3: Explique brevemente la trama enviada y la respuesta.

1.3.2 Lectura de datos de tipo IEEE

Siguiendo la tabla del apartado 1.2.2 del manual del CP2003, leer la escala de intensidad del aparato. Recuerde que ocupa 2 registros. Comprobar que coincide que lo indicado en la tabla de características del aparato (5A). Utilice el anexo 2 del manual del CP2003.

Pregunta 4: Explique la trama enviada y la respuesta. Calcule el valor en decimal.

De igual forma preguntar al CP2003 por la escala de tensión.

1.4 Escritura de datos en el CP2003

1.4.1 Manejo de relés para activar pilotos

Mediante la función de escritura (0x06 o 0x10) se puede activar los 2 relés de salida del CP2003 (RL0 y RL1).

Para probar el funcionamiento de los relés conecte las salidas RL0 y RL1 según el siguiente esquema a la placa de pilotos (“pupitre de mando”, ver figura). Como fuente de alimentación utilice la fuente de alimentación de los bastidores de los autómatas (bornas rojas rotuladas con +24V y bornas negras – GND, ver figura). Para el resto de convertidores la conexión es la misma.

24V

HV1 HV2

RL0 RL1

0V

Page 6: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 6 de 13

Pupitre de control:

Bastidor con PLC:

24V

0 V

Fuente de alimentación

PLC

Entradas/salidas

Pulsadores con contacto NO

Conmutador de 3 posiciones

Pulsador con contacto NC

Piloto de señalización

Pulsador “de seta” de Paro de Emergencia

SV1 SV2 SR

HV1 HV2 HR

SC

Page 7: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 7 de 13

Según el manual del CP2003 para trabajar con los relés primero hay que configurarlos en modo SW y después activarlos o desactivarlos (página 11 del manual). Siga los siguientes

pasos:

1. Envíe la trama siguiente 0x4C,0x06,0x04,0xB9,0x00,0x01,CRC para configurar los relés en modo SW (Tabla del apartado 1.2.7).

2. Envíe 0x4C,0x06,0x04,0xBA,0x00,0x01,CRC para activar el RL0.

3. Envíe 0x4C,0x06,0x04,0xBA,0x00,0x00,CRC para desactivar el RL0.

Realice la misma maniobra de activar y desactivar con el relé RL1.

Pregunta 5: Indique las tramas enviadas y su respuesta para el caso activar y desactivar el relé RL1.

1.4.2 Manejo de relés para controlar un motor

En este apartado el alumno comprenderá la importancia de la seguridad y cómo solucionarla insitu para evitar males mayores. Por desgracia, las comunicaciones tienden a ocultar la problemática de los sistemas reales. Situaciones que no ocurren cuando se dan órdenes a un equipo en local pueden ocurrir cuando se dan en remoto, es decir, a través de un sistema de comunicaciones. Ejemplo: una situación evidente como es no dar orden a un motor para que gire en dos sentidos simultáneamente, puede presentarse a través de órdenes enviadas vía comunicación. Esto hace necesario la implantación de circuitos de protección en el sistema a controlar, como son los enclavamientos.

Monte el siguiente circuito para controlar el giro de los motores mediante RL0 y RL1.

Circuito de control Circuito de potencia

Para ello utilice la placa “pupitre de control” anterior y la placa siguiente “simulador de planta”.

24V

KA1

A2

A1

HV1 HV2

KA2

31

32

RL0

KA2

A2

A1

KA1

31

32

RL1

14

12

11

24

22

21

KA1

M

14

12

11

24

22

21

KA2

24V

Page 8: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 8 de 13

Simulador de planta:

El esquema para conexión de los relés es el siguiente:

Un relé es un elemento electromecánico de control formado por contactos (11 con 12 y 14, 21 con 22, 24, etc.) cuya apertura y cierra se controla a través de una bobina (A1, A2). Cuando no pasa corriente por la bobina el relé está en reposo y se permite el paso de la corriente a través de 11-12 (21-22 y 31-32), tal como indica la figura. Cuando pasa corriente suficiente, la bobina se activa y los contactos basculan hacia la posición contraria. Ahora se permite el paso de la corriente a través de 11-14 (21-24 y 31-34).

Active RL0 y RL1 para arrancar el motor en giro a derechas, giro a izquierdas y pararlo.

Llegado a este punto, avise al profesor para mostrar el correcto funcionamiento.

Pregunta 6: ¿Por qué no ocurre nada catastrófico si simultáneamente se envía orden de giro a derechas y giro a izquierdas al motor desde el Windmill?

1.4.3 Manejo de salidas analógicas

En este apartado el alumno aprenderá a manejar una salida analógica en intensidad desde el ordenador y en formato coma flotante.

Siga los siguientes pasos:

1. Conecte un multímetro con la escala en 20 mA o superior a la salida A01 del multiconvertidor CP2003.

2. Configure la salida A01 como manual escribiendo en la posición de memoria CONF_MANUAL.

Sensor de proximidad capacitivo

Final de carrera

Motor

Relé

Sensor de proximidad inductivo

KA1 KA2

SF1 SF2

M

BI

Page 9: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 9 de 13

3. Envíe la trama de ejemplo dada en la página 15 del manual del CP2003 para escribir en la salida A01 (posición AN_OVER0). Calcule qué valor se envía (está en formato IEEE32). Compruebe el valor que mide el multímetro con el valor enviado.

4. Vuelva a realizar el paso 3 para conseguir que el multímetro marque 20 mA y -20 mA. Si el equipo es de 0-5 mA, en vez de 20 mA utilice 5mA.

Pregunta 7: Indique la trama enviada para conseguir -20 mA (o en su caso -5 mA)

1.5 Manejo de 2 o más equipos desde la red MODBUS

En este apartado el alumno trabajará con dos o más esclavos sobre una única red modbus. El objetivo es entender la importancia de la dirección física: cada equipo en la red modbus debe tener una dirección diferente.

Siga los siguientes pasos:

1. Póngase de acuerdo con otros grupos para asignar a cada equipo una dirección diferente. Por ejemplo: CP2003 del grupo 1 tiene la dirección 1, CP2003 del grupo 2 tiene la dirección 2.

2. Cambie la dirección de su equipo por la dirección asignada. Puede utilizar la dirección actual del equipo o la dirección 199.

3. Conecte la red RS485 entre varios grupos: por un lado estarán los multiconvertidores conectados y por otro lado los ordenadores personales. Uno de los ordenadores actuará como maestro y el resto como espía.

4. Compruebe que se pueden activar y desactivar los relés de cada uno de los multiconvertidores. Si no se ha desmontado la parte de motores, se puede comprobar el control de la red de motores.

Pregunta 8: Dibujo de la red RS485 con los equipos conectados y su dirección.

1.6 Programación de un red MODBUS

En este apartado el alumno aprenderá los rudimentos básicos para montar una aplicación de control sobre una red MODBUS.

Una vez cubierta la fase de familiarización de la red MODBUS y con los equipos conectados a ella, el siguiente paso es dotarse de las herramientas necesarias para poder montar una aplicación. Dos tipos de herramientas son necesarias:

1. Preparar una librería que encapsule los detalles de la red MODBUS y las operaciones repetitivas. Esta librería debería estar formada por:

• Utilidades para preparar la trama como el cálculo del CRC, convertir un número real a formato IEEE sobre MODBUS y viceversa, etc.

• Funciones para ensamblar y desensamblar la trama.

• Funciones para transmitir y recibir la trama.

Page 10: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 10 de 13

2. Programas de prueba más sofisticados que Windmill. Windmill es muy útil pero está muy limitado: para cualquier comunicación hay que bajar al nivel byte. Si se quiere probar que los relés de los multiconvertidores funcionan correctamente vendría muy bien una aplicación del tipo:

> 23 RL0 1

> 23 OK

> 23 RL0 0

> 23 OK

El objetivo de los siguientes apartados es crear un librería que pueda ser utilizada en prácticas posteriores, y crear un programa de prueba para manejo cómodo de los relés.

1.6.1 Cálculo del CRC

El objetivo es construir una función para el cálculo del CRC.

Siguiendo las notas dadas al final del manual del CP2003 o en la propia documentación para implantación del MODBUS sobre una línea serie, programe una función para calcular el CRC con el polinomio del MODBUS.

El prototipo de la función será:

// Obtiene el CRC de 16 bits según MODBUS de una ca dena de bytes

void MODBUSCRC(int l, // Tamaño de la cadena

unsigned char *pb, // Dirección de la cadena de bytes

unsigned char *pCRC // Dirección de una cadena d e 2

// bytes donde se deposita el CRC

// calculado

);

Para probar la función puede utilizar las propias tramas transmitidas o la que aparece como respuesta en el apartado 1.2. Como programa de prueba puede utilizar el siguiente: int main(){

unsigned char mc[5]={0xc7,0x04,0x02,0x53,0x41}; // CRC es CDE1

unsigned char mCRC[2];

MODBUSCRC(5,mc,mCRC);

printf("%02x%02x",mCRC[0],mCRC[1]);

return 0;

}

Para programar utilice el entorno MinGW de la práctica 3 de “Fundamentos de comunicaciones industriales”:

http://www.iit.upcomillas.es/carlosrg/Docencia/LC/LC.html

Para programar el CRC resultan útiles los siguientes operadores y recomendaciones de C:

• >> permite desplazar hacia la derecha los bits de un número n posiciones (a=b>>n; )

• << para desplazar hacia la izquierda.

• | permite realizar la función OR de dos números bit a bit (a=b|c );

Page 11: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 11 de 13

• & permite realizar la función AND de dos números bit a bit (a=b&c );

• Una variable de tipo int ocupa 32 bits, lo mismo que un float (IEEE32).

• Para obtener el byte más alto de un número b de 32 bits: a=b>>24 . De la misma manera se procedería con el resto de bytes.

• Para asignar el byte más alto de un número a un determinado valor respetando el resto habría que hacer: a=(a&(0x00ffffffL))|(b<<24).

Pregunta 9: Comprobar el cálculo del CRC con una trama de respuesta del CP2003.

1.6.2 Rutina para transmitir y recibir una trama

Programe una función para transmitir una trama y otra para recibir basándose en APIRS232. Los prototipos de las funciones serán:

// Envía una trama

int MODBUSEnvia( HANDLE hPort,

int l, // Tamaño de la trama

unsigned char *pb // Trama a enviar con CRC incl uido

);

// Devuelve 0 si ha habido error en la transmisión, 1 si no ha habido

// Recibe una trama

int MODBUSRecibe( HANDLE hPort,

int lmax, // Tamaño máximo admisible de la tram a

unsigned char *pb // Trama recibida

);

// Devuelve 0 si ha habido error en la recepción, > =1 indica la longitud de la trama

Para probar la función se utilizará el siguiente programa de prueba.

int main(){

unsigned char mc[8]={0xc7,0x04,0x04,0xb0,0x00,0x01 ,0x00,0x00};

unsigned char mcRec[100];

int l;

hPort=OpenSerialPort("COM1",CBR_9600,8,NOPARITY,TW OSTOPBITS,10);

if (hPort==INVALID_HANDLE_VALUE) {

printf("Error abriendo puerto com1");

return 1;

}

MODBUSCRC(6,mc,mc+6);

printf("\nTrama enviada: ");

MODBUSImprime(8,mc);

MODBUSEnvia(hPort,8,mc);

Page 12: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 12 de 13

l=MODBUSRecibe(hPort,100,mcRec);

printf("\nTrama recibida: ");

MODBUSImprime(l,mcRec);

CloseSerialPort(hPort);

return 0;

}

La función MODBUSImprime tiene el siguiente código: // Imprime la trama por pantalla

void MODBUSImprime( int l, unsigned char *pb){

int i;

for(i=0;i<l;i++){

printf("%02x",pb[i]);

}

}

Pregunta 10: Entregar el código para transmitir y recibir. ([email protected])

1.6.3 Programa de prueba para relés

A partir de las rutinas anteriores, preparar un programa de prueba para relés que permita activar y desactivar cómodamente los reles de cada multiconvertidor conectado a la red MODBUS.

La interfaz hombre-máquina de dicho programa será de este estilo en una versión simple:

> 23 RL0 1

> 23 RL0 0

> 2 RL0 1

> 2 RL0 0

El primer caso está dirigido al multiconvertidor con la posición 23 y el segundo al multiconvertidor con la posición 2.

Llegado a este punto, avise al profesor para mostrar el correcto funcionamiento.

Pregunta 11: Entregar el código para probar los relés ([email protected])

1.6.4 Programa de prueba para relés con chequeo

Mejorar el programa anterior para chequear que la trama de vuelta es correcta. El IHM (interfaz hombre-máquina) sería ahora:

> 23 RL0 1

> 23 OK

> 23 RL0 0

> 23 OK

Page 13: 1 Práctica MODBUS: Bus Modbus - IIT | Instituto de ... · Comunicaciones Industriales Avanzadas J.A. Rodríguez Mondejar // J. Matanza Domingo 1 de 13 1 Práctica MODBUS: Bus Modbus

Comunicaciones Industriales Avanzadas

J.A. Rodríguez Mondejar // J. Matanza Domingo 13 de 13

> 2 RL0 1

> 2 OK

> 2 RL0 0

> 2 OK

Donde OK indica que la respuesta dada por el multiconvertidor es correcta.

Pregunta 12: Entregar el código para probar los relés ([email protected])

1.6.5 Opcional Programa de prueba para las salidas analógicas

Ampliar el programa anterior para probar las salidas analógicas:

> 23 A01 50

> 23 OK

> 23 A02 75

> 23 OK

> 2 RL0 1

> 2 OK

> 2 A01 100

> 2 OK

Pregunta 13: Opcional. Entregar el código ampliado ([email protected])