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