Capítulo II

68
CAPÍTULO II MARCO CONCEPTUAL 2.1 INTRODUCCIÓN A MODBUS Existen variaciones del protocolo ModBus utilizados en la industria dependiendo de la disposición de los equipos más que de economía, por ejemplo, ModBus Plus (no es un estándar abierto y es exclusivo de Modicon) es una ampliación de ModBus usada en control industrial como un sistema de red de área local [4], dada la naturaleza de la red precisa un coprocesador dedicado para el control de la misma y ModBus II es menos usada debido a los requerimientos del cableado y otras dificultades [5] y hace referencia a MAP (Manufacturing Automation Protocol) que es más bien una pila de protocolos basada en el modelo de referencia de interconexión de sistemas abiertos OSI de ISO [6]. Este trabajo de grado se enfocará en el protocolo estándar y aunque se explicarán las versiones seriales también existe otra forma de implementar ModBus como el TCP/IP (ModBus/TCP) a través de un cable UTP (Ethernet). 2.2 MODBUS ESTÁNDAR El protocolo fue creado por Modicon para sus controladores programables en 1979 sin embargo tomó auge en la industria y ahora muchos dispositivos de diferentes fabricantes, como algunos controladores lógicos

description

Teoria para comunicacion Modbus y labView

Transcript of Capítulo II

CAPÍTULO II

MARCO CONCEPTUAL2.1 INTRODUCCIÓN A MODBUS

Existen variaciones del protocolo ModBus utilizados en la industria dependiendo

de la disposición de los equipos más que de economía, por ejemplo, ModBus Plus

(no es un estándar abierto y es exclusivo de Modicon) es una ampliación de

ModBus usada en control industrial como un sistema de red de área local [4], dada

la naturaleza de la red precisa un coprocesador dedicado para el control de la

misma y ModBus II es menos usada debido a los requerimientos del cableado y

otras dificultades [5] y hace referencia a MAP (Manufacturing Automation

Protocol) que es más bien una pila de protocolos basada en el modelo de referencia

de interconexión de sistemas abiertos OSI de ISO [6]. Este trabajo de grado

se enfocará en el protocolo estándar y aunque se explicarán las versiones seriales

también existe otra forma de implementar ModBus como el TCP/IP

(ModBus/TCP) a través de un cable UTP (Ethernet). 2.2 MODBUS

ESTÁNDAR El protocolo fue creado por Modicon para sus controladores

programables en 1979 sin embargo tomó auge en la industria y ahora muchos

dispositivos de diferentes fabricantes, como algunos controladores lógicos

programables de Siemens, disponen de puertos para este tipo de protocolo.

ModBus es un protocolo de comunicación ubicado en el nivel 7 (aplicación) del

modelo OSI, que permite la comunicación maestro/esclavo o cliente/servidor entre

dispositivos interconectados mediante diferentes tipos de buses de redes. Aunque

cualquier dispositivo de la red puede ser el maestro, este tipo de protocolo sólo

permite un maestro y uno o varios esclavos en la misma red. El protocolo define

una estructura de mensaje que opera basado en un modo “petición/respuesta”

independiente al control de acceso al esclavo o servidor en la capa 2. Todos los

dispositivos de la red reciben la orden o petición del cliente pero sólo un servidor es

quien ejecuta la petición, a menos que el mensaje sea transmitido a todos los

servidores y todos ejecuten la orden como es el caso de transmisiones tipo

Broadcast (este modo de difusión se aplica para la Dirección = 0 exclusivamente).

Este modelo cliente/servidor está fundamentado en cuatro tipos de mensajes:

Petición: es el mensaje enviado a la red por el cliente para iniciar la comunicación

Confirmación: es el mensaje de respuesta que recibe el cliente

Indicación: es el mensaje de petición recibida por el servidor

Respuesta: es el mensaje de respuesta enviado por el servidor

Este servicio de mensajería de modelo cliente/servidor es utilizado para

intercambiar información en tiempo real entre dos dispositivos de campo, uno de campo

y un controlador lógico, o un controlador y una HMI/SCADA como ejemplos. La figura

2.1 muestra un esquema del modelo de mensajería ModBus: [5]

Figura 2.1 Esquema de mensajería ModBus cliente/servidor

Fuente: Practical Industrial data Communications

En un escenario sin errores de comunicación el intercambio de información

entre cliente-servidor se ilustra como sigue. El cliente inicia una petición, el protocolo

de mensajería ModBus genera una unidad de datos de protocolo (PDU o Protocol Data

Unit según sus siglas en ingles) que consiste en peticiones de códigos de función y

datos. En la capa 2 del modelo OSI, esta PDU es convertida en una unidad de datos de

aplicación o ADU por sus siglas en ingles (Application Data Unit) añadiendo dos

campos, la dirección del dispositivo y una suma de comprobación para los propósitos

de detección de error. De manera que la trama genérica sería como se muestra en la

figura 2.2.

Figura 2.2. Trama de ModBus.

Fuente: Practical Industrial data Communications

2.3 MODOS DE TRANSMISIÓN SERIALES

Los modos de transmisión seriales son ASCII (American Standard Coda for

Information Interchange) y RTU (Remote Terminal Unit). La selección del modo de

transmisión tiene que ver únicamente con la forma en cómo se empaquetan y

decodifican los bits en el campo del mensaje y también define la capa física. Estas

Código de Función

PDU

ADU

Confirmación

Respuesta

IndicacPeticiMODBUS

Cliente

MODBUS

Servidor

Campo de dirección Datos Error

características de la red también están delimitadas por los dispositivos que la

componen, en el caso de este trabajo de grado los controladores utilizan la versión RTU

del protocolo para empaquetar los datos y por ese motivo sólo se explicará este modo

de transmisión.

2.3.1 MODO RTU

Cuando los controladores están configurados para comunicarse en una red

usando el modo RTU, cada byte de 8 bits en un mensaje contiene dos caracteres

hexadecimales de 4 bits cada uno. La principal ventaja de este modo es que su gran

densidad de caracteres permite un mayor rendimiento comparado con el modo ASCII a

la misma velocidad de transmisión. Cada mensaje debe ser transmitido en un flujo

continuo.

El formato para cada byte en el modo RTU es:

Sistema de codificación: binarios 8 bits, hexadecimal 0-9 y A-F, dos

dígitos hexadecimales contenido en cada campo de 8 bits del mensaje.

Bits por bytes: 1 bits de arranque, 8 bits de datos, 1 bit para paridad par

o impar, ningún bit para no paridad, 1 bit de parada si se usa paridad par

o impar y 2 bits de parada para no paridad

En modo RTU la secuencia de envío de los bytes o caracteres es desde el

menos significativo hasta el más significativo, cada caracter tiene 11 bits

en total, como se ilustra en la figura 2.3.

Con 1 bit de paridad

inicio 1 2 3 4 5 6 7 8 Paridad parada

Sin paridad

inicio 1 2 3 4 5 6 7 8 parada parada

Figura 2.3. Secuencia de bytes con o sin paridad

Fuente: Modicon ModBus Protocol Reference/ Guide.

Campo de comprobación de error: comprobación por redundancia

cíclica (CRC por sus siglas en ingles Check Redundancy Error)

2.3.2 CARACTERÍSTICAS DE LA TRAMA EN MODO RTU

En modo RTU, las tramas de mensajes comienzan con un intervalo silencioso

de al menos 3.5 tiempos de caracter; en el anexo A.1 se hablará de como se determina el

tiempo de caracter para 9600 baudios. Esto es más fácilmente implementado como un

múltiplo de tiempo de caracter de la velocidad de transmisión que esté siendo usada en

la red. El primer campo a transmitir es entonces la dirección del dispositivo.

Los caracteres a transmitir permitidos para todos los campos son hexadecimales

de 0-9 y A-F. Los dispositivos conectados en red monitorean el bus de red

continuamente incluso durante los intervalos “silenciosos”. Cuando el primer campo (el

campo de dirección) es recibido, cada dispositivo lo decodifica para determinar si es el

dispositivo direccionado.

Siguiendo el último caracter transmitido, un intervalo de al menos 3,5 tiempos

de caracter señala el fin del mensaje. Un nuevo mensaje puede comenzar después de

este intervalo.

La trama de mensaje completa debe ser transmitida como un flujo continuo. Si

el intervalo de silencio de más de 1,5 tiempos de caracter tiene lugar antes de completar

la trama, el dispositivo receptor desecha el mensaje incompleto y asume que el

siguiente byte será el campo de dirección de un nuevo mensaje.

Así mismo si un nuevo mensaje inicia antes de 3,5 tiempos de caracter luego de

un mensaje previo, el dispositivo receptor considerará este una continuación del

mensaje previo, esto dará lugar a un error, como el valor en el campo final CRC que no

será válido por el mensaje combinado. Una trama de mensaje típica es como muestra la

figura 2.4.

INICIO DIRECCIÓN FUNCIÓN DATOS CRC FINAL

T1-T2-T3-T4 8 BITS 8 BITS nX8 BITS 16 BITS T1-T2-T3-T4

Figura 2.4. Trama de mensaje típica en modo RTU

Fuente: Modicon ModBus Protocol Reference Guide.

2.3.3 DEFINICIONES DE LOS CAMPOS DE LA TRAMA RTU

2.3.3.1 Campo de dirección: el campo de dirección de una trama de mensajes

ModBus contiene 8 bits. Las direcciones para dispositivos esclavos validas están en el

rango decimal de 1 a 32. A cada esclavo se le asigna una dirección única entre 1 y 32 e

irrepetible, repetir la dirección del esclavo podría ocasionar colisión en el bus o

conflictos en la red. El maestro direcciona a un dispositivo esclavo colocando la

dirección de este en el campo de dirección de la trama de mensajes ModBus. Cuando el

esclavo envía su respuesta, coloca su dirección en el campo de dirección de la respuesta

para permitirle al maestro saber que esclavo está respondiendo.

2.3.3.2 Campo de Función: cuando el maestro le envía una orden al esclavo

este campo es donde se guarda la acción a realizar. Como por ejemplo leer el estado

ON/OFF de un grupo de bobinas o entradas, leer los datos contenidos de un grupo de

registros, etc. Los códigos de función aceptados en ModBus estándar dependen del

dispositivo que esté conectado al bus o a la red, se ampliará más sobre esto en la sección

2.7.10

El campo del código de función de un a trama contiene 8 bits. Los códigos

validos están en el rango decimal de 1 a 255. Cuando el esclavo responde usa el campo

de código de función en el mensaje de respuesta para indicar si es una respuesta normal

o si ha ocurrido una excepción. Para una respuesta normal, el esclavo debe hacer eco del

código de función recibida en la petición. Por otro lado, para una respuesta de excepción

el esclavo proporciona un código que es equivalente al código de función original con

su bit más significativo puesto al 1 lógico.

Por ejemplo, un mensaje del maestro al esclavo para leer un grupo de registro de

salida (Holding Register) tendría el siguiente código de función en el modo de

transmisión RTU:

0000 0011 (hexadecimal 03)

Si el dispositivo esclavo puede ejecutar la acción solicitada, el código de función

en el mensaje de respuesta es igual al enviado en la petición. Si ocurre una excepción el

contenido del campo de función será:

1000 0011 (hexadecimal 83)

Además de la modificación anterior del código de función para una respuesta de

excepción. El esclavo coloca un código en el campo de datos del mensaje de respuesta,

el cual le informa al maestro que tipo de error se produjo o la razón de la excepción. El

programa de aplicación del dispositivo maestro tiene la responsabilidad de manejar la

respuesta de excepción. Los procesos típicos que adelanta un maestro después de

recibir un código de excepción son: enviar reiteradas veces un mismo mensaje, enviar

mensajes de diagnostico al esclavo o notificar a los operadores.

De igual manera que el tipo de función la aplicación del maestro define que

acción tomar en caso de excepción esto se ampliará mejor en la sección 2.7.11

2.3.3.3 Campo de datos: el campo de datos se construye usando dos grupos de

dos dígitos hexadecimales, en el rango de 00 a FF hexadecimal. Esto se puede hacer a

partir de un caracter en modo de transmisión RTU. El campo de datos de un mensaje

enviado del maestro al dispositivo esclavo contiene información adicional que debe

usar para ejecutar la acción definida por el código de función. Este campo puede incluir

ítems como son direcciones de registros y de entradas discretas. Por ejemplo si la

petición de un maestro al esclavo es leer un grupo de datos de registro de retención

(código de función 03), el campo de datos especifica el registro de inicio y cuantos

registros se deben leer a partir de este. Si no hay excepciones, el campo de datos en el

mensaje solicitado contiene el dato requerido. Si ocurre una excepción, el campo de

datos contiene un código de excepción que la aplicación del maestro puede usar para

determinar la próxima acción a realizar.

2.3.3.4 Campo de chequeo de error (CRC): en el modo RTU el chequeo de

error contiene un valor de 16 bits en dos bytes de 8 bits cada uno. Este valor de

chequeo de error es el resultado del cálculo por comprobación de redundancia cíclica

sobre el contenido del mensaje. El campo CRC es añadido al mensaje como el último

campo del mensaje, primero se añade el byte de orden bajo y luego se añade el byte de

orden alto. De igual forma el campo de chequeo de error verifica el contenido del

mensaje y es aplicado sin importar el método de paridad usado para los caracteres del

mensaje. El campo es calculado por el dispositivo transmisor el cual añade el CRC al

mensaje. El dispositivo receptor calcula nuevamente un valor CRC durante la recepción

del mensaje y lo compara con el valor de CRC que es recibido, si los dos valores no

son iguales la respuesta será un excepción.

El campo CRC es inicialmente cargado con todos sus bits en 1, un proceso inicia

la aplicación sucesiva de los bytes del mensaje al contenido actual del campo CRC,

únicamente los 8 bits de cada caracter son usados para generar el CRC.

Durante la generación del CRC, se efectúa una operación booleana OR

exclusivo (XOR) a cada caracter de 8 bits con el contenido del registro. Entonces al

resultado se le aplica un desplazamiento de bits en dirección del bit menos significativo

(LSB), rellenando la posición del bit más significativo (MSB) con un cero. El LSB es

extraído y examinado, si el LSB fuese 1 se realiza un XOR entre el registro y el valor

preestablecido A001 hex que corresponde al polinomio generador CRC de 16 bits

“inverso” que es el que se aplica para determinar CRC ModBus; en el anexo A.2 se

explicará cómo se determina el valor A001 y en el Anexo A.3 se ejemplificará el

proceso de cálculo del campo CRC.

Si el LSB fuese 0, no se ejecuta el XOR. Este proceso es repetido hasta cumplir

con 8 desplazamientos. Después del 8vo desplazamiento el próximo byte es operado

con la XOR con el valor actual del registro y el proceso de repite con 8

desplazamientos mas, como se ha descrito más arriba y así con todos los bytes del

mensaje. El contenido final del registro, después que todos los bytes del mensaje han

sido procesados es el valor de CRC [7].

2.4 ESTRUCTURA DE LA RED

Como se había descrito en la sección 2.2 el protocolo ModBus puede

implementarse mediante un bus, el cual es multipunto sobre una misma línea de

comunicación según se ejemplifica en la figura 2.5, u otra red aún más simple como es

punto a punto como se muestra en la figura 2.6. Debido a los equipos que se disponen

en el Laboratorio de Automatización II se utilizará la topología Bus y punto a punto

para realizar las experiencias prácticas con este protocolo.

Figura 2.5 Estructura de la red multipunto mediante Bus

Fuente: propia

Figura 2.6 Estructura de red punto a punto

Fuente: propia

ModBus estándar es un protocolo de comunicación tipo serial asíncrono que

utiliza como medio físico o capa 1 del modelo OSI:

Fibra o Alambre o Hilo Conductor

Radio

En este trabajo de grado se utilizará como medio físico el hilo conductor en

cable que cumpla con los estándares EIA/TIA 232-E y EIA/TIA-485A. Esto debido a

los puertos de comunicación que tienen los equipos que componen la red ModBus de

este trabajo de grado, La PC tiene un puerto RS232 con conector DB9 macho y los

PLC’s tienen puertos RS485 con conectores DB9 hembra que cumple con el estándar de

la norma europea EN50170. Aunque ambos conectores son DB9 existe una

incompatibilidad de estándares de comunicación que se debe resolver al implementar la

estructura de la red.

2.5 ESTÁNDARES DE COMUNICACIÓN

En la red ModBus se pueden encontrar diferentes estándares de comunicación,

estos proveen la interfaz de entrada/salida que usan los dispositivos que interoperan en

la red, a continuación se explican los que se usarán en este trabajo de grado:

2.5.1 ESTÁNDAR EIA/TIA RS232-E

El estándar RS-232 especifica el método de conexión de dos dispositivos

conocidos uno como DTE (Data Terminal Equipment – ejemplo una PC) o Equipo

Terminal de Datos y otro DCE (Data Circuit-terminating Equipment – ejemplo un

Modem) o Equipo de Circuito terminador de Datos, lo que es conocido como una

topología punto a punto. No especifica un protocolo sino más bien características

eléctricas (niveles de las señales), lógicas (formato de los datos) y mecánicas

(conectores) que debe cumplir la capa física para establecer la comunicación. Soporta

circuitos no balanceados a velocidades de señal de hasta 64 Kbps.

Se asemeja estrechamente a la especificación V.24 de la ITU antes conocida

como CCITT. En 1969 se realizó la primera revisión del estándar y se definió con la

letra “C” donde sólo se especificaba un conector de 25 contactos, hembra para el DCE y

macho para el DTE; en 1991 se realizó la ultima revisión del estándar que dio lugar a la

letra “E” como sufijo del nombre y fue en esta revisión donde se especifica el uso de los

conocidos conectores DB25. Un conector de 25 contactos es necesario para acomodar

todas las señales de la RS232, pero en la mayoría de las aplicaciones es suficiente con

un subconjunto de ellas, que puede acomodarse en un conector más pequeño, como el

DB9.

El conector DB9 fue implementado por IBM cuando necesitó un adaptador serial

y paralelo para la parte posterior de una tarjeta de interfaz estándar ISA para las

computadoras personales de AT&T, y aunque usa las mismas especificaciones

eléctricas y lógicas del conector DB25 se reduce el uso de pines.

2.5.1.1 Especificaciones del estándar EIA/TIA RS232-E

Los transmisores seriales producen un voltaje ±5 a ±15 y se miden respecto a un

nivel de tierra o común, así:

1 lógico: -5 a -15 V

0 lógico: +5 a +15 V

Indefinido: entre +5 a -5 V

Los receptores seriales definen el siguiente voltaje:

1 lógico: -3 a -15 V

0 lógico: +3 a +15 V

Indefinido: -3 a +3 V

Es importante aclarar que un equipo, como la PC, es tanto transmisor como

receptor, por ende cuando va a transmitir los niveles de la señal deben ser mínimo ± 5 V

y cuando va a recibir el valor de la señal debe ser mínimo ± 3 V para que el equipo

reconozca la señal como un dato válido. La tabla N° 2.1 siguiente muestra como están

ubicadas las señales de datos, control y funciones secundarias especiales en los pines de

un conector tipo D. [5]

Tabla N° 2.1. Asignación de señales seriales asíncronas a un conector de 9 pines.

Pin N°

(DTE) Conector DB-9

1 DCD (data Carrier Detect o detector de transmisión)

2 RX o Received data (recibir datos)

3 TX o Transmitted data (transmitir datos)

4 DTR o DTE Ready (Terminal de datos lista)

5 GND o Signal/common ground (Señal de Tierra)

6 DSR o DCE ready (Ajuste de datos listo)

7 RTS o Request to send (Permiso para transmitir)

8 CTS o Clear to send (Listo para enviar)

9 RI o Ring indicator (Indicador de llamada)

Fuente: Practical Industrial Data Communications.

Generalmente entre dos dispositivos de transmisión serial (DTE – DCE) la

tensión de la señal de transmisión va desde -12 a +12 V. El transmisor o DTE envía

señales de tensión que van desde ±5 a ± 12 y el receptor o DCE permite niveles de

tensión de señal entre ±3 a ± 12 por ello cuando el DTE emite una señal el receptor la

recibe como una señal lógica valida abriendo la comunicación en los niveles de tensión

conocidos por el protocolo ModBus. La figura 2.7 muestra un conector DB9. Para la

comunicación con el protocolo ModBus la topología más simple sería un cable serial

que es, por lo general, un cable de par trenzado, categoría 3 el cual permite una

velocidad de transmisión de datos máxima de 10 Mbps, conectando los dos puertos

seriales de dos dispositivos, un maestro y un esclavo.

Figura 2.7 Conector DB9 serial y pines de comunicación serial

Fuente: http://www.simplymodbus.ca/

En el protocolo ModBus los datos son enviados como una serie de unos y ceros

llamados bits. Cada bit es enviado como un voltaje entre ± 5 V. La figura 2.8 muestra

un ejemplo de cómo los bits son enviados muy rápidamente. La velocidad de

transmisión típica es de 9600 baud (bits por segundo) [8].

Figura 2.8 Nivel de tensión asociados a un bit.

Fuente: http://www.simplymodbus.ca/

En el contexto de la transmisión de señal binaria un bit por segundo es lo mismo

que 1 baudio y estas velocidades en la transmisión serial asíncrono están estrechamente

ligadas a la longitud del cable serial que se utilizará en la red. En la tabla N° 2.2 se

muestran las relaciones de velocidades máximas de transmisión permitidas y la longitud

del cable serial con el fin de asegurar la fidelidad de la transmisión de los datos en la

línea de comunicación entre dos dispositivos con interfaces RS 232 acotando que para

pequeñas longitudes de cable se puede tener velocidades de transmisión de datos

mayores.

Tabla N° 2.2. Relación baudio y Longitud del cable de transmisión.

Baudios Longitud del Cable

(metros)

110 850

300 800

600 700

1200 500

2400 200

4800 100

9600 70

19200 50

115000 20

Fuente: Practical Industrial Data Communications

A efectos del desarrollo de este trabajo de grado la distancia entre los

dispositivos es menor que 20 metros por ende se tendrá la capacidad de hasta 115000

baudios sin embargo, se escogió como velocidad de transmisión el valor estándar 9600

baudios debido a que es la velocidad que tanto la PC como el PLC transmiten datos

habitualmente.

2.5.2 ESTÁNDAR EIA/TIA RS485-A

Este es uno de los estándares más versátiles entre los estándares de interfaz RS.

Tiene como característica principal permitir varios transmisores y receptores en una

misma línea de comunicación; es decir, una red multipunto sobre cables de dos

conductores asegurando la comunicación de datos seriales balanceados para:

Distancias entre dispositivos mayores a 1200 m

Velocidades de transmisión de datos por encima de 10 Mbps

Hasta 32 controladores de línea en una misma línea

Hasta 32 receptores de línea en una misma línea

Para asegurar la transmisión de los datos a una velocidad de 10 Mbps la longitud

del cable debe ser menor de 6 metros; si se desea un mejor rendimiento será necesario

un cable de mayor calibre de conductor y posiblemente terminadores activos (si se

necesita implementar una comunicación con gran longitud de cable de transmisión) en

vez de resistencias terminadoras (Rt) de 120 Ω.

La resistencia terminadora de 120 Ω se utiliza usualmente en líneas cortas o de

baja velocidad de transmisión.

Se puede implementar una red multipunto con dos conductores por cable o half-

dúplex o con dos pares de conductores por cable lo cual se conoce como transmisión

full-dúplex, este trabajo de grado se concentra en el primer tipo de transmisión. El

término Half Dúplex en un sistema de comunicación se refiere, a que solamente en un

tiempo determinado, el sistema puede transmitir o recibir información, sin embargo no

lo puede hacer al mismo tiempo.

2.5.2.1 Especificaciones del estándar RS 485-A

Según la especificación se necesitan 2 conductores por cable a uno se le asignó la

letra A y al otro se le asignó la letra B. la relación entre estos conductores es diferencial,

el voltaje en el conductor A se mide respecto al voltaje de B. La diferencia de voltaje en

el terminal del cable a circuito abierto para el controlador de la línea es como sigue:

-1.5 a -6 V en el conductor A respecto al conductor B para un 1

Lógico

+1.5 a +6 V en el conductor A respecto al conductor B para un 0

lógico

Los controladores de línea tienen una alimentación de +5 V. La diferencia de

voltaje referenciada a la tierra del receptor (modo común) en el controlador de la línea

es de -1 a 3 V (si la impedancia de carga es de 52 Ω); la diferencia de voltaje en modo

común visto desde el receptor de la línea es de -7 a +12 V cuando la resistencia de

entrada máxima es de 12KΩ. El controlador de la línea puede operar en tres estados:

lógico 1, lógico 0 o alta impedancia.

En el estado de alta impedancia la corriente del controlador de la línea es mínima

y pareciera no estar presente en la red. Esto es conocido como estado inhabilitado y

puede ser iniciado por una señal en un pin de control en el circuito integrado del

controlador de línea. La Tri-operación de los controladores de línea permite la conexión

de una red multipunto de hasta 32 dispositivos transmisores en una misma línea,

siempre y cuando este activo uno a la vez. Es estándar RS 485 incluye la limitación de

corriente en los casos donde se produce la contención que es de 250mA máximo en

corto circuito para el controlador.

Las líneas de transmisión de datos half-dúplex no requieren terminación

(resistencia) especial si el tiempo de transmisión de señal de un extremo al otro de la

línea es significativamente menor a un cuarto del tiempo de subida de la señal de

transmisión. Esto sucede a menudo con velocidades de transmisión bajas. En la figura

2.9 se muestra una red usual multipunto half-dúplex con el estándar donde se presentan

tres opciones de sistemas de aterramiento de circuito: GWG, Tierra de señal o tierra de

chasis. [5]

La figura 2.9 red multipunto half dúplex estándar RS485

Fuente: Practical Industrial Data Communications

El cable que generalmente se utiliza para la comunicación ModBus multipunto

en bus con este estándar es el cable coaxial de doble conductor y apantallamiento como

por ejemplo el cable de bus Profibus de siemens, y para la comunicación ModBus punto

a punto puede ser un cable de par trenzado con 3 hilos mínimo.

personal, 29/08/15,
¿¿ Cómo se asigna la referencia si se usa la misma bibliografía más de una vez ??

2.5.3 CONVERSIÓN RS 232 A RS 485 BIDIRECCIONAL

Debido a la incompatibilidad en los estándares de comunicación manejados por

los dispositivos de la red; es decir, RS 232 para la PC y RS 485 para los PLC’s; se debe

contar con un circuito electrónico capaz de realizar la conversión de la señal eléctrica de

forma bidireccional.

Como limitante principal se tiene que para implementar el conversor todos los

equipos de la red ModBus deben tener las mismas configuraciones en cuanto a control

de paridad, velocidad de transmisión, bits de inicio y parada, etc. de no ser así la

comunicación no se dará.

La segunda limitante es superar las diferencias en los niveles de tensiones de

comunicación propia de cada estándar, para ello el convertidor debe llevar a un nivel de

tensión tipo TTL/CMOS a las señales de cada estándar.

La figura 2.10 siguiente consiste en cómo debe ser el circuito de un conversor

genérico de RS232 a RS485 para ambas direcciones de la comunicación (para transmitir

y recibir datos). El dispositivo MAX 232 sirve esencialmente para convertir los niveles

de tensión de la señal RS232 a niveles TTL/CMOS, y los dispositivos 75176 sirven para

convertir la señal TTL/CMOS a niveles diferenciales del tipo RS 485. La figura 2.10 es

sólo referencial, ya que los pines a conectar dependerán principalmente de la marca del

microcontrolador a utilizar y en este caso se observan dos transceiver 75176 para una

comunicación full dúplex. [9]

Figura 2.10 Circuito de un conversor RS 232 a RS 485 genérico

Fuente: Ingeniería en Microcontroladores

Existe otro aspecto de la comunicación que se debe tomar en cuenta y es la

asignación de los pines al conector DB9 del RS 485, ya que la recomendación según

ModBus estándar no es la misma que la de los PLC’s Siemens. La tabla N° 2.3 muestra

cómo deben estar asignados los pines a un conector DB9 para implementar una

comunicación ModBus serial asíncrona en dos hilos de comunicación en un sistema

balanceado con un tercer hilo común o aterrado. [10]

Tabla N° 2.3. Asignación de pines a un conector DB9 para comunicación ModBus a través de

2 hilos

Pin en DB-9 Nombre EIA/TIA 485 Descripción

3 -- Control del puerto de comunicación (opcional)

5 B Transceiver del voltaje positivo

9 A Transceiver del voltaje positivo

2 -- Alimentación 5..24 VDC positiva

1 Tierra Señal de alimentación y de tierra común.

Fuente: ModBus over serial line. Specifications and implementation guide.

Como se verá en la figura 2.11 la asignación de los pines del conector DB9 del

puerto 0 y 1 de comunicación de los PLC’s varía de la recomendación, sin embargo, el

estándar RS485 para el protocolo Profibus y el protocolo ModBus es el mismo en

cuanto a las especificaciones eléctricas y lógicas, para simplificar el trabajo de grado se

utilizó el cable recomendado para el estándar RS485 y el protocolo Profibus; en la

sección 2.6 se explicará mas sobre los cables de Siemens.

Figura 2.11. Asignaciones de los pines al puerto 0 y 1 de los PLC’s Siemens S7 200

CPU 2XX

Fuente: Manual del sistema de automatización S7 200

2.6 ENLACES FISICOS DE LA RED MODBUS

En este punto se desea describir las características de los elementos de la capa 1

de la estructura OSI que son necesarios para establecer la comunicación a través del

protocolo ModBus.

2.6.1 CABLE PPI/PC DE SIEMENS

En el Laboratorio de Automatización II se cuenta con el cable PPI/PC de

Siemens cuya utilidad principalmente es comunicar el software Step 7 con el PLC de la

serie S7 para programarlo, este cable es aislado para comunicación punto a punto (PPI),

tiene un conector para RS 232 en un extremo y un conector para RS 485 en el otro

extremo y dispone de un conversor RS232 a RS485 integrado. Este cable tiene

características útiles para implementar la comunicación ModBus en modo RTU pero

solo punto a punto. La figura 2.12 muestra las dimensiones del cable de comunicación

PPI/PC de Siemens.

Figura 2.12 Cable PPI/PC de Siemens

Fuente: Sistemas de automatización S7 200. Manual del sistema.

El cable dispone de 5 interruptores tipo DIP para seleccionar la velocidad de

transferencia, el modo de 10 u 11 bits en protocolo PPI y si se transmite en modo local o

remoto; la velocidad de transferencia se selecciona con la combinación de los 3

primeros interruptores y el interruptor 4 selecciona el número de bits por bytes de una

trama para la transmisión de datos; el interruptor 5 selecciona el modo local si el

dispositivo serial es un DTE o remoto para el DCE. Para este trabajo de grado la

selección de los interruptores debe ser como sigue: 010 para una velocidad de 9600

baudios; 0 para 11 bits por byte (dado que la comunicación es en RTU) y 1 pues el

transmisor es considerado un DTE el cual es la PC.; así que la combinación final debe

ser 01001; siendo el interruptor del DIP arriba igual a 1 y 0 si esta abajo.

En la Tabla N° 2.4 se muestra la asignación de los pines a cada conector según el

estándar de comunicación al cual va dirigido del cable PPI/PC de Siemens [11].

Tabla N° 2.4 pines asignados a un conector RS 485 y un RS232 DTE

Fuente: Sistemas de automatización S7 200. Manual del sistema.

También tiene la característica de necesitar un tiempo de inactividad en la que se

cambia de dirección en la comunicación de los datos entre el PC y el PLC, el cual se

denomina tiempo de inversión. El cable pasa a transmitir cuando envía datos del RS 232

al puerto 485. Y está inactivo o en modo recepción cuando recibe los datos por el puerto

serial y cambia automáticamente de recepción a transmisión cuando detecta datos en el

puerto RS 232. Para la velocidad de 9600 baudios el tiempo de inversión es de 2 ms,

este tiempo es tomado en cuenta cuando se configure la red de manera que el PLC

pueda transmitir los datos (o recibirlos) al puerto RS 232 de la PC.

2.6.2 CABLE SERIAL

En una red punto a punto entre dos PLC’s con el protocolo ModBus se necesita

un cable de par trenzado de categoría 3 como mínimo como se habló en la sección 2.5.1,

el cable serial que se dispone en el Laboratorio de Automatización II es UTP con

chaqueta gris, el conductor es de cobre calibre 28 AWG y dispone en cada punta del

cable un conector DB9 en un extremo macho y en el otro Hembra, la asignación de los

pines es la definida en la tabla 2.1 para el estándar RS 232. Consiste de un cable de

extensión de puerto el cual no tiene cruce de pinouts.

2.7 PLC S7 200 CPU 2XX

La CPU S7 200 tiene en una carcasa compacta un microprocesador, una fuente

de alimentación integrada, así como circuitos de entrada y de salida que conforman un

Micro PLC. Tras haber cargado el programa en el S7 200 con el Step 7, éste contendrá

la lógica necesaria para supervisar y controlar los aparatos de entrada y salida de la

aplicación. La figura 2.13 muestra las partes de un PLC S7 200. En el Anexo A.4 se

observan los datos técnicos de las CPUs 222 y 226 ya que contiene información

importante para la configuración de la comunicación con el protocolo ModBus RTU

como lo es el número de puertos de cada CPU, el número de entradas y salidas digitales,

si posee o no entradas analógicas, la capacidad de la memoria V, entre otros aspectos. Si

la CPU tiene módulos de expansión se debe tomar en cuenta además del complemento

de entradas y salidas el tiempo de vigilancia en cada ciclo de ejecución.

Figura 2.13 Exterior de un PLC S7 200

Fuente: Manual del sistema de automatización S7 200

2.7.1 DIRECCIONAMIENTO DE LA MEMORIA DE UN PLC

La CPU S7 200 almacena información en diferentes áreas de la memoria que

tienen direcciones unívocas. Es posible indicar explícitamente la dirección a la que se

desea acceder. El programa puede acceder entonces directamente a la información.

Para acceder a un bit en un área de memoria es preciso indicar la dirección del

mismo, la cual está formada por un identificador de área, la dirección del byte y el

número del bit. La figura 2.14 muestra un ejemplo de direccionamiento de un bit

(denominado también direccionamiento “byte.bit”). En el ejemplo, el área de memoria y

la dirección del byte (I=entrada y 3=byte 3) van seguidas de un punto decimal (”.”) que

separa la dirección del bit (bit 4).

Figura 2.14. Acceder a un bit de datos en la memoria de la CPU

Fuente: Sistemas de Automatización S7 200

Utilizando el formato de dirección de byte se puede acceder a los datos de la

mayoría de las áreas de memoria (V, I, Q, M, S, L y SM) en formato de bytes, palabras

o palabras dobles, la tabla N° 2.5 se muestra el rango de números enteros representables

en los distintos tamaños de datos. La dirección de un byte, de una palabra o de una

palabra doble de datos en la memoria se especifica de forma similar a la dirección de un

bit. Esta última está compuesta por un identificador de área, el tamaño de los datos y la

dirección inicial del valor de byte, palabra o palabra doble, como muestra la figura 2.15

Tabla N° 2.5 Rangos decimales y hexadecimales de los distintos datos

Fuente: SIMATIC. Manual del Sistema de Automatización S7 200

Figura 2.15 acceso a una misma información en formato byte, palabra o palabra doble

Fuente: SIMATIC. Manual del Sistema de Automatización S7 200

2.7.2 ACCEDER A LOS DATOS EN LAS ÁREAS DE MEMORIA

Imagen de proceso de las entradas I:

El S7 200 lee las entradas físicas al comienzo de cada ciclo y escribe los

correspondientes valores en la imagen de proceso de las entradas. A ésta última se

puede acceder en formato de bit, byte, palabra o palabra doble:

Bit: I[direcc. byte].[direcc. bit] I0.1

Byte, palabra o palabra doble: I[tamaño][direcc. byte inicial] IB4

Imagen de proceso de las salidas Q:

Al final de cada ciclo, el S7 200 copia en las salidas físicas el valor almacenado

en la imagen de proceso de las salidas. A ésta última se puede acceder en formato de bit,

byte, palabra o palabra doble:

Bit: Q [direcc. byte].[direcc. bit] Q1.1

Byte, palabra o palabra doble: Q[tamaño][direcc. byte inicial] QB5

Memoria de variables V:

La memoria de variables (memoria V) se puede utilizar para almacenar los

resultados intermedios calculados por las operaciones en el programa. La memoria V

también permite almacenar otros datos relativos al proceso o a las tareas actuales. A la

memoria V se puede acceder en formato de bit, byte, palabra o palabra doble:

Bit: V[direcc. byte].[direcc. bit] V10.2

Byte, palabra o palabra doble: V[tamaño][direcc. byte inicial] VW100

Área de marcas M:

El área de marcas (memoria M) se puede utilizar como relés de control para

almacenar el estado inmediato de una operación u otra información de control. Al área

de marcas se puede acceder en formato de bit, byte, palabra o palabra doble:

Bit: M[direcc. byte].[direcc. bit] M26.7

Byte, palabra o palabra doble: M[tamaño][direcc. byte inicial] MD20

Marcas especiales SM:

Las marcas especiales (SM) permiten intercambiar datos entre la CPU y el

programa. Estas marcas se pueden utilizar para seleccionar y controlar algunas

funciones especiales de la CPU S7 200. Por ejemplo, hay una marca que se activa sólo

en el primer ciclo, marcas que se activan y se desactivan en determinados intervalos, o

bien marcas que muestran el estado de las operaciones matemáticas y de otras

operaciones. (Para más información acerca de las marcas especiales, consulte el Anexo

A.5). A las marcas especiales se puede acceder en formato de bit, byte, palabra o

palabra doble:

Bit: SM[direcc. byte].[direcc. bit] SM0.1

Byte, palabra o palabra doble: SM[tamaño][direcc. byte inicial] SMB86

Existen otros espacios de la memoria total que no se abordarán en este trabajo de

grado por no tener relevancia para este proyecto.

2.7.3 UTILIZAR PUNTEROS PARA EL DIRECCIONAMIENTO

INDIRECTO DE LA MEMORIA DEL S7 200

El direccionamiento indirecto utiliza un puntero para acceder a los datos de la

memoria. Los punteros son valores de palabra doble que señalan a una dirección

diferente en la memoria. Como punteros sólo se pueden utilizar direcciones de la

memoria V. Los punteros también se pueden transferir como parámetros a una

subrutina.

Para acceder indirectamente a los datos de una dirección de la memoria es

preciso crear un puntero a esa dirección, introduciendo para ello un caracter ”&” y la

dirección a la que se desea acceder. El operando de entrada de la operación debe ir

precedido de un caracter ”&” para especificar que a la dirección indicada por el

operando de salida (es decir, el puntero) se debe transferir la dirección y no su

contenido. En la figura 2.16 se observa un ejemplo de cómo se crea y se utiliza un

puntero. [3]

Figura 2.16 crear y utilizar un puntero

Fuente: SIMATIC. Manual del Sistema de Automatización S7 200

2.7.4 CREAR PROTOCOLOS PERSONALIZADOS EN MODO

FREEPORT

El modo Freeport permite controlar el puerto de la CPU S7 200 desde el

programa de usuario. El PLC entra en este modo para permitir la comunicación a través

del o los puertos con el protocolo ModBus RTU.

El modo Freeport se habilita utilizando las marcas especiales SMB30 (para el

puerto 0) y SMB130 (para el puerto 1). El programa utiliza las siguientes operaciones e

interrupciones para controlar el funcionamiento del puerto de comunicación:

Operación Transmitir mensaje (XMT) e interrupción de transmisión: La

operación Transmitir mensaje sirve para transmitir hasta 255 caracteres

desde el puerto COM del S7 200. La interrupción de transmisión notifica al

programa contenido en el S7 200 el fin de la transmisión.

Interrupción de recepción de caracteres: Esta interrupción le indica al

programa de usuario que se ha recibido un carácter en el puerto COM. El

programa puede reaccionar a ese caracter, basándose en el protocolo a

implementar.

Operación Recibir mensaje (RCV): La operación Recibir mensaje obtiene el

mensaje entero del puerto COM y genera luego una interrupción en el

programa cuando el mensaje se ha recibido por completo. La memoria de

marcas del S7 200 se utiliza para configurar la operación Recibir mensaje

con objeto de iniciar y detener la recepción de mensajes, basándose en

condiciones predefinidas. Esta operación le permite al programa iniciar o

detener un mensaje, basándose en caracteres específicos o en intervalos de

tiempo. La mayoría de los protocolos se pueden implementar con la

operación Recibir mensaje.

El modo Freeport sólo está activado cuando el S7 200 se encuentra en modo

RUN. Si el S7 200 cambia a modo STOP, se detiene la comunicación Freeport y el

puerto de comunicación retorna al protocolo PPI con los ajustes configurados en el

bloque de sistema del S7 200.

Si el cable PPI/PC se utiliza en un sistema que use el modo Freeport, el

programa del S7 200 debe considerar el tiempo de inversión en las situaciones

siguientes:

El S7 200 responde a los mensajes que envía el aparato RS 232. Tras recibir

una petición del aparato RS 232, el S7 200 debe retardar la transmisión de un

mensaje de respuesta por un período mayor o igual al tiempo de inversión

del cable.

El aparato RS 232 responde a los mensajes que envía el S7 200. Tras recibir

una respuesta del aparato RS 232, el S7 200 debe retardar la transmisión de

la siguiente petición por un período mayor o igual al tiempo de inversión del

cable.

En ambos casos, el tiempo de retardo es suficiente para que el cable PPI/PC

pueda cambiar de modo de transmisión a modo de recepción, enviando entonces los

datos del puerto RS 485 al RS 232.

2.7.5 EL STEP 7 Y MODBUS

Las operaciones ModBus se instalan en la carpeta Librerías del árbol de

operaciones de STEP 7 Micro/WIN. Estas operaciones permiten que el S7 200 actúe

como dispositivo ModBus. Cuando se dispone una operación ModBus en el programa,

se agregan automáticamente al proyecto una o más subrutinas asociadas.

Existen dos versiones de la librería del protocolo de maestros ModBus. Una de

ellas utiliza el puerto 0 de la CPU y, la otra, el puerto 1. Los nombres de las UOPs de la

librería del puerto 1 se complementan con _P1 (p. ej. MBUS_CTRL_P1) para indicar

que la UOP utiliza el puerto 1 de la CPU. Las dos librerías para maestros ModBus son

idénticas en todos los demás aspectos.

La librería para esclavos ModBus sólo soporta la comunicación por el puerto 0.

2.7.6 REQUISITOS PARA UTILIZAR EL PROTOCOLO MODBUS

Las operaciones del protocolo de maestros ModBus utilizan los siguientes

recursos del S7 200:

La inicialización del protocolo de esclavos ModBus utiliza el puerto de

comunicación de la CPU específico para dicho protocolo. Si el puerto de la

CPU se está utilizando para la comunicación vía el protocolo de maestros

ModBus, no se podrá usar para ninguna otra función, incluyendo la

comunicación con STEP 7 Micro/WIN. La operación MBUS_ CTRL asigna

el puerto 0 al protocolo de maestros ModBus, o bien al protocolo PPI. La

operación MBUS_ CTRL_P1 asigna el puerto 1 (de la librería del puerto 1)

al protocolo de maestros ModBus, o bien al protocolo PPI.

Las operaciones del protocolo de esclavos ModBus afectan a todas las

direcciones de marcas especiales (SM) asociadas a la comunicación Freeport

por el puerto utilizado.

Las operaciones del protocolo de maestros ModBus utilizan 3 subrutinas y 1

rutina de interrupción.

Las operaciones del protocolo de maestros ModBus necesitan 1620 bytes de

espacio en el programa para las dos operaciones ModBus y las rutinas de

soporte.

Las variables de las operaciones del protocolo de maestros ModBus

necesitan un bloque de 284 bytes de la memoria V. El usuario asigna la

dirección inicial de este bloque, que se reserva para las variables ModBus.

Para poder soportar la librería del protocolo de maestros ModBus, la versión

de firmware de la CPU S7 200 debe ser 2.00 o posterior.

La librería del protocolo de maestros ModBus utiliza interrupciones de

usuario para algunas funciones. El programa de usuario no debe inhibir las

interrupciones de usuario.

Las operaciones del protocolo de esclavos ModBus utilizan los siguientes

recursos del S7 200:

La inicialización del protocolo para esclavos ModBus utiliza el puerto 0 para

la comunicación ModBus. Si el puerto 0 se está utilizando para la

comunicación vía el protocolo de esclavos ModBus, no se podrá usar para

ninguna otra función, incluyendo la comunicación con STEP 7 Micro/WIN.

La operación MBUS_INIT asigna el puerto 0 al protocolo para esclavos

ModBus, o bien al protocolo PPI.

Las operaciones del protocolo para esclavos ModBus afectan a todas las

direcciones de marcas especiales (SM) asociadas a la comunicación Freeport

por el puerto 0.

Las operaciones del protocolo para esclavos ModBus utilizan 3 subrutinas y

2 rutinas de interrupción.

Las operaciones del protocolo para esclavos ModBus necesitan 1857 bytes

de espacio en el programa para las dos operaciones ModBus y las rutinas de

soporte.

Las variables de las operaciones del protocolo de esclavos ModBus necesitan

un bloque de 779 bytes de la memoria V. El usuario asigna la dirección

inicial de este bloque, que se reserva para las variables ModBus.

2.7.8 INICIALIZACIÓN Y TIEMPO DE EJECUCIÓN

El protocolo de maestros ModBus utiliza 1.11 ms para inicializar el protocolo

con la operación MBUS_CTRL en el primer ciclo y a partir del segundo ciclo solo

necesita 0.41 ms para la operación. La operación MBUS_MSB aumenta el tiempo del

ciclo; el cálculo de CRC aumenta el tiempo del ciclo en 1,85 ms para cada palabra de la

petición y de la respuesta; esto se debe a que CRC se calcula para cada palabra de la

petición o de la respuesta. En la escritura o lectura de 120 palabras se emplea 222 ms

más de ciclo. Una petición de lectura prolonga el ciclo sobre todo cuando se recibe la

respuesta del esclavo y, en menor medida, cuando se envía la petición. Una petición de

escritura prolonga el ciclo sobre todo cuando se envían los datos al esclavo y, en menor

medida, cuando se recibe la respuesta.

El protocolo de esclavos usa una tabla precalculada de CRC para minimizar el

tiempo de procesamiento de los mensajes. La inicialización de la tabla tarda 240 ms,

efectuándose en la subrutina MBUS_INIT. El tiempo de ciclo se prolonga cuando la

subrutina MBUS_SLAVE procesa una petición. Puesto que la mayor parte del tiempo

se dedica a calcular la CRC, el tiempo de ciclo se prolonga unos 420 ms por cada byte

de la petición y de la respuesta. Una petición/respuesta máxima (lectura o escritura de

120 palabras) prolonga el tiempo de ciclo en aproximadamente 100 milisegundos.

2.7.9 DIRECCIONAMIENTO EN MODBUS CON EL PLC S7 200

Las direcciones en ModBus se conforman de 5 caracteres el cual el primero

define el tipo de dato y los otros cuatro definen el número correspondiente al dato en

cuestión.

Las operaciones de maestros ModBus asignan luego las direcciones a las

funciones para enviarlas al esclavo. Las operaciones de maestros ModBus soportan las

direcciones ModBus siguientes:

00001 hasta 09999 para las salidas digitales (bobinas)

10001 hasta 19999 para las entradas digitales (contactos)

30001 hasta 39999 para los registros de entradas (por lo general, entradas

analógicas)

40001 hasta 49999 para los registros de retención

Todas las direcciones ModBus se basan en”1”. Ello significa que el primer valor

de datos comienza en la dirección”1”. El rango de direcciones válidas depende del

esclavo utilizado.

Los distintos esclavos soportan diferentes tipos de datos y rangos de direcciones.

El maestro ModBus asigna luego las direcciones de manera que correspondan a

las funciones correctas. Las operaciones de esclavos ModBus soportan las direcciones

siguientes:

00001 hasta 00128 son salidas digitales asignadas a Q0.0 hasta Q15.7

10001 hasta 10128 son entradas digitales asignadas a I0.0 hasta I15.7

30001 hasta 30032 son registros de entradas analógicas asignados a AIW0

hasta AIW62

40001 hasta 4xxxx son registros de retención asignados a la memoria V [3].

Todas las direcciones ModBus se basan en”1”. La tabla N° 2.6 muestra la

asignación de las direcciones ModBus a cada dirección del S7 200.

Tabla N° 2.6. Asignaciones de las direcciones ModBus a las direcciones del S7 200

Fuente: SIMATIC. Manual del sistema de automatización del S7 200

2.7.10 CÓDIGOS DE OPERACIÓN O FUNCIONES MODBUS PARA EL

S7 200

En la tabla N° 2.7 se muestran las funciones soportadas por los PLC’s Siemens

Fuente: SIMATIC. Manual del sistema de automatización del S7 200

Función 1: leer una o varias bobinas (salidas digitales). La función 1 indica el

estado ON/OFF de un numero cualquiera de salidas (Q).

Función 2: leer uno o varios contactos (entradas digitales). La función 2 indica el

estado ON/OFF de un número cualquiera de entradas (I).

Función 3: leer uno o varios registros de retención. La función 3 indica el

contenido de la memoria V. En ModBus los registros de retención son valores de

palabras que permiten leer hasta 120 palabras en una sola petición.

Función 4: leer uno o varios registros de entrada. La función 4 indica los valores

de las entradas analógicas.

Función 5: escribir en una bobina (salida digital) la función 5 ajusta una salida

digital al valor indicado. La salida no se fuerza y el programa puede sobrescribir el

valor escrito por la petición ModBus.

Función 6: escribir en un registro de retención. La función 6 escribe un registro

de retención en la memoria V del S7 200.

Función 15: Escribir en varias bobinas (salidas digitales). La función 15 escribe

los valores de varias salidas digitales en la imagen de proceso de las salidas del S7

200. La salida inicial debe comenzar en un límite de byte (p. ej. Q0.0 ó Q2.0) y la

cantidad de salidas escritas debe ser un múltiplo de 8. Ello representa una restricción

de las operaciones del protocolo de esclavos ModBus. Las salidas no se fuerzan y el

programa puede sobrescribir los valores escritos por la petición ModBus.

Función 16: Escribir en varios registros de retención. La función 16 escribe

varios registros de retención en la memoria V del S7 200. En una petición se pueden

escribir 120 palabras como máximo.

2.7.11 OPERACIONES DEL PROTOCOLO MODBUS

MBUS_INIT. La operación MBUS_INIT sirve para activar e inicializar, o bien

para desactivar la comunicación ModBus como esclavo. MBUS_INIT se debe

ejecutar sin errores antes de poder utilizar la operación MBUS_SLAVE. La

operación se finaliza y el bit Done se pone a 1 inmediatamente, antes de continuar

con la siguiente operación.

La operación se ejecuta en cada ciclo cuando está activada la entrada EN.

Se debe ejecutar la operación MBUS_INIT sólo una vez por cada cambio de

estado de la comunicación. Por tanto, la entrada EN debe permanecer activada al

detectarse un flanco positivo, o bien ejecutarse sólo en el primer ciclo.

El valor de la entrada Mode selecciona el protocolo de comunicación. Si la

entrada tiene el valor ”1”, el puerto 0 se asignará al protocolo ModBus y se

habilitará el protocolo. Si la entrada tiene el valor ”0”, el puerto 0 se asignará a PPI

y se inhibirá el protocolo ModBus.

El parámetro Baud ajusta la velocidad de transferencia a 1200, 2400, 4800,

9600, 19200, 38400, 57600 ó 115200 bit/s. Las CPUs S7 200 (versión 1.2 o

posterior) soportan velocidades de transferencia comprendidas entre 57600 y

115200 bit/s.

El parámetro Addr es la dirección del esclavo así que se ajusta la dirección a

valores comprendidos entre 1 y 247.

El parámetro Parity ajusta de manera que concuerde con la paridad del maestro

ModBus.

Todos los ajustes utilizan un bit de parada. Los valores permitidos son:

0 sin paridad

1 paridad impar

2 paridad par

El parámetro Delay retarda el timeout de fin de mensaje ModBus estándar,

sumando el número indicado de milisegundos al timeout de mensajes ModBus

estándar. En redes cableadas, el valor típico de este parámetro debería ser ”0”. Delay

(retardo) puede estar comprendido entre 0 y 32767 milisegundos.

El parámetro MaxIQ ajusta el número de entradas (I) y salidas (Q) disponibles

para las direcciones ModBus 0xxxx y 1xxxx a valores comprendidos entre 0 y 128.

Un valor de ”0” inhibe todas las lecturas y escrituras de las entradas y salidas. Es

recomendable ajustar el valor de MaxIQ a 128, con objeto de poder acceder a todas

las entradas y salidas del S7 200.

El parámetro MaxAI ajusta el número de registros de entradas analógicas (AI)

disponibles para la dirección ModBus 3xxxx a valores comprendidos entre 0 y 32.

Un valor de ”0” inhibe la lectura de las entradas analógicas. Para poder acceder a

todas las entradas analógicas del S7 200, es recomendable ajustar el valor de MaxAI

de la manera siguiente:

0 para la CPU 221

16 para la CPU 222

32 para las CPUs 224, 224XP y 226

El parámetro MaxHold ajusta el número de registros de retención en la

memoria V disponibles para la dirección ModBus 4xxxx. Por ejemplo, para que el

maestro pueda acceder a 2000 bytes de la memoria V, ajuste el valor de MaxHold a

1000 palabras (registros de retención).

El parámetro HoldStart es la dirección inicial de los registros de retención en la

memoria V. Por lo general, este valor se ajusta a VB0, de manera que el parámetro

HoldStart se ajuste a &VB0 (dirección de VB0). Como dirección inicial de los

registros de retención en la memoria V se puede indicar también una dirección

diferente, con objeto de poder utilizar VB0 en otra parte del proyecto. El maestro

ModBus tiene acceso al número MaxHold de palabras de la memoria V,

comenzando en HoldStart. La salida Done se activa una vez finalizada la operación

MBUS_INIT. El byte de salida Error contiene el resultado de ejecución de la

operación. En la tabla 2.7 figuran los errores que pueden ocurrir al ejecutar la

operación.

Tabla N° 2.7. Códigos de error para esclavos ModBus

Códigos de error

Descripción

0 Sin error

1 Error de rango de memoria

2 Velocidad de transferencia o paridad no válida

3 Dirección de esclavo no válida.

4Valor no válido para un parámetro ModBus.

5 Los registros de retención solapan los símbolos de los esclavos ModBus.

6Error de paridad de recepción.

7Error CRC de recepción.

8 Petición no válida / función no soportada

9Dirección no válida en una petición.

10Función de esclavo no habilitada.

Fuente: SIMATIC. Manual del sistema de automatización del S7 200

MBUS_SLAVE. La operación MBUS_SLAVE se utiliza para procesar una

petición del maestro ModBus, debiéndose ejecutar en cada ciclo para poder comprobar

y responder a las peticiones ModBus. La operación se ejecuta en cada ciclo cuando está

activada la entrada EN. MBUS_SLAVE no tiene parámetros de entrada.

La salida Done se activa cuando la operación MBUS_SLAVE responde a una

petición ModBus y se desactiva si no se ha procesado ninguna petición.

La salida Error contiene el resultado de ejecución de la operación. Esta salida

sólo será válida si está activada la salida Done. Si Done está desactivada, no cambiará el

parámetro de error. En la tabla 2.7 figuran los errores que pueden ocurrir al ejecutar la

operación.

MBUS_CTRL. La operación MBUS_CTRL para el puerto 0 del S7 200 (o

MBUS_CTRL_P1 para el puerto 1) sirve para inicializar, vigilar o desactivar la

comunicación ModBus como maestro. MBUS_CTRL se debe ejecutar sin errores antes

de poder utilizar la operación MBUS_MSG. La operación se finaliza y el bit Done se

pone a 1 inmediatamente, antes de continuar con la siguiente operación.

Esta operación se ejecuta en cada ciclo cuando está activada la entrada EN.

La operación MBUS_CTRL se debe llamar en cada ciclo (incluyendo el primero)

para que ésta pueda vigilar el progreso de los mensajes pendientes iniciados por la

operación MBUS_MSG. El protocolo de maestros ModBus no funcionará

correctamente si no se llama a la operación MBUS_CTRL en cada ciclo.

El valor de la entrada Mode selecciona el protocolo de comunicación. Un valor

de entrada ”1” asigna el puerto de la CPU al protocolo ModBus y habilita éste último.

Un valor de entrada ”0” asigna el puerto de la CPU al protocolo PPI e inhibe el

protocolo ModBus.

El parámetro Parity se ajusta de manera que concuerde con la paridad del

esclavo ModBus. Todos los ajustes utilizan un bit de arranque y un bit de parada. Los

valores permitidos son:

0 sin paridad

1 paridad impar

2 paridad par

El parámetro Timeout se ajusta al número de milisegundos que se debe esperar

hasta recibir la respuesta del esclavo. El valor de Timeout puede estar comprendido

entre 1 y 32767 milisegundos. Un valor típico podría ser 1000 milisegundos (1

segundo). El parámetro Timeout se debería ajustar a un valor lo suficientemente elevado

para que el esclavo tenga tiempo de responder a la velocidad de transferencia

seleccionada. El parámetro Timeout se utiliza para determinar si el esclavo ModBus

está respondiendo a una petición. Este parámetro determina cuánto tiempo debe esperar

el maestro ModBus hasta recibir el primer caracter de la respuesta tras haber enviado el

último caracter de la petición. El maestro ModBus recibe la respuesta completa del

esclavo ModBus si se ha recibido por lo menos un caracter de la respuesta dentro del

tiempo indicado en el parámetro Timeout.

La salida Done se activa una vez finalizada la operación MBUS_CTRL.

La salida Error contiene el resultado de ejecución de la operación. En la tabla

2.8 figuran los errores que pueden ocurrir al ejecutar la operación MBUS_CTRL

Tabla N° 2.8 errores al ejecutar la operación MBUS_CTRL

Códigos de error Descripción

0 Sin error

1 La paridad seleccionada no es valida

2 La velocidad de transferencia seleccionada no es válida

3 El timeout seleccionado no es válido

4 El modo seleccionado no es válido

Fuente: SIMATIC. Manual del sistema de automatización del S7 200

MBUS_MSG. La operación MBUS_MSG (o MBUS_MSG_P1 para el Puerto 1)

sirve para iniciar una petición a un esclavo ModBus y procesar la respuesta. La

operación MBUS_MSG inicia la petición a un esclavo ModBus si están activadas las

entradas EN y First. Para enviar la petición, esperar a la respuesta y procesar ésta

última se requieren generalmente varios ciclos.

La entrada EN debe estar puesta a ”1” para poder enviar una petición, debiendo

permanecer activada hasta que se active el bit Done.

Nota: Sólo puede estar activada una operación MBUS_MSG a la vez. Si hay más

de una operación MBUS_MSG activada, se procesará la primera MBUS_MSG

ejecutada y todas las demás operaciones MBUS_MSG se cancelarán con el código de

error 6.

El parámetro First debería estar activado durante sólo un ciclo si hay una nueva

petición que se deba enviar. La entrada First se debe activar cuando se detecte un flanco

positivo, haciendo que la petición se transmita una vez.

El parámetro Slave es la dirección del esclavo ModBus. El rango permitido está

comprendido entre 0 y 247. La dirección 0 se usa como dirección de Broadcast

(difusión general), pudiendo utilizarse sólo para peticiones de escritura. No hay

respuesta a una petición de Broadcast a la dirección 0. No todos los esclavos soportan la

dirección de Broadcast. La librería de esclavos ModBus S7 200 no soporta la dirección

de Broadcast.

El parámetro RW indica si el mensaje es una petición de lectura o de escritura.

Los valores permitidos para RW son:

0 – Lectura

1 – Escritura

Las salidas digitales (bobinas) y los registros de retención soportan peticiones

tanto de lectura como de escritura. Las entradas digitales (contactos) y los registros de

entradas sólo soportan peticiones de lectura.

El parámetro Addr es la dirección ModBus inicial. Los rangos de valores

permitidos son:

00001 a 09999 para las salidas digitales (bobinas)

10001 a 19999 para las entradas digitales (contactos)

30001 a 39999 para los registros de entradas

40001 a 49999 para los registros de retención

El rango específico de los valores permitidos para Addr se basa en las

direcciones que soporta el esclavo ModBus en cuestión.

El parámetro Count indica el número de elementos de datos que se deben leer o

escribir en esta petición. Count representa el número de bits en los tipos de datos de bits,

o bien el número de palabras en los tipos de datos de palabras.

Dirección 0xxxx Count es el número de bits a leer o escribir

Dirección 1xxxx Count es el número de bits a leer

Dirección 3xxxx Count es el número de palabras del registro de entradas a

leer

Dirección 4xxxx Count es el número de palabras del registro de retención a

leer o escribir

La operación MBUS_MSG puede leer o escribir como máximo 120 palabras o

1920 bits (240 bytes de datos). El límite real del valor de Count depende de los límites

del esclavo ModBus.

El parámetro DataPtr es un puntero de direccionamiento indirecto que señala a

los datos asociados con la petición de lectura o escritura en la memoria V de la CPU S7

200. En una petición de lectura, DataPtr debería señalar a la primera dirección de la

CPU utilizada para almacenar los datos leídos del esclavo ModBus. En una petición de

escritura, DataPtr debería señalar a la primera dirección de la CPU utilizada para los

datos que se deben enviar al esclavo ModBus.

El valor DataPtr se transfiere a MBUS_MSG como puntero de

direccionamiento indirecto. Por ejemplo, si los datos a escribir en un esclavo ModBus

comienzan en la dirección VW200 en la CPU S7 200, el valor de DataPtr será &VB200

(dirección de VB200). Los punteros deben ser siempre del tipo VB aunque señalen a

datos en formato de palabra.

Los registros de retención (dirección 4xxxx) y los registros de entradas

(dirección 3xxxx) son valores de palabras (2 bytes o 16 bits). Las palabras de la CPU S7

200 se formatean de la misma manera que los registros ModBus. La dirección más baja

de la memoria V es el byte más significativo del registro. La dirección más alta de la

memoria V es el byte menos significativo del registro. La tabla N° 2.9 muestra cómo

corresponden las direcciones de byte y de palabra del S7 200 con el formato del registro

ModBus.

Tabla N° 2.9 Direcciones de bytes y de palabras del S7 200 con el formato del registro

ModBus

Dirección Datos Hex Dirección Datos Hex Dirección Datos Hex

VB200 12 VW200 12 34 4001 12 34

VB201 34

VB202 56 VW202 56 78 4002 56 78

VB203 78

VB204 9A VW204 9A BC 4003 9A BC

VB205 BC

Fuente: SIMATIC. Manual del sistema de automatización del S7 200

Las áreas de datos de bits (direcciones 0xxxx y 1xxxx) se leen y se escriben como

bytes empaquetados. Ello significa que en cada byte de datos se empaquetan 8 bits. El

bit menos significativo del primer byte de datos es el número de bit direccionado (el

parámetro Addr). Si se escribe un solo bit, éste se deberá encontrar en el bit menos

significativo del byte al que señala DataPtr.

En el caso de las direcciones de bits que no comiencen en un límite de byte par, el

bit correspondiente a la dirección inicial deberá encontrarse en el bit menos significativo

del byte. Más abajo se indica un ejemplo del formato de bytes empaquetados para 3 bits

comenzando en la dirección ModBus 10004.

Al escribir en las salidas digitales (bobinas), el usuario debe disponer los bits en

las posiciones correctas del byte empaquetado antes de que los datos sean transferidos a

la operación MBUS_MSG vía DataPtr.

La salida Done está desactivada mientras se está enviando una petición y cuando

se está recibiendo una respuesta. La salida Done está activada al finalizarse la respuesta,

o bien si la operación MBUS_MSG se ha cancelado debido a un error.

La salida Error sólo será válida cuando esté activada la salida Done. En la tabla

N° 2.10 se observan los errores de ejecución de la operación MBUS_MSG del maestro

ModBus se indican los errores que devuelve la operación MBUS_MSG.

Los códigos de error con números bajos (1 a 8) son errores que detecta la

operación MBUS_MSG. Por lo general, estos códigos de error indican un problema en

los parámetros de entrada de la operación MBUS_MSG, o bien en la recepción de la

respuesta del esclavo. Los errores de paridad y CRC indican que hay una respuesta, pero

que los datos no se han recibido correctamente. Ello se debe normalmente a un

problema eléctrico, p. ej. Una conexión defectuosa o ruidos eléctricos.

Los códigos de error con números altos (comenzando en 101) son errores que

devuelve el esclavo ModBus. Estos errores indican que el esclavo no soporta la función

requerida, o bien la dirección solicitada (un tipo de datos o un rango de direcciones).[3]

Tabla N° 2.10 Errores de ejecución de la operación MBUS_MSG del maestro ModBus

Códigos de

errorDescripción

0 Sin error.

1

Error de paridad en la respuesta. Sólo es posible si se utiliza paridad par o impar. La transferencia ha sido perturbada y es posible que se hayan recibido datos incorrectos. Este error se debe normalmente a un problema eléctrico, p. ej. Un cableado incorrecto o ruidos eléctricos que afectan la comunicación

2 No utilizado

3

Timeout de recepción. No se ha recibido una respuesta del

esclavo dentro del tiempo indicado en Timeout. Ello puede

deberse p. ej. A una conexión eléctrica defectuosa con el esclavo,

a que los ajustes del maestro y del esclavo son diferentes

(velocidad de transferencia y/o paridad), o bien a una dirección

incorrecta del esclavo.

4 Error en un parámetro de petición. Uno o más parámetros de

entrada (Slave, RW, Addr o Count) se han ajustado a un valor no

válido. En la documentación se indican los valores permitidos

para los parámetros de entrada

5El maestro ModBus no está habilitado. MBUS_CTRL se debe

llamar en cada ciclo antes de llamar a MBUS_MSG.

6ModBus está procesando otra petición. Sólo puede estar activada

una operación MBUS_MSG a la vez.

7

Error en la respuesta. La respuesta recibida no corresponde a la

petición. Ello indica que hay un problema en el esclavo o que un

esclavo incorrecto ha respondido a la petición.

8

Error CRC en la respuesta. La transferencia ha sido perturbada y

es posible que se hayan recibido datos incorrectos. Este error se

debe normalmente a un problema eléctrico, p. ej. Un cableado

incorrecto o ruidos eléctricos que afectan la comunicación.

101

El esclavo no soporta la función solicitada en esta dirección. En el

tema de la Ayuda “Utilizar las operaciones del maestro ModBus”,

consulte la tabla de funciones que debe soportar el esclavo

ModBus.

102

El esclavo no soporta la dirección de los datos. El rango de

direcciones solicitado de Addr más Count está fuera del rango de

direcciones permitido para el esclavo.

103El esclavo no soporta el tipo de datos. El esclavo no soporta el

parámetro Addr.

105

El esclavo ha aceptado el mensaje, pero hay un retardo en la

respuesta. Este es un error de MBUS_MSG. El programa de

usuario debería reenviar la petición más tarde.

106 El esclavo ha aceptado el mensaje, pero hay un retardo en la

respuesta. Este es un error de MBUS_MSG. El programa de

usuario debería reenviar la petición más tarde. El esclavo está

ocupado y ha rechazado el mensaje. Intente reenviar la misma

petición para obtener una respuesta

107 El esclavo ha rechazado el mensaje por un motivo desconocido.

108Error de paridad en la memoria del esclavo. Éste es un error del

esclavo.

Fuente: SIMATIC. Manual del sistema de automatización del S7 200

2.8 COMENZAR A TRABAJAR CON LABVIEW

National Instruments NI ofrece tres mecanismos principales para conectar

dispositivo ModBus:

(1) un servidor OPC de alto nivel,

(2) un servidor de E/S ModBus y

(3) un API de ModBus introducido en NI LabView 2013 a través de los

módulos LabView Real-Time o LabView Datalogging and Supervisory

Control (DSC)

En este trabajo de grado se usará el segundo (2).

2.8.1 SERVIDORES DE E/S MODBUS

Los servidores de E/S ModBus, los cuales están en los módulos LabView DSC y

LabView Real-Time, ofrecen un motor de alto nivel para comunicarse por ModBus. Se

debe registrar el conjunto de datos al que quiere tener acceso y el servidor de E/S

programa automáticamente las solicitudes en el rango especificado.

Hay que añadir el servidor al nuevo proyecto. Se escoge entre un maestro o

esclavo ModBus y esto dirige a parámetros adicionales. Por ejemplo, un maestro tiene

un rango de consulta definida - la velocidad a la que cada solicitud es enviada al

esclavo, mientras que los esclavos deben esperar estas solicitudes y no tienen tiempos

pre-definidos.

Después de que se crea el servidor de E/S, se debe especificar los elementos en

el dispositivo que desea leer, los servidores de E/S de ModBus permiten seleccionar

entre una variedad de formatos y tipos de datos. Por ejemplo, se puede leer el registro de

retención en la dirección 0 al mapear una variable al elemento 400001, leer el primer bit

de este registro [12]

2.8.2 EL MODELO DE DATOS MODBUS PARA LABVIEW

ModBus administra el acceso de los datos de manera simple y flexible.

Originalmente, ModBus soporta dos tipos de datos: un valor Booleano y un entero sin

signo de 16 bits.

En los sistemas SCADA, es común para los dispositivos embebidos tener ciertos

valores definidos como entradas, por ejemplo ganancias o parámetros PID, mientras que

otros valores son salidas, como la temperatura actual o posición de la válvula. Para

cumplir con esta necesidad, los valores de los datos ModBus son divididos en cuatro

rangos según se observa en la tabla N° 2.8 un esclavo puede definirse como 65.536

elementos en cada rango.

Tabla N° 2.8 Rangos de Modelos de Datos ModBus

Bloque de Memoria

Tipo de Datos Acceso de Maestro Acceso de Esclavo

Bobinas Booleano Lectura/Escritura Lectura/Escritura

Entradas Discretas

Booleano Solo Lectura Lectura/Escritura

Registros de Retención

Palabra Sin Signo Lectura/Escritura Lectura/Escritura

Registros de Entrada

Palabra Sin Signo Solo Lectura Lectura/Escritura

Fuente: http://www.ni.com/white-paper/7675/es/

En muchos casos, los sensores y otros dispositivos generan datos en tipos

diferentes a Booleanos simples y enteros sin signo. Es común para los dispositivos

esclavos convertir estos tipos de datos más grandes a registros. Por ejemplo, un sensor

de presión puede dividir un valor de punto flotante de 32 bits entre dos registros de 16

bits.

ModBus muestra estos valores de una manera completamente conceptual, lo que

significa que pueden no existir en realidad en la memoria. Por ejemplo, un dispositivo

esclavo puede definirse de tal manera que los registros de retención y los registros de

entrada de hecho comparten la misma memoria si ese comportamiento tiene sentido

para el esclavo. En la mayoría de los casos, los esclavos almacenan cada tipo de datos

soportados en memoria separada y limita el número de elementos de datos a los que un

maestro tiene acceso. Esta flexibilidad es una opción debido a la manera en la que los

datos son expuestos a través del comportamiento bien definido de los códigos de

función de ModBus.

2.8.3 CODIGOS DE FUNCION DE MODBUS

Los códigos de función de ModBus determinan cómo el maestro tiene acceso y

modifica los datos. A diferencia de los rangos de datos, los cuales son conceptuales, los

códigos de función tienen un comportamiento bien definido. Cuando a un esclavo se le

pide realizar un código de función, utiliza los parámetros de la función para ejecutar ese

comportamiento bien definido. La figura 2.17 muestra este enlace entre una solicitud de

función y la memoria real del dispositivo.

Figura 2.17 Figura de enlace entre una solicitud de función y la memoria real del

dispositivo

Fuente: http://www.ni.com/white-paper/7675/es/#toc3

Los códigos de función más comunes llevan el nombre del rango de datos

conceptual que modifican o al que tienen acceso. Por ejemplo, "read holding registers"

realiza la acción de extraer datos de la memoria definida como registros de retención y

regresarlos al maestro. La Tabla N° 2.9 identifica los códigos de función más comunes.

Tabla N° 2.9 Códigos de función más comunes y las que soporta LabView

Fuente: http://www.ni.com/white-paper/7675/es/#toc3