从两个16位modbus寄存器

时间:2015-07-31 12:17:34

标签: date time modbus

我正在使用ElNet能量和功率计,通过Modbus RTU协议与我的处理器通信。

有两个16位ElNet寄存器,包含有关Win格式的日期和时间(单独)的信息(this文档的第6页,寄存器85-86)。我能读这两个寄存器。但是,我无法提取有关日期和时间的信息。

例如,日期寄存器包含今天日期(2015年7月31日)的十进制值17841。有没有人愿意解释我如何将17841转换成31/07/2015?

我和时间有同样的问题。我的时间寄存器包含一个十进制值55296.你能帮我从这个数字中提取时间吗?

此主题解决了同样的问题: HEX/Decimal to date and time from modbus 但是,我不确定我理解那里应用的提取算法。我的操作点是带有用C或C ++编写的代码的处理器。

非常感谢您花时间和精力帮助我。

此致

1 个答案:

答案 0 :(得分:1)

此处描述了MS-DOS日期/时间格式:http://proger.i-forge.net/MS-DOS_date_and_time_format/OFz

对于另一个问题中提到的17256值,它有意义,因为它转换为2013-11-08。看这里怎么做:

Register bit description: 0bYYYYYYYMMMMDDDDD

Registervalue: 17256 0b0100001101101000

Yearmask: 0b1111111000000000
Yearpart: 0b0100001000000000
Yearpart rightshifted 9 steps: 0b0000000000100001 = 33 years after 1980

Monthmask: 0b0000000111100000
Monthpart: 0b0000000101100000
Monthpart rightshifted 5 steps: 0b0000000000001011 = 11

Daymask: 0b0000000000011111
Daypart: 0b0000000000001000 = 8

不幸的是,您的注册值17841没有意义,因为它转换为2014-13-17(即第13个月)。

你确定:

  • 您是否阅读了正确的注册表? (更改仪器中的时间设置,并查看寄存器值会发生什么)
  • 你不要混淆寄存器中的两个字节吗?
  • 时间设置是否正确?
相关问题