从两个16位modbus寄存器中提取日期和时间



我使用的是ElNet能量计,它通过Modbus RTU协议与我的处理器通信。

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

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

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

这个线程解决了同样的问题:十六进制/十进制日期和时间从modbus然而,我不确定我理解那里应用的提取算法。我的操作点是用C或c++编写代码的处理器。

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

真诚

Bojan .

MS-DOS日期/时间格式描述如下:https://archive.is/2bVlz(原来是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个月)。

你确定:

    你读的寄存器正确吗?(改变仪器中的时间设置,看看寄存器值发生了什么变化)
  • 你不会混淆寄存器中的两个字节吗?
  • 时间设置是否正确?

最新更新