Documentation

Lire les données via Modbus/TCP

Connectez-vous au point de terminaison TCP partagé, décodez les registres et vérifiez les relevés d'énergie en direct.

Documentation officielle IAMMETER

Les appareils IAMMETER prennent en charge Modbus/TCP. Ce simulateur fournit les registres hérités partagés et la carte SunSpec 203 en lecture seule décrite ci-dessous. Consultez les guides officiels pour connaître la compatibilité des modèles d’appareils réels.

Objectif et outils

Lisez la phase A avec un client Modbus ou l'exemple de bibliothèque standard Python ci-dessous. Aucun package Python n'est requis.

Utilisez un nom d'hôte et un port TCP, et non une URL HTTPS ou un chemin de modèle. Le point de terminaison configuré est affiché ci-dessous.

Point de terminaison Modbus

simulator.iammeter.com:502

Paramètres de connexion

  1. Connectez-vous au point de terminaison ci-dessus. Lire 10 registres en commençant à l'adresse 0.
  2. Décodez la tension, le courant, la puissance active signée et l'énergie à l'aide du tableau ci-dessous.
  3. Répétez après quelques secondes : l'énergie augmente tandis que la direction de puissance correspondante est active. Les lectures ne pilotent pas l’horloge de simulation.
ParamètreValeur
Hôtesimulator.iammeter.com
Port TCP502
Code de fonction03 ou 04
ID de l'unitéN'importe quelle valeur, renvoyée inchangée
Adresse de départ0
Nombre de registres10

Décoder la phase A

AdresseTypeConversion
0uint16÷100 V
1uint16÷100A
2–3int32W
4–5uint32÷800 kWh (importation)
6–7uint32÷800 kWh (exportation)
8int16÷1000 PF

Exemple 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)

Résultats attendus

La source Inverter and grid par défaut renvoie la génération A, la puissance du réseau signée B et la valeur C de zéro. B et C commencent aux adresses 10 et 20. Toutes les valeurs 32 bits utilisent d'abord le mot haut, avec des octets gros-boutiste.

Tous les modèles utilisent la carte de registre triphasée partagée : énergie active ÷800 kWh et énergie réactive ÷1000 kvarh. Ne pas appliquer la mise à l’échelle physique monophasée ÷3200.

La sélection de la source du navigateur et les paramètres Reactive/NEM ne modifient pas ce service partagé. Il prend en charge uniquement les lectures.

SunSpec 203 : compteur triphasé en lecture seule

SunSpec utilise le même point de terminaison TCP que les registres hérités. Utilisez la fonction 03 et les adresses de protocole de base zéro. Le simulateur s'identifie toujours comme WEM3050T, modèle 203, quel que soit le modèle Web sélectionné ou l'ID d'unité.

Lisez le bloc de compteurs de 107 registres à 40070 à chaque sondage. Décodez les valeurs sous forme d'entier × 10^SF, en lisant chaque valeur et son facteur d'échelle signé dans la même réponse. L'énergie est en Wh ; le facteur de puissance est un pourcentage. Les échelles peuvent changer à mesure que les valeurs augmentent.

Le point de terminaison partagé expose uniquement le modèle 203. Les mappages de micrologiciel 201 (WEM3080) et 202 (WEM2067) ne sont pas sélectionnés via les pages du navigateur ou les ID d'unité. Les modèles à flotteur 211 à 214 ne sont pas fournis. Cette implémentation n'est pas certifiée SunSpec.

Adresse de départNombre de registresContenu
400002SoleilS : 0x5375, 0x6E53
4000268Modèle commun 1, longueur 66 : IAMMETER / WEM3050T / simulateur-1.0 / 1AD9B537
40070107Compteur entier modèle 203, longueur 105
401772Modèle final 0xFFFF, longueur 0

Dépannage

Délai de connexion : vérifiez le port affiché, le pare-feu et l'accessibilité TCP. Une page HTTPS fonctionnelle ne prouve pas que le port Modbus est accessible.

Valeurs inattendues : vérifiez l'adressage de base zéro, la puissance signée, l'ordre des mots et la mise à l'échelle. N'envoyez pas de trames Modbus RTU à ce point de terminaison TCP.

← Retour au simulateur