首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从两个16位modbus寄存器中提取日期和时间

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

Stack Overflow用户
提问于 2015-07-31 12:17:33
回答 1查看 2.4K关注 0票数 0

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

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

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

我在时间上也有同样的问题。我的时间寄存器包含小数值55296。你能帮我从这个号码中提取时间吗?

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

非常感谢您的时间和努力来帮助我。

由衷地,

博扬。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-31 23:07:11

MS的日期/时间格式在这里描述:https://archive.is/2bVlz (曾经是格式/OFz,但已经消失了)

对于另一个问题中提到的17256美元的价值来说,这是有意义的,因为它转化为2013-11-08年。看看这里是怎么做的

代码语言:javascript
运行
复制
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个月)。

你确定:

  • 你看了正确的收银机?(更改仪器中的时间设置,并查看寄存器值发生了什么变化)
  • 你不把寄存器中的两个字节混在一起吗?
  • 时间设置正确吗?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31746015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档