Documentação

Ler dados via Modbus/TCP

Conecte-se ao endpoint TCP compartilhado, decodifique registros e verifique leituras de energia em tempo real.

Documentação oficial do IAMMETER

Dispositivos IAMMETER suportam Modbus/TCP. Este simulador fornece os registros legados compartilhados e o mapa SunSpec 203 somente leitura descrito abaixo. Consulte os guias oficiais para compatibilidade com modelos de dispositivos reais.

Objetivo e ferramentas

Leia a fase A com um cliente Modbus ou o exemplo da biblioteca padrão Python abaixo. Nenhum pacote Python é necessário.

Use um nome de host e uma porta TCP, não uma URL HTTPS ou um caminho de modelo. O endpoint configurado é mostrado abaixo.

Ponto final Modbus

simulator.iammeter.com:502

Configurações de conexão

  1. Conecte-se ao endpoint acima. Leia 10 registros começando no endereço 0.
  2. Decodifique tensão, corrente, potência ativa assinada e energia usando a tabela abaixo.
  3. Repita após alguns segundos: a energia aumenta enquanto a direção de potência correspondente está ativa. As leituras não controlam o relógio da simulação.
ContextoValor
Hospedarsimulator.iammeter.com
Porta TCP502
Código de função03 ou 04
ID da unidadeQualquer valor, ecoado inalterado
Endereço inicial0
Contagem de registros10

Fase de decodificação A

EndereçoTipoConversão
0uint16÷100V
1uint16÷100A
2–3int32W
4–5uint32÷800 kWh (importação)
6–7uint32÷800 kWh (exportação)
8int16÷1000PF

Exemplo 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

A fonte Inverter and grid padrão retorna geração A, potência de rede assinada B e C com valor zero. B e C começam nos endereços 10 e 20. Todos os valores de 32 bits usam a palavra alta primeiro, com bytes big-endian.

Todos os modelos utilizam o mapa de registro trifásico compartilhado: energia ativa ÷800 kWh e energia reativa ÷1000 kvarh. Não aplique a escala física monofásica ÷3200.

A seleção de origem do navegador e as configurações de Reactive/NEM não alteram este serviço compartilhado. Suporta apenas leituras.

SunSpec 203: medidor trifásico somente leitura

SunSpec usa o mesmo endpoint TCP que os registros legados. Use a função 03 e endereços de protocolo baseados em zero. O simulador sempre se identifica como WEM3050T, modelo 203, independentemente do modelo de teia ou ID da unidade selecionado.

Leia o bloco de medidores de 107 registros em 40070 em cada pesquisa. Decodifique os valores como número inteiro × 10^SF, lendo cada valor e seu fator de escala assinado na mesma resposta. A energia está em Wh; o fator de potência é uma porcentagem. As escalas podem mudar à medida que os valores aumentam.

O endpoint compartilhado expõe apenas o modelo 203. Os mapeamentos de firmware 201 (WEM3080) e 202 (WEM2067) não são selecionados por meio de páginas do navegador ou IDs de unidade. Os modelos flutuantes 211–214 não são fornecidos. Esta implementação não é certificada pelo SunSpec.

Endereço inicialContagem de registrosConteúdo
40.0002SolS: 0x5375, 0x6E53
4000268Modelo comum 1, comprimento 66: IAMMETER / WEM3050T / simulador-1.0 / 1AD9B537
40070107Medidor inteiro modelo 203, comprimento 105
401772Modelo final 0xFFFF, comprimento 0

Solução de problemas

Tempo limite de conexão: verifique a porta exibida, o firewall e a acessibilidade do TCP. Uma página HTTPS funcional não prova que a porta Modbus está acessível.

Valores inesperados: verifique o endereçamento baseado em zero, potência do sinal, ordem das palavras e escala. Não envie quadros Modbus RTU para este endpoint TCP.

← Voltar ao simulador