试图解释从电能表返回的数据

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);

以上是关于试图解释从电能表返回的数据的主要内容,如果未能解决你的问题,请参考以下文章

nodejs试图从返回函数读取jpg数据流

试图从网格中读取完整的数据源只是返回视图?

如何从存储库访问和返回 AsyncTask 的结果?

Mongodb试图让选定的字段从聚合中返回

如何从 asp.net core webapi 获取数据到连接到数据库的 angular 11.0.0。我试图这样做,但它返回空记录

试图理解 LINQ [重复]