Capítulo II
-
Upload
rosmar-arias -
Category
Documents
-
view
214 -
download
1
description
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.
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