Gurux DLMS通信寻址

时间:2017-08-09 06:26:43

标签: addressing 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

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

HorCsa

1 个答案:

答案 0 :(得分: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字节地址被假定为四字节地址的物理地址。

SC