avatar
b*i
3
我们给客户开发一个嵌入式硬件PLC,这个硬件里面有微处理器,可以用一个我们开发
的软件通过TCP/IP来配置,然后客户自己用Modbus来配置和读取信息。客户发现一个问
题,他们通过Modbus直接配置时间后,通过我们的软件读取,时间不一致。通过我们软
件设置后,Modbus里面显示的小时不对。
配置嵌入式的时间有两种,一种是软件启动后,自动先把嵌入式的这个UTC时间读入,
显示成本地时间。当在软件界面点击Sync,现在软件就把系统的时间(UTC)传给嵌入式。
第二种是用户提出的,在Modbus寄存器里面增加两组,一组来显示年/月/日/时/分/秒
,一种来设置年/月/日/时/分/秒,然后用一个寄存器作为出发,把设置的时间写入嵌
入式系统。这里,用户会把当地时间输入。
经过我分析发现,这个嵌入式系统没有考虑时区。软件通过Windows读时间后,向硬件
发送的是UTC的时间。客户在Modbus看到的也是UTC的时间转换成年/月/日/时/分/秒(
每个一个Modbus寄存器),和当地时间有差别。但是,用户需要的显示当地时间。
我们内部讨论,我的观点是,嵌入式需要加入时区,和夏令时因素,PC软件和嵌入式通
过传送UTC时间是正确的。有人认为,问题在PC软件,要软件做修改。大家怎么看?
avatar
a9
4
跟是不是嵌入式没关系
你只要知道 本地时间与utc不是一一对应的关系,所以存、传时间如果使用utc,就必
须带时区一起传 就行了

式。

【在 b***i 的大作中提到】
: 我们给客户开发一个嵌入式硬件PLC,这个硬件里面有微处理器,可以用一个我们开发
: 的软件通过TCP/IP来配置,然后客户自己用Modbus来配置和读取信息。客户发现一个问
: 题,他们通过Modbus直接配置时间后,通过我们的软件读取,时间不一致。通过我们软
: 件设置后,Modbus里面显示的小时不对。
: 配置嵌入式的时间有两种,一种是软件启动后,自动先把嵌入式的这个UTC时间读入,
: 显示成本地时间。当在软件界面点击Sync,现在软件就把系统的时间(UTC)传给嵌入式。
: 第二种是用户提出的,在Modbus寄存器里面增加两组,一组来显示年/月/日/时/分/秒
: ,一种来设置年/月/日/时/分/秒,然后用一个寄存器作为出发,把设置的时间写入嵌
: 入式系统。这里,用户会把当地时间输入。
: 经过我分析发现,这个嵌入式系统没有考虑时区。软件通过Windows读时间后,向硬件

avatar
o*p
5
每个host上存timezone,和daylghtsaving time 信息,这是本地信息,传的时候当然
传utc足够了。
[在 a9 (嗯) 的大作中提到:]
:跟是不是嵌入式没关系
:你只要知道 本地时间与utc不是一一对应的关系,所以存、传时间如果使用utc,就必
:须带时区一起传 就行了
:式。
avatar
a*9
6
很多人认为时间问题很简单,其实不然,因为我看到的大部分系统这个问题都设计得不
好,根本不critical。建议一个便宜的解决方案,服务器数据库里的时间数据统统存为
utc格式,然后到网上找个免费的包,应用中把utc转换为当地时间,再将当地时间传给
远方的PLC。仅供参考。

式。

【在 b***i 的大作中提到】
: 我们给客户开发一个嵌入式硬件PLC,这个硬件里面有微处理器,可以用一个我们开发
: 的软件通过TCP/IP来配置,然后客户自己用Modbus来配置和读取信息。客户发现一个问
: 题,他们通过Modbus直接配置时间后,通过我们的软件读取,时间不一致。通过我们软
: 件设置后,Modbus里面显示的小时不对。
: 配置嵌入式的时间有两种,一种是软件启动后,自动先把嵌入式的这个UTC时间读入,
: 显示成本地时间。当在软件界面点击Sync,现在软件就把系统的时间(UTC)传给嵌入式。
: 第二种是用户提出的,在Modbus寄存器里面增加两组,一组来显示年/月/日/时/分/秒
: ,一种来设置年/月/日/时/分/秒,然后用一个寄存器作为出发,把设置的时间写入嵌
: 入式系统。这里,用户会把当地时间输入。
: 经过我分析发现,这个嵌入式系统没有考虑时区。软件通过Windows读时间后,向硬件

avatar
a9
7
跟你说了utc跟本地时间不是一一对应的了。只存utc肯定不行。

开发
个问
们软
入,
/秒
入嵌
硬件

【在 a*******9 的大作中提到】
: 很多人认为时间问题很简单,其实不然,因为我看到的大部分系统这个问题都设计得不
: 好,根本不critical。建议一个便宜的解决方案,服务器数据库里的时间数据统统存为
: utc格式,然后到网上找个免费的包,应用中把utc转换为当地时间,再将当地时间传给
: 远方的PLC。仅供参考。
:
: 式。

avatar
a9
8
如果只是每个host上存的还是这个host上用没问题,要是一个host上时间拿到另一个
host上
用的话就不行了。
但楼主这个能保证吗?

【在 o****p 的大作中提到】
: 每个host上存timezone,和daylghtsaving time 信息,这是本地信息,传的时候当然
: 传utc足够了。
: [在 a9 (嗯) 的大作中提到:]
: :跟是不是嵌入式没关系
: :你只要知道 本地时间与utc不是一一对应的关系,所以存、传时间如果使用utc,就必
: :须带时区一起传 就行了
: :式。

avatar
a*9
9
你没看懂我说的东西

【在 a9 的大作中提到】
: 跟你说了utc跟本地时间不是一一对应的了。只存utc肯定不行。
:
: 开发
: 个问
: 们软
: 入,
: /秒
: 入嵌
: 硬件

avatar
a9
10
你不是说数据库里存utc然后应用里用包转成本地时间吗?

【在 a*******9 的大作中提到】
: 你没看懂我说的东西
avatar
a*9
11
这个问题的关键是
为了准确地获取当地时间,无论在plc 本地转换还是服务器端转换,没有历史的
daytime saving数据,时间一长,定会出错。那些免费的包有这些数据,可以相对便宜
地把问题解决了。

【在 a9 的大作中提到】
: 你不是说数据库里存utc然后应用里用包转成本地时间吗?
avatar
a9
12
解决不了的,一个gmt时间可能既对应一个dst时间,同时对应一个非dst时间,如果没
有存时区,那就没法转换回去。

【在 a*******9 的大作中提到】
: 这个问题的关键是
: 为了准确地获取当地时间,无论在plc 本地转换还是服务器端转换,没有历史的
: daytime saving数据,时间一长,定会出错。那些免费的包有这些数据,可以相对便宜
: 地把问题解决了。

avatar
a*9
13
建议你把我说的再仔细想想,然后再查查资料

【在 a9 的大作中提到】
: 解决不了的,一个gmt时间可能既对应一个dst时间,同时对应一个非dst时间,如果没
: 有存时区,那就没法转换回去。

avatar
t*u
14
PC端比较好解决。PLC做太多了会影响到你想象不到的地方,比如同步。
avatar
o*p
15
funny。我觉得现在的小孩说起来做的都是最fancy的东西基本的概念都没有,摇头了。
utc存在的意义是啥?就是一个基本的reference time,然后其它所有时区按照utc调整
。连ntp里头都是用utc做timestamp,为什么?不用utc做那你sync一次要传多少个
timestamp?最简单不过的事情,你下面embedded time source走ntp或者随便什么时钟
去同步获得尽可能精确的时钟,然后你和pc端的bus上送的就是你下面获得的utc时间戳
,然后pc端你放几个专业点的计算本地时间的包不就完了?
avatar
b*i
16
PLC没有磁盘,只有内存来供客户端提取数据,包括压强,温度的数据,同时,客户可
能也读取时间戳。PLC有一个RTC,关机也会运行。不过,这个PLC在当地安装后不会移
动。
从客户的角度来考虑,似乎他们只需要当地时间。有的客户所在地有夏令时,有的没有
。配置的时候,基本上是当地人配置,就是距离很近,不会需要从其他国家配置。如果
从其他国家配置,这个时区的问题就麻烦大了。
现在看来,我们这个领域的客户还没有意识到时区在时间戳里的作用,所以在设计
Modbus寄存器表的时候没有时区这个信息,他们只按排了年月日时分秒这些参数。那么
,似乎我们改动软件只配置这些就可行。
但是,如果客户有夏令时,他们的客户端PC可能会改时间, 时间不对怎么办?这个我
们以前的嵌入式系统就是没考虑这个事情,时间随时让客户改。就是说,如果夏令时到
了,他们就把小时改一下即可。那样,从Modbus读的小时就和PC又对上了。

【在 a9 的大作中提到】
: 如果只是每个host上存的还是这个host上用没问题,要是一个host上时间拿到另一个
: host上
: 用的话就不行了。
: 但楼主这个能保证吗?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。