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:502Configuración de conexión
- Conéctese al punto final de arriba. Lea 10 registros comenzando en la dirección 0.
- Decodifica voltaje, corriente, potencia activa con signo y energía usando la siguiente tabla.
- 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ón | Valor |
|---|---|
| Anfitrión | simulator.iammeter.com |
| puerto tcp | 502 |
| Código de función | 03 o 04 |
| ID de unidad | Cualquier valor, repetido sin cambios. |
| Dirección de inicio | 0 |
| Recuento de registros | 10 |
Fase de decodificación A
| DIRECCIÓN | Tipo | Conversión |
|---|---|---|
| 0 | uint16 | ÷100V |
| 1 | uint16 | ÷100A |
| 2–3 | int32 | W |
| 4–5 | uint32 | ÷800 kWh (importación) |
| 6–7 | uint32 | ÷800 kWh (exportación) |
| 8 | int16 | ÷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 inicio | Recuento de registros | Contenido |
|---|---|---|
| 40000 | 2 | Sol: 0x5375, 0x6E53 |
| 40002 | 68 | Modelo común 1, longitud 66: IAMMETER / WEM3050T / Simulator-1.0 / 1AD9B537 |
| 40070 | 107 | Medidor entero modelo 203, longitud 105 |
| 40177 | 2 | Modelo 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.