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-байтовый адрес считается физическим адресом четырехбайтового адреса.
Южная Каролина