我正在使用一个ElNet能量和功率计,通过Modbus协议与我的处理器通信。
有两个16位ElNet寄存器,它们以Win格式(寄存器85-86,这文档的第6页)分别包含有关日期和时间的信息。我能读到这两个寄存器。但是,我无法提取有关日期和时间的信息。
例如,日期寄存器包含今天日期(31/07/2015)的小数值17841。有没有人愿意解释我如何将17841转换成2015年7月31日?
我在时间上也有同样的问题。我的时间寄存器包含小数值55296。你能帮我从这个号码中提取时间吗?
这个线程解决了同样的问题:十六进制/十进制到modbus的日期和时间,但是,我不确定我是否理解在那里应用的提取算法。我的操作要点是用C或C++编写代码的处理器。
非常感谢您的时间和努力来帮助我。
由衷地,
博扬。
发布于 2015-07-31 23:07:11
MS的日期/时间格式在这里描述:https://archive.is/2bVlz (曾经是格式/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个月)。
你确定:
https://stackoverflow.com/questions/31746015
复制相似问题