Combinación de dos registros de energía DWORD en valores REAL y LREAL en SIMATIC PCS 7

En los sistemas SIMATIC PCS 7 que leen totalizadores de energía eléctrica de medidores de potencia Sentron PAC (como el PAC3200 a través del bloque PAC32DRV), los valores de energía se transmiten a través de dos palabras dobles (double words) de 32 bits (DWORD alta y DWORD baja) que representan un entero de 64 bit. La conversión de estos registros en un valor REAL estándar de 32 bits en el diagrama CFC introduce un truncamiento de precisión una vez que la energía supera los 16.777.216 recuentos; los ingenieros resuelven esto calculando la energía escalada en bloques SCL personalizados o dividiendo los valores en MWh y kWh fraccionarios.

Índice de contenidos

Estructura de datos de los registros de energía en medidores Sentron PAC

Los medidores de potencia multifunción (como los Siemens Sentron PAC3200 y PAC4200) comunican la telemetría eléctrica mediante PROFIBUS DP o PROFINET utilizando el bloque controlador PAC32DRV:
* Los valores instantáneos (tensión, corriente, factor de potencia) se transmiten como valores estándar de coma flotante IEEE 754 de 32 bits (REAL).
* La energía activa total ($E_{ ext{act}}$) y la energía reactiva total ($E_{ ext{react}}$) se acumulan continuamente durante años de funcionamiento. Para evitar el desbordamiento (rollover), el medidor almacena la energía como un entero sin signo de 64 bits (medido en vatios-hora o décimas de vatio-hora).
* El bloque controlador entrega este valor como dos palabras de 32 bits independientes:
* DWORD_HIGH (Palabra alta): Los 32 bits más significativos ($2^{32} ext{ multiplicador}$).
* DWORD_LOW (Palabra baja): Los 32 bits menos significativos ($0 ext{ a } 4.294.967.295$).

La trampa de la precisión de coma flotante de 32 bits en controladores S7-400

En los entornos clásicos S7-300, S7-400 y WinCC, las operaciones matemáticas de coma flotante se estandarizan en REAL de 32 bits (precisión simple IEEE 754):
* Un REAL de 32 bits asigna 1 bit de signo, 8 bits de exponente y 23 bits de mantisa (lo que produce aproximadamente 7 dígitos decimales de precisión, o valores enteros de hasta $2^{24} = 16.777.216$).
* Si combina dos DWORD en un número de 64 bits y lo convierte directamente a un REAL de 32 bits:
* Tan pronto como la energía acumulada supera los $16.777.216 ext{ Wh}$ ($16,7 ext{ MWh}$), los bits menos significativos no se pueden representar en la mantisa de 23 bits.
* Añadir incrementos más pequeños (p. ej., $10 ext{ Wh}$) a un valor REAL grande da como resultado un truncamiento matemático ($16.777.216 + 10 = 16.777.216$).
* El totalizador se "congela" permanentemente en la lógica del controlador, aunque el medidor físico siga acumulando energía.

Método 1: Operaciones matemáticas directas con enteros de 64 bits y conversión REAL en SCL

Para combinar las dos DWORD en un bloque SCL sin desbordamiento:

FUNCTION_BLOCK FB_PAC_MergeEnergy
VAR_INPUT
    dwHigh : DWORD; // High 32 bits from PAC32DRV
    dwLow  : DWORD; // Low 32 bits from PAC32DRV
END_VAR
VAR_OUTPUT
    rEnergy_MWh : REAL; // Energy scaled in Megawatt-hours
    rEnergy_kWh : REAL; // Energy scaled in Kilowatt-hours
END_VAR
VAR_TEMP
    rHighPart : REAL;
    rLowPart  : REAL;
END_VAR

// Convert High DWORD: each count represents 2^32 = 4,294,967,296 Wh
// 2^32 Wh = 4,294,967.296 kWh = 4,294.967296 MWh
rHighPart := DWORD_TO_REAL(dwHigh) * 4294.967296;

// Convert Low DWORD: direct Wh to MWh (divide by 1,000,000)
rLowPart := DWORD_TO_REAL(dwLow) / 1000000.0;

// Combine into MWh to preserve precision across plant lifetime
rEnergy_MWh := rHighPart + rLowPart;
rEnergy_kWh := rEnergy_MWh * 1000.0;
END_FUNCTION_BLOCK

Al escalar los componentes alto y bajo directamente a megavatios-hora ($ ext{MWh}$) antes de sumarlos, los valores se mantienen muy dentro del rango de precisión de 7 dígitos de las variables REAL estándar.

Método 2: Particionamiento de doble variable (MWh enteros y fracción de kWh)

Para lograr una precisión sin pérdidas absolutas en las caras (faceplates) de WinCC y en los informes de contabilidad:
1. Mantenga dos variables de proceso separadas:
* Energy_MWh (DINT): Megavatios-hora enteros.
* Energy_Remainder_kWh (REAL): Energía restante dentro del MWh actual ($0,0 ext{ a } 999,9 ext{ kWh}$).
2. El bloque SCL calcula los vatios-hora totales utilizando aritmética modular, pasando los MWh completos como un número entero a WinCC y el resto fraccionario como un número en coma flotante.
3. En la cara de WinCC Graphics Designer, muestre la lectura combinada como:
$$ ext{Display} = ext{Energy_MWh} imes 1000 + ext{Energy_Remainder_kWh}$$
Esto conserva una precisión matemática del 100% en miles de millones de kilovatios-hora sin truncamiento de coma flotante.

Verificación

  • En el modo de prueba dinámica de CFC, fuerce valores de prueba en las entradas:
  • Establezca dwHigh = 16#00000000 y dwLow = 16#000F4240 ($1.000.000 ext{ Wh} = 1,0 ext{ MWh}$).
  • Verifique que rEnergy_MWh devuelva exactamente 1.0.
  • Pruebe la acumulación en el rango alto:
  • Establezca dwHigh = 16#00000001 y dwLow = 16#00000000 ($4.294.967.296 ext{ Wh}$).
  • Verifique que rEnergy_MWh devuelva 4294.967.
  • En el runtime de WinCC OS, verifique que la lectura de energía avance de manera constante y coincida con la pantalla LCD del panel frontal del Sentron PAC3200.

Limitaciones y precauciones operativas

  • Las CPU estándar S7-300 y S7-400 no admiten de forma nativa números de coma flotante de doble precisión IEEE 754 de 64 bits (LREAL) en los bloques de cálculo de CFC; LREAL es nativo para S7-1500 y la CPU 410 (firmware V8.2+).
  • Nunca utilice bloques de suma estándar (Add04) en CFC para sumar pequeños pulsos de energía a un acumulador REAL grande; utilice siempre bloques totalizadores dedicados (TotalL de la biblioteca APL).
  • Asegúrese de que el escalado del medidor (vatios-hora frente a kilovatios-hora o megavatios-hora) coincida con el ajuste de resolución de pulsos configurado en el menú de hardware del Sentron PAC.

Preguntas frecuentes del ingeniero

  • ¿Por qué el bloque PAC32DRV emite dos DWORD para la energía?
    Porque la energía acumulada a lo largo de los años supera el límite de los enteros de 32 bits ($4,29 imes 10^9$), lo que requiere un contador de 64 bits dividido en palabras alta y baja.
  • ¿Por qué se congela una variable REAL de 32 bits cuando la energía alcanza los 16,7 MWh?
    Un número en coma flotante de 32 bits tiene solo 23 bits de mantisa (la precisión máxima de enteros es 16.777.216); añadir números pequeños a valores por encima de este límite provoca su truncamiento.
  • ¿Puedo usar el bloque SCL en SIMATIC PCS 7 V8.0 SP2?
    Sí, SCL es un componente estándar de STEP 7 / PCS 7 V8.0 y se compila directamente en bloques de función (FB) ejecutables.
  • ¿Proporciona la biblioteca APL un bloque estándar para totalizar energía?
    Sí, el bloque TotalL (FB1886) de la APL proporciona una totalización trapezoidal y de pulsos de alta precisión con búferes internos de doble precisión.
  • ¿Cuál es el multiplicador para la DWORD alta cuando se mide en vatios-hora?
    Cada recuento en la DWORD alta representa $2^{32} = 4.294.967.296 ext{ vatios-hora}$ (o aproximadamente $4.294,967 ext{ MWh}$).
  • ¿Puede WinCC mostrar enteros de 64 bits directamente?
    Sí, WinCC Tag Management admite etiquetas de enteros sin signo de 64 bits (Unsigned 64-bit value).
  • ¿Admite la CPU 410-5H operaciones matemáticas en coma flotante de 64 bits (LREAL)?
    Sí, la CPU 410-5H con firmware V8.2 o superior admite instrucciones nativas LREAL de 64 bits en SCL.
  • ¿Cómo evito el desbordamiento de enteros al convertir DWORD a DINT?
    En S7, DWORD está orientado a patrones de bits; asegúrese de que el valor no supere los $2.147.483.647$ cuando lo trate como un DINT con signo, o manéjelo como un real sin signo.
  • ¿Qué ocurre si se sustituye el medidor Sentron PAC?
    El nuevo medidor comienza a contar desde cero; la lógica de compensación del totalizador en el AS puede sumar la línea base histórica para mantener la continuidad de la planta.
  • ¿Puedo registrar la lectura de energía de 64 bits en Process Historian?
    Sí, archive la etiqueta real MWh escalada o la etiqueta entera de 64 bits en WinCC Tag Logging, la cual se exporta sin problemas a Process Historian.

Referencias técnicas

  • Manual del medidor multifunción Siemens Sentron PAC3200
  • Manual de funciones de la biblioteca avanzada de procesos (APL) de SIMATIC PCS 7 (TotalL / FB1886)
  • Entrada de Siemens Industry Online Support: Conversión de energía de 64 bits de Sentron PAC (Entry ID 298998)
  • Manual de programación SIMATIC S7-SCL V5.6 para S7-300/400

Artículos relacionados

Etiquetas relacionadas

PCS 7, Sentron, PAC3200, PAC32DRV, DWORD, Totalizador de energía, SCL, Precisión flotante, REAL, LREAL

20 respuestas