试图解释从电能表返回的数据
Posted
技术标签:
【中文标题】试图解释从电能表返回的数据【英文标题】:Trying to interpret returned data from energy meter 【发布时间】:2021-12-22 04:01:32 【问题描述】:我正在尝试使用 Modbus RTU 读取功率计,型号为 Shark200。我已经能够阅读它,但我无法解释返回的数据。如何解释日期和值字段?
返回数据示例:
0; 2; 6144; 3840; 17239; -26413; 17267; -27130; 17250; 31448; 16765; 23237; 16612; -9774; 16571; -17050; 2; 6144; 7680; 17237; -1267; 17267; 2169; 17249; -21791; 16745; 27777; 16681; -27502; 16550; 23033; 2; 6144; 11520; 17240; -224; 17267; -919; 17250; -1291; 16771; 13918; 16607; 26412; 16547; 23206; 2; 6145; 11520; 17238; -28002; 17267; -16499; 17250; 14486; 16771; 1838; 16612; 22630; 16541; 28452; 2; 6146; 0; 17237; -15796; 17266; -2358; 17249; 26544; 16917; 963; 16889; 15450; 16858; -447; 2; 6146; 3840; 17238; 22871; 17267; -8911; 17250; 11932; 16710; -25045; 16676; 32575; 16489; 16235; 2; 6146; 7680; 17239; -7892; 17268; 25489; 17250; -5705; 16771; -15073; 16674; 7403; 16544; -6094; 2; 6146; 11520; 17241; 13096; 17268; -12353; 17251; 29292; 16774; -296; 16676; 18266; 16540; -14520; 2; 6147; 0; 0
手册上写着:
【问题讨论】:
【参考方案1】:我相信我的阅读没有错误。因为即使在读取其他有时间戳的地址时,返回的数据也具有相同的格式。阅读手册,我发现了这一点,但我不知道这是什么意思:
【讨论】:
【参考方案2】:您可以阅读多个日志。要读取所需的日志,您需要在位置 0xC34F 或 DEC 49999 处写入日志号。
我要写的代码:
c.WriteSingleRegister(49999, 640);
日志编号:
0 - System Events; 1 - Alarms; 2 - Historical Log 1; 3 - Historical Log 2; 4 - Historical Log 3
【讨论】:
【参考方案3】:基本上每个字节代表时间戳中的一个十六进制值
看例子
0x060717101600
意味着阅读:
YYMMDDHHMMSS 为 HEX 格式,所以
YY = 06h = 06dec or (2006)
MM = 07h = 07dec (July)
DD = 17h = 23dec
HH = 10h = 16dec
MM = 16h = 22dec
SS = 00h = 00dec
Modbus 协议使用 16 位寄存器,因此您将收到 6 个字节(3 个寄存器)的时间戳,因此您的寄存器如下所示:
YYMM = 0607h
DDHH = 1710h
MMSS = 1600h
编辑:看起来时间是以 24 小时格式表示的
【讨论】:
是的,值是十六进制的。但是试图读取从我的读取返回的数据,我无法提取日期。在手册中它说第一条记录是状态,第二条记录是索引。接下来是日期。所以它会是:0x6144384017239 YY = 06 = 2006 MM = 14 = 20 月? 我认为在您的示例中,值是 DEC 格式。所以 6144 = 1800h 和 3840 = F00h 和 17239 = 4357h 如何将1800h、F00h、4357h转换为可读日期? 2018 年第 00 个月? 您确定以正确的顺序和格式读取寄存器吗?我认为您收到的数据格式不正确。 我想是的。在手册中它说要读取位置 0xC351 和 125 寄存器。将 0xC351 十六进制转换为 DEC 将是位置 50001。我读取位置的代码:int[] final = conn.ReadHoldingRegisters(50001, 125);以上是关于试图解释从电能表返回的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何从 asp.net core webapi 获取数据到连接到数据库的 angular 11.0.0。我试图这样做,但它返回空记录