Gurux DLMS коммуникационная адресация

У меня есть система учета электроэнергии Actaris, и у меня мало информации об этом. Я должен написать новую программу, чтобы заменить текущую, которая читает данные с метра. Я пытаюсь прослушать текущее соединение через последовательный порт и вижу, что запрос SNRM выглядит следующим образом: 7E A0 0A 00 22 00 CB 03 93 69 CE 7E

Я обнаружил, что адрес клиента равен 1, адрес логического устройства - 17, а физический адрес счетчика - 101.

Я хотел бы использовать GURUX GXDLMSClient для чтения данных со счетчиков, но если я установлю параметры следующим образом:

`GXDLMSClient client = new GXDLMSClient();
 client.UseLogicalNameReferencing = true;
 client.InterfaceType = InterfaceType.HDLC;
 client.ClientAddress = 1;
 client.ServerAddress = GXDLMSClient.GetServerAddress(17, 101);
 client.ServerAddressSize = 4;`

Я отправляю запрос SNRM следующим образом: 7E A0 0A 00 00 22 CB 03 93 55 0E 7E

Почему значение 22 адреса сервера 4 размера находится в другом положении, чем в текущем сообщении? Как правильно решить эту проблему?

HorCsa

1 ответ

Никогда не использовал библиотеки Gurux, но искал @ источники:

public static int GetServerAddress(int logicalAddress,
                                   int physicalAddreess)
{
    return GetServerAddress(logicalAddress, physicalAddress, 0);
}


public static int GetServerAddress(int logicalAddress,
                                   int physicalAddreess,
                                   int addressSize)
{
/* ... packs it with less bytes as possible */
}

Таким образом, в вашем случае создается адрес из двух байтов.

Позже вы даете указание упаковывать как 4-байтовый адрес. Таким образом, ранее созданный вами 2-байтовый адрес считается физическим адресом четырехбайтового адреса.

Южная Каролина

Другие вопросы по тегам