Comprensión de los desplazamientos de bytes en bloques de datos y tipos de datos REAL en SIMATIC S7

Un desplazamiento (offset) en un Bloque de datos (DB) es la dirección numérica de byte inicial de una variable dentro de la memoria del controlador. En los controladores SIMATIC S7-300, S7-400 y S7-410, los datos se direccionan por bytes comenzando en el desplazamiento 0.0. Un tipo de dato REAL ocupa exactamente 4 bytes contiguos (32 bits) formateados de acuerdo con los estándares de coma flotante IEEE 754 (por ejemplo, DBD 4 abarca los bytes 4, 5, 6 y 7). Comprender los desplazamientos de bytes es fundamental al configurar controladores de comunicación (Modbus, OPC, BSEND/BRCV) que requieren punteros de bytes explícitos para leer y escribir valores de coma flotante.

Índice de contenidos

Principios de direccionamiento de memoria y desplazamiento de bytes en SIMATIC S7

En los controladores lógicos programables SIMATIC S7 (S7-300, S7-400 y S7-410), los Bloques de datos (DBs) son regiones de almacenamiento de memoria estructuradas. A diferencia de los lenguajes de programación de alto nivel que abstraen las ubicaciones de memoria detrás de nombres de variables, la arquitectura subyacente de la CPU S7 se basa estrictamente en desplazamientos de bytes de memoria física:
* Cada Bloque de datos comienza en la dirección de byte 0.0 (DBB 0).
* Un desplazamiento (offset) especifica la distancia exacta en bytes (y bits para valores booleanos) desde el primer byte del bloque de datos hasta el inicio de una variable específica.
* Por ejemplo, la designación DB10.DBD 8 indica que los datos comienzan en el desplazamiento de byte 8 del Bloque de datos 10 y abarcan una palabra doble (Double Word: 4 bytes: bytes 8, 9, 10 y 11).

Longitudes de datos y alineación de memoria de los tipos de datos S7

Los diferentes tipos de datos requieren cantidades específicas de memoria y aplican reglas de alineación en los sistemas S7 clásicos:

Tipo de datosLongitud en bitsLongitud en bytesFormato de dirección S7Dirección de ejemploFormato IEEE 754BOOL1 bit1/8 de byteDBX [Byte].[Bit]DB1.DBX 0.0N/ABYTE / CHAR8 bits1 byteDBB [Byte]DB1.DBB 1N/AINT / WORD16 bits2 bytesDBW [Byte]DB1.DBW 2N/ADINT / DWORD32 bits4 bytesDBD [Byte]DB1.DBD 4N/AREAL32 bits4 bytesDBD [Byte]DB1.DBD 81 bit de signo, 8 exp, 23 mantisa

Reglas de alineación de palabras (Word Alignment)

En la arquitectura de memoria de SIMATIC S7-300/400:
* Las variables de 16 bits (INT, WORD) y de 32 bits (DINT, DWORD, REAL) deben estar alineadas en límites de bytes pares (desplazamientos 0, 2, 4, 6, 8...).
* Si una variable booleana (DBX 0.0) es seguida inmediatamente por una variable entera o real, el compilador inserta un byte de relleno interno para que el siguiente entero comience en el desplazamiento de byte 2.0 (o el real en 2.0 o 4.0).

Aplicación práctica: Punteros de comunicación y mapeo Modbus

El concepto de "desplazamiento en el DB donde se encuentra el real" es esencial al configurar controladores de comunicación industrial:
1. Mapeo Modbus TCP / RTU:
* Al utilizar el bloque MB_REDCL o MBTCP_Client, la lista de trabajos (JOBLST) requiere especificar el puntero de destino.
* Si realiza una lectura de un medidor de potencia de coma flotante de 32 bits, debe configurar el trabajo para escribir en un desplazamiento de byte específico (por ejemplo, DB_Offset := 12). El bloque escribe el valor flotante de 4 bytes en los bytes 12, 13, 14 y 15 del DB de destino.
2. Construcción de punteros ANY en SCL:
* Al configurar transferencias de bloques mediante BLKMOV (SFC 20) o comunicación S7 (BSEND / BRCV), un puntero ANY de S7 codifica el desplazamiento de byte inicial como un puntero de 24 bits en los bytes 6 a 9 (por ejemplo, P#DB10.DBX 8.0 BYTE 4).
3. Variables OPC y SCADA:
* Los servidores OPC DA heredados que direccionan controladores S7 directamente, direccionan la memoria mediante desplazamientos de bytes: S7:[Connection]DB10,REAL8.

Verificación

  • En SIMATIC Manager, abra cualquier Bloque de datos de usuario en el Editor KOP/FUP/AWL (LAD/FBD/STL).
  • Cambie a Vista de declaración (o vista tabular).
  • Inspeccione la columna de la izquierda llamada Dirección (Address / Offset).
  • Observe que la primera variable comienza en 0.0, y el desplazamiento de cada variable posterior se incrementa exactamente según el tamaño en bytes de la variable precedente.
  • Coloque la CPU en modo RUN y monitorice el DB en línea. Confirme que los valores de coma flotante (por ejemplo, 23.5 o 101.3) se muestran correctamente como números REAL en sus desplazamientos asignados.

Limitaciones y precauciones operativas

  • Modificar las declaraciones de variables en un DB existente desplaza los offsets de bytes de todas las variables subsiguientes. Esto puede corromper los mapas Modbus externos, las asociaciones de variables de SCADA y la comunicación HMI si las variables se direccionan por desplazamientos absolutos en lugar de nombres simbólicos.
  • Sea vigilante con respecto al orden de bytes (Endianness): Los controladores Siemens S7 utilizan el orden de bytes Big-Endian (el byte más significativo en la dirección más baja). Muchos dispositivos Modbus de terceros utilizan formatos Little-Endian o con inversión de palabras (word-swapped), lo que requiere intercambiar la palabra alta/baja antes de interpretar los números flotantes.

Preguntas frecuentes del ingeniero

  • ¿Puede una variable REAL comenzar en un desplazamiento de byte impar (por ejemplo, DBD 5)?
    No. En la arquitectura S7-300 y S7-400, las variables de 32 bits deben estar alineadas en desplazamientos de bytes pares (por ejemplo, DBD 4, DBD 6, DBD 8).
  • ¿Cómo intercambio las palabras si un REAL de Modbus muestra un número incorrecto?
    Utilice la instrucción estándar de SCL ROR / ROL o intercambie las palabras usando la instrucción SWAP en AWL (STL) o CFC para realinear el orden de los bytes.
  • ¿Por qué el desplazamiento del DB muestra '0.0' en lugar de simplemente '0'?
    El .0 indica el desplazamiento de bit. Para las variables de tipo byte, palabra y real, el desplazamiento de bit siempre es .0. Solo las marcas booleanas utilizan desplazamientos de bit del .1 al .7.

Referencias técnicas

  • SIMATIC STEP 7 V5.6 Manual de programación de la lista de instrucciones (STL/AWL) para S7-300 y S7-400.
  • Norma IEEE 754-2008 para aritmética de coma flotante.
  • Siemens Industry Online Support Entry ID 109801081: Estructura del puntero ANY S7 y direccionamiento de bloques de datos.

Artículos relacionados

Etiquetas relacionadas

Step 7, S7-400, S7-300, Data Blocks, Byte Offset, REAL, Memory Management, Modbus

20 respuestas