Documentación

Leer datos a través de Modbus/TCP

Conéctese al punto final TCP compartido, decodifique registros y verifique lecturas de energía en vivo.

Documentación oficial de IAMMETER

Los dispositivos IAMMETER son compatibles con Modbus/TCP. Este simulador proporciona los registros heredados compartidos y el mapa SunSpec 203 de solo lectura que se describe a continuación. Consulte las guías oficiales para conocer la compatibilidad de modelos de dispositivos reales.

Objetivo y herramientas

Lea la fase A con un cliente Modbus o el siguiente ejemplo de biblioteca estándar de Python. No se requieren paquetes de Python.

Utilice un nombre de host y un puerto TCP, no una URL HTTPS ni una ruta de modelo. El punto final configurado se muestra a continuación.

Punto final Modbus

simulator.iammeter.com:502

Configuración de conexión

  1. Conéctese al punto final de arriba. Lea 10 registros comenzando en la dirección 0.
  2. Decodifica voltaje, corriente, potencia activa con signo y energía usando la siguiente tabla.
  3. Repita después de varios segundos: la energía crece mientras la dirección de potencia correspondiente está activa. Las lecturas no controlan el reloj de simulación.
ConfiguraciónValor
Anfitriónsimulator.iammeter.com
puerto tcp502
Código de función03 o 04
ID de unidadCualquier valor, repetido sin cambios.
Dirección de inicio0
Recuento de registros10

Fase de decodificación A

DIRECCIÓNTipoConversión
0uint16÷100V
1uint16÷100A
2–3int32W
4–5uint32÷800 kWh (importación)
6–7uint32÷800 kWh (exportación)
8int16÷1000PF

Ejemplo de Python 3

import socket, struct

HOST, PORT = "simulator.iammeter.com", 502

def receive_exact(sock, size):
    data = bytearray()
    while len(data) < size:
        chunk = sock.recv(size - len(data))
        if not chunk:
            raise ConnectionError("Connection closed")
        data.extend(chunk)
    return bytes(data)

# Transaction=1, protocol=0, length=6, Unit ID=1; FC03, address=0, count=10.
request = struct.pack(">HHHBBHH", 1, 0, 6, 1, 3, 0, 10)
with socket.create_connection((HOST, PORT), timeout=5) as sock:
    sock.sendall(request)
    transaction, protocol, length, unit = struct.unpack(">HHHB", receive_exact(sock, 7))
    if transaction != 1 or protocol != 0 or unit != 1 or not 2 <= length <= 254:
        raise ValueError("Invalid Modbus header")
    pdu = receive_exact(sock, length - 1)
    if pdu[:2] != bytes([3, 20]) or len(pdu) != 22:
        raise ValueError("Unexpected response: " + pdu.hex())
    raw = pdu[2:]
    print("Voltage V:", struct.unpack_from(">H", raw, 0)[0] / 100)
    print("Current A:", struct.unpack_from(">H", raw, 2)[0] / 100)
    print("Active W:", struct.unpack_from(">i", raw, 4)[0])
    print("Import kWh:", struct.unpack_from(">I", raw, 8)[0] / 800)
    print("Export kWh:", struct.unpack_from(">I", raw, 12)[0] / 800)
    print("PF:", struct.unpack_from(">H", raw, 16)[0] / 1000)

Resultados esperados

La fuente predeterminada Inverter and grid devuelve la generación A, la potencia de red con signo B y C con valor cero. B y C comienzan en las direcciones 10 y 20. Todos los valores de 32 bits usan primero la palabra alta, con bytes big-endian.

Todos los modelos utilizan el mapa de registro trifásico compartido: energía activa ÷800 kWh y energía reactiva ÷1000 kvarh. No aplicar el escalado físico monofásico ÷3200.

La selección de fuente del navegador y la configuración de Reactive/NEM no cambian este servicio compartido. Solo admite lecturas.

SunSpec 203: contador trifásico de sólo lectura

SunSpec utiliza el mismo punto final TCP que los registros heredados. Utilice la función 03 y direcciones de protocolo de base cero. El simulador siempre se identifica como WEM3050T, modelo 203, independientemente del modelo web seleccionado o ID de unidad.

Lea el bloque de medidores de 107 registros en 40070 en cada encuesta. Decodifica los valores como un número entero × 10^SF, leyendo cada valor y su factor de escala con signo en la misma respuesta. La energía está en Wh; El factor de potencia es un porcentaje. Las escalas pueden cambiar a medida que crecen los valores.

El punto final compartido expone únicamente el modelo 203. Las asignaciones de firmware 201 (WEM3080) y 202 (WEM2067) no se seleccionan a través de páginas del navegador o ID de unidad. No se proporcionan los modelos de flotador 211–214. Esta implementación no está certificada por SunSpec.

Dirección de inicioRecuento de registrosContenido
400002Sol: 0x5375, 0x6E53
4000268Modelo común 1, longitud 66: IAMMETER / WEM3050T / Simulator-1.0 / 1AD9B537
40070107Medidor entero modelo 203, longitud 105
401772Modelo final 0xFFFF, longitud 0

Solución de problemas

Tiempo de espera de conexión: verifique el puerto mostrado, el firewall y la accesibilidad de TCP. Una página HTTPS que funcione no prueba que se pueda acceder al puerto Modbus.

Valores inesperados: verifique el direccionamiento de base cero, la potencia con signo, el orden de las palabras y la escala. No envíe tramas Modbus RTU a este punto final TCP.

← Volver al simulador