我使用的是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个月)。
你确定:
- 你读的寄存器正确吗?(改变仪器中的时间设置,看看寄存器值发生了什么变化)
- 你不会混淆寄存器中的两个字节吗?
- 时间设置是否正确?