1

我有一个现有的 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

为什么 4 大小的服务器地址的 22 值与当前通信中的位置不同?处理这个问题的正确方法是什么?

霍克萨

4

1 回答 1

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 字节地址被假定为 4 字节地址的物理地址。

SC

于 2017-08-22T09:59:23.200 回答