我正在使用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 ++编写的代码的处理器。
非常感谢您花时间和精力帮助我。
此致
博
答案 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个月)。
你确定: