Documentazione ufficiale IAMMETER
I dispositivi IAMMETER supportano Modbus/TCP. Questo simulatore fornisce i registri legacy condivisi e la mappa SunSpec 203 di sola lettura descritta di seguito. Consulta le guide ufficiali per la compatibilità dei modelli del dispositivo reale.
Obiettivo e strumenti
Leggi la fase A con un client Modbus o l'esempio della libreria standard Python di seguito. Non sono richiesti pacchetti Python.
Utilizza un nome host e una porta TCP, non un URL HTTPS o un percorso del modello. L'endpoint configurato è mostrato di seguito.
Punto finale Modbus
simulator.iammeter.com:502Impostazioni di connessione
- Connettiti all'endpoint sopra. Legge 10 registri a partire dall'indirizzo 0.
- Decodifica tensione, corrente, potenza attiva con segno ed energia utilizzando la tabella seguente.
- Ripetere dopo alcuni secondi: l'energia aumenta mentre la direzione di potenza corrispondente è attiva. Le letture non guidano l'orologio della simulazione.
| Collocamento | Valore |
|---|---|
| Ospite | simulator.iammeter.com |
| porta TCP | 502 |
| Codice funzione | 03 o 04 |
| Identificativo dell'unità | Qualsiasi valore, ripetuto invariato |
| Indirizzo iniziale | 0 |
| Conteggio dei registri | 10 |
Decodificare la fase A
| Indirizzo | Tipo | Conversione |
|---|---|---|
| 0 | uint16 | ÷100 V |
| 1 | uint16 | ÷100 A |
| 2–3 | int32 | W |
| 4–5 | uint32 | ÷800 kWh (importazione) |
| 6–7 | uint32 | ÷800 kWh (esportazione) |
| 8 | int16 | ÷1000PF |
Esempio Python3
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)Risultati attesi
La sorgente Inverter and grid predefinita restituisce la generazione A, la potenza di rete con segno B e C con valore zero. B e C iniziano agli indirizzi 10 e 20. Tutti i valori a 32 bit utilizzano prima la parola alta, con byte big-endian.
Tutti i modelli utilizzano la mappa di registro trifase condivisa: energia attiva ÷800 kWh ed energia reattiva ÷1000 kvarh. Non applicare la scala fisica monofase ÷3200.
La selezione della sorgente del browser e le impostazioni Reactive/NEM non modificano questo servizio condiviso. Supporta solo la lettura.
SunSpec 203: contatore trifase di sola lettura
SunSpec utilizza lo stesso endpoint TCP dei registri legacy. Utilizzare la funzione 03 e gli indirizzi di protocollo in base zero. Il simulatore si identifica sempre come WEM3050T, modello 203, indipendentemente dal modello web selezionato o dall'ID unità.
Leggi il blocco contatori da 107 registri su 40070 ad ogni sondaggio. Decodifica i valori come numero intero × 10^SF, leggendo ciascun valore e il relativo fattore di scala con segno nella stessa risposta. L'energia è in Wh; il fattore di potenza è una percentuale. Le scale possono cambiare man mano che i valori crescono.
L'endpoint condiviso espone solo il modello 203. Le mappature firmware 201 (WEM3080) e 202 (WEM2067) non vengono selezionate tramite le pagine del browser o gli ID unità. I modelli float 211–214 non sono forniti. Questa implementazione non è certificata SunSpec.
| Indirizzo iniziale | Conteggio dei registri | Contenuto |
|---|---|---|
| 40000 | 2 | SoleS: 0x5375, 0x6E53 |
| 40002 | 68 | Modello comune 1, lunghezza 66: IAMMETER / WEM3050T / simulator-1.0 / 1AD9B537 |
| 40070 | 107 | Misuratore intero modello 203, lunghezza 105 |
| 40177 | 2 | Modello finale 0xFFFF, lunghezza 0 |
Risoluzione dei problemi
Timeout connessione: controlla la porta visualizzata, il firewall e la raggiungibilità TCP. Una pagina HTTPS funzionante non dimostra che la porta Modbus sia raggiungibile.
Valori imprevisti: controllare l'indirizzamento in base zero, la potenza con segno, l'ordine delle parole e il ridimensionamento. Non inviare frame Modbus RTU a questo endpoint TCP.