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:502Configurações de conexão
- Conecte-se ao endpoint acima. Leia 10 registros começando no endereço 0.
- Decodifique tensão, corrente, potência ativa assinada e energia usando a tabela abaixo.
- 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.
| Contexto | Valor |
|---|---|
| Hospedar | simulator.iammeter.com |
| Porta TCP | 502 |
| Código de função | 03 ou 04 |
| ID da unidade | Qualquer valor, ecoado inalterado |
| Endereço inicial | 0 |
| Contagem de registros | 10 |
Fase de decodificação A
| Endereço | Tipo | Conversão |
|---|---|---|
| 0 | uint16 | ÷100V |
| 1 | uint16 | ÷100A |
| 2–3 | int32 | W |
| 4–5 | uint32 | ÷800 kWh (importação) |
| 6–7 | uint32 | ÷800 kWh (exportação) |
| 8 | int16 | ÷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 inicial | Contagem de registros | Conteúdo |
|---|---|---|
| 40.000 | 2 | SolS: 0x5375, 0x6E53 |
| 40002 | 68 | Modelo comum 1, comprimento 66: IAMMETER / WEM3050T / simulador-1.0 / 1AD9B537 |
| 40070 | 107 | Medidor inteiro modelo 203, comprimento 105 |
| 40177 | 2 | Modelo 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.