Wiesemann & Theis GmbH

Tecnología de redes, sensores e interfaces para la industria, la oficina y la informática

Conocimientos previos:

Formatos de datos y protocolos

Desde los simples byte hasta el protocolo industrial



¿Qué son los datos?

En la digitalización, la industria 4.0 o el IoT (siglas en inglés para el Internet de las Cosas) de lo que se trata es de que componentes muy dispares, con frecuencia industriales, y también sus usuarios intercambien datos entre sí.

Desde el punto de vista de los usuarios, esos datos pueden ser informaciones muy diferentes como temperaturas, estados de conmutación, pesos, indicación de la hora, detalles de posición y muchos otros más.

Pero no importa del contenido del que se trate, para el procesamiento electrónico de los datos o la ingeniería informática los datos son siempre una cantidad indeterminada de bytes.

Un byte se corresponde con un valor entre 0 y 255.

Es decir, que el intercambio de datos significa transferir bytes de A a B.


Intercambio de datos regulado por protocolos

Para que el receptor pueda entender los datos que le ha enviado el emisor es importante establecer la forma en la que se transmiten los datos.

Por otra parte, en los sistemas con varios componentes interconectados es necesario especificar a quién va destinado el envío de los datos. Por eso, además de los datos propiamente dichos a transmitir, es necesario incluir en el envío una dirección.

Cuando los datos útiles y la dirección siguen un esquema marco predeterminado hablamos de protocolos.

En el pasado, para transmitir datos entre componentes industriales se utilizaba con frecuencia un sistema de bus de campo. Los buses de campo son conexiones seriales entre los componentes interlocutores. Aquí se han consolidado varios estándares paralelos que no solo se diferencian por el protocolo y la velocidad de la transmisión, también la transmisión física y hasta las posibilidades de conexión mecánica empleadas varían mucho.

Los nuevos protocolos industriales se diferencian a nivel de protocolo en la codificación de los datos, pero como medio de transporte físico utilizan mayoritariamente Ethernet TCP/IP.

Es decir que se aplica un estándar común, lo cual presenta muchas ventajas:

  • poder utilizar la infraestructura disponible
  • poder utilizar en paralelo diferentes protocolos industriales en la misma red
  • unificación de la tecnología de transmisión y de conectores
  • posibilidad de comunicación independiente de la localización
  • posibilidad de ampliación arbitraria

Formatos de datos

Salvo algunas excepciones, en los protocolos que utilizan Ethernet TCP/IP como estándar común, el direccionamiento se realiza ya con la dirección de IP.

El protocolo industrial propiamente dicho define más bien la forma de transmitir los datos enviados.

Básicamente hay dos formatos de datos:

  • Texto del mensaje
  • Datos binarios

El uso de uno u otro depende de muchos factores.

Datos como texto

Los datos de todo tipo son enviados como texto sobre todo en las aplicaciones basadas en la web. Texto significa que la información se transmite en forma de cadena de caracteres legible para las personas. Cada carácter ocupa un byte.

Datos como caracteres ASCII


La codificación se realizaba en el pasado según el estándar ASCII. La asignación de los caracteres a su valor numérico está definida en la tabla ASCII (American Standard Code for Information Interchange).

Tabla ASCII


La particularidad aquí era en el pasado que solo se utilizaban 7 de los 8 bits disponibles de un byte, lo que limitaba la cantidad de caracteres utilizable a 128 caracteres legibles.

Nuevos estándares como UTF8 han superado esa limitación permitiendo incluso utilizar dos bytes por carácter para los caracteres especiales.

Además de los contenidos de texto de libre formulación, en los protocolos industriales y de la web se han consolidado formatos de texto estandarizados:

  • XML
  • JSON

Vamos a explicar aquí ambos formatos brevemente.

XML - Extensible Markup Language
XML es uno de los denominados lenguajes de marcas. Los datos útiles propiamente dichos están anidados en tags o etiquetas. Las etiquetas son designaciones de los respectivos valores o contenidos. Las etiquetas van siempre entre cuñas, una para abrir y otra para cerrar.

Toda estructura XML comienza con una etiqueta inicial en la que, en general, se incluye la versión XML. También son posibles otros parámetros, por ejemplo la codificación de caracteres empleada:

<?xmlversion="1.0" encoding="UTF-8"?>

A la etiqueta de inicio le siguen los contenidos anidados en sus respectivas etiquetas. Todos los contenidos, a excepción de la etiqueta inicial, están anidados en etiquetas de abrir y cerrar que tienen el mismo nombre. La única diferencia es que el nombre de la etiqueta de cierre comienza con una barra diagonal ("/").

Ejemplo:

<inhalt>irgendetwas</inhalt>

XML permite también crear estructuras de etiquetas intercaladas en otras según jerarquías. A modo de ejemplo les mostramos aquí los valores medidos por un Web-Termo-higrobarómetro de W&T:

<?xml version="1.0" encoding="UTF-8"?>
<webio>
  <iostate>
    <sensor>
      <name>Temperatur</name>
      <number>0</number>
      <unit>°C</unit>
      <value>23.900000</value>
    </sensor>
    <sensor>
      <name>rel. Feuchte</name>
      <number>1</number>
      <unit>%</unit>
      <value>36</value>
    </sensor>
    <sensor>
      <name>Luftdruck</name>
      <number>2</number>
      <unit>hPa</unit>
      <value>992</value>
    </sensor>
  </iostate>
</webio>

Las sangrías no son obligatorias en XML pero sí habituales, pues mejoran claramente la legibilidad.

La ventaja de XML como formato de transmisión radica en que los contenidos pueden ser leídos fácilmente por humanos y por máquinas o por un programa de análisis.

La desventaja es el elevado volumen de datos bruto para poco contenido.

JSON - JavaScript Object Notation
La sintaxis, es decir la estructura de JSON, se basa en una parte de la sintaxis de JavaScript.

JSON utiliza parejas formadas por nombre y valor o contenido para la codificación de los datos.

Ejemplo: "contenido": "cualquiera"

También JSON permite crear estructuras de etiquetas intercaladas en otras según jerarquías. A modo de ejemplo les mostramos aquí de nuevo los valores medidos por un Web-Termo-higrobarómetro de W&T:

{
  "iostate":
  {
    "sensor":
    [
      {
        "name": "Temperatur",
        "number": 0,
        "unit": "°C",
        "value": 24.1
      },
      {
        "name": "rel. Feuchte",
        "number": 1,
        "unit": "%",
        "value": 35.9
      },
      {
        "name": "Luftdruck",
        "number": 2,
        "unit": "hPa",
        "value": 991.8
      }
    ]
  }
}

Tanto los nombres como los valores están anidados entre comillas altas. Una excepción son los valores numéricos, para los cuales se puede prescindir de las comillas.

Las parejas de nombre y valor están separadas por comas.

Las parejas de nombres y valores asociados tienen que estar agrupados con llaves.

Los grupos asociados pueden formar un array y están agrupados por corchetes separados por comas.

Encontrará una descripción detallada del formato JSON en https://www.json.org.

En cuanto al volumen de datos JSON es mucho más compacto que XML y, aún así perfectamente legible para humanos y máquinas.

Codificación Base64
Base64 es un procedimiento para codificar y descodificar datos binarios en una cadena de caracteres ASCII legibles. De ese modo es posible transportar contenidos binarios también con formatos de transmisión basados en texto.

El procedimiento es muy sencillo. Cada vez se transmite tres bytes del código binario bit a bit en cuatro números de 6 bit.

Codificación Base64

Cada grupo de cuatro números tiene asignado el carácter correspondiente al valor según la tabla siguiente. Así tres bytes binarios son sustituidos por cuatro Chars, es decir caracteres legibles.

Codificación Base64

Este proceso se repite hasta que estén codificados todos los bytes binarios. Si al final quedan bytes sueltos se agregan bytes de relleno para codificar los últimos tres bytes. Los bytes de relleno tienen el valor 0.

Para poder extraer de nuevo los bytes de relleno al descodificar, es decir al recuperar los bytes binarios originales, se añade al final de la cadena de caracteres codificada un signo "=" para cada byte de relleno.

Las aplicaciones más frecuentes de la codificación Base64 son las aplicaciones basadas en la web y el correo electrónico.

Datos binarios

Los datos son siempre una cantidad determinada de bytes.

Un protocolo estandarizado o la aplicación definen la finalidad y la posición de cada byte. Tras uno o varios bytes se esconde un valor, un array de valores, una cadena de caracteres o incluso la solicitud de una función.

En un envío de datos se pueden transmitir valores aislados. Pero, con frecuencia, se trabaja también con estructuras de datos en las que está definido el valor de cada posición de la cadena de bytes transmitida.

Aquí, como ejemplo, los datos para solicitar una función en Modbus. El Funtion Code se encuentra, por ejemplo, siempre en el 8. byte:

Estructura del paquete Modbus TCP

Otro procedimiento habitual para la estructura de datos binarios es TLV, que significa Type Length Value. Permite transmitir varios contenidos de tamaño arbitrario seguidos en un envío de datos.

Cada contenido sigue esta secuencia:

  • Type - ¿de qué tipo de contenido se trata?
    El tipo está determinado por la aplicación.
  • Length - ¿Cuántos bytes comprende el contenido?
  • Value - Bytes del valor o del contenido.

Si tras una secuencia hay otros bytes, se trata de la secuencia siguiente.

He aquí un sencillo ejemplo:

Estructura del paquete en TLV

Los byte transmitidos contienen dos valores: un valor de 16 bit (2 bytes) y un valor de 32 bit (4 bytes).

La ventaja de la transmisión de datos binaria es que su estructura de datos es muy compacta.


Fundamentos básicos sobre los protocolos industriales más habituales

Productos para aplicaciones industriales con protocolos estándar

^