Officiële IAMMETER-documentatie
IAMMETER-apparaten ondersteunen Modbus/TCP. Deze simulator biedt de gedeelde oudere registers en de alleen-lezen SunSpec 203-kaart die hieronder wordt beschreven. Raadpleeg de officiële handleidingen voor compatibiliteit met echte apparaatmodellen.
Doel en hulpmiddelen
Lees fase A met een Modbus-client of het onderstaande Python-standaardbibliotheekvoorbeeld. Er zijn geen Python-pakketten vereist.
Gebruik een hostnaam en TCP-poort, geen HTTPS-URL of modelpad. Het geconfigureerde eindpunt wordt hieronder weergegeven.
Modbus-eindpunt
simulator.iammeter.com:502Verbindingsinstellingen
- Maak verbinding met het bovenstaande eindpunt. Lees 10 registers vanaf adres 0.
- Decodeer spanning, stroom, ondertekend actief vermogen en energie met behulp van de onderstaande tabel.
- Herhaal dit na enkele seconden: de energie groeit terwijl de overeenkomstige krachtrichting actief is. Metingen sturen de simulatieklok niet aan.
| Instelling | Waarde |
|---|---|
| Gastheer | simulator.iammeter.com |
| TCP-poort | 502 |
| Functiecode | 03 of 04 |
| Eenheids-ID | Elke waarde, onveranderd herhaald |
| Startadres | 0 |
| Aantal registers | 10 |
Decodeer fase A
| Adres | Type | Conversie |
|---|---|---|
| 0 | uint16 | ÷100 V |
| 1 | uint16 | ÷100 A |
| 2–3 | int32 | W |
| 4–5 | uint32 | 800 kWh (import) |
| 6–7 | uint32 | 800 kWh (export) |
| 8 | int16 | ÷1000 PF |
Python 3 voorbeeld
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)Verwachte resultaten
De standaard Inverter and grid-bron retourneert A-generatie, B-getekend netvermogen en nulwaarde C. B en C beginnen op adressen 10 en 20. Alle 32-bits waarden gebruiken eerst het hoge woord, met big-endian bytes.
Alle modellen gebruiken de gedeelde driefasige registerkaart: actieve energie 800 kWh en reactieve energie 1000 kvarh. Pas niet de fysieke enkelfasige schaling van 3200 toe.
Browserbronselectie en Reactive/NEM-instellingen veranderen deze gedeelde service niet. Het ondersteunt alleen-lezen.
SunSpec 203: alleen-lezen driefasige meter
SunSpec gebruikt hetzelfde TCP-eindpunt als de oudere registers. Gebruik functie 03 en op nul gebaseerde protocoladressen. De simulator identificeert zich altijd als WEM3050T, model 203, ongeacht het geselecteerde webmodel of Unit ID.
Lees bij elke peiling het meterblok met 107 registers op 40070. Decodeer waarden als geheel getal × 10^SF, waarbij elke waarde en de schaalfactor met teken in hetzelfde antwoord worden gelezen. Energie is in Wh; De arbeidsfactor is een percentage. Schalen kunnen veranderen naarmate waarden groeien.
Het gedeelde eindpunt stelt alleen model 203 bloot. Firmwaretoewijzingen 201 (WEM3080) en 202 (WEM2067) worden niet geselecteerd via browserpagina's of eenheids-ID's. Vlottermodellen 211–214 worden niet meegeleverd. Deze implementatie is niet SunSpec-gecertificeerd.
| Startadres | Aantal registers | Inhoud |
|---|---|---|
| 40000 | 2 | ZonS: 0x5375, 0x6E53 |
| 40002 | 68 | Algemeen model 1, lengte 66: IAMMETER / WEM3050T / simulator-1.0 / 1AD9B537 |
| 40070 | 107 | Geheel meter model 203, lengte 105 |
| 40177 | 2 | Eindmodel 0xFFFF, lengte 0 |
Problemen oplossen
Verbindingstime-out: controleer de weergegeven poort, firewall en TCP-bereikbaarheid. Een werkende HTTPS-pagina bewijst niet dat de Modbus-poort bereikbaar is.
Onverwachte waarden: controleer op nul gebaseerde adressering, tekenkracht, woordvolgorde en schaling. Stuur geen Modbus RTU-frames naar dit TCP-eindpunt.