Argo


  我的地盘Ajax做主
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

PHD 实时数据库取值问题

Posted on 2009-07-17 15:46  Argo  阅读(1896)  评论(0编辑  收藏

前几天弄服务器之间的时钟同步问题,今天找到一个罪魁祸首,描述一下现象。我利用Ajax开发了一个天然气分输站计量状态点实时监控网页,网页10秒钟刷新一次,网页的计量状态数据每间隔5秒钟从Honeywell公司的PHD服务器提取最新数据。所以网页在不刷新的状态下更新数据,效果还是很赞的,今天我无意中发现一个问题,发现槽车的数据经常显示零,而且时间戳居然是0001-01-01,经过我的检查发现这个就是典型的服务器时间不同步造成的恶果!环境如下:

PHD Server在计算机A上,Web Server在计算机B上,由于网页用客户端通过Ajax调用Web Server端代码提取PHD Server数据,PHD API PHDHistorian 对象有两个属性分别为

[C#]
public string StartTime {get; set;}

[C#]
public string EndTime {get; set;}

 

这里开始我觉得很奇怪呢,为什么Honeywell的开发人员把这两个字段设置成字符类型的呢?为什么不用DateTime类型呢,为什么使用字符串“NOW-1D”等自定义的格式呢?其实这里就是关键所在,由于服务器时间可能不同步,如果用Web Server的DateTime.Now传递到PHD Server上可能时间就变成将来时间了(相对PHD Server而言),所以取回的数据数值为零,时间戳为0001-01-01

总结

取指定时间的值,没有问题,可使用格式化后的时间字符串如”yyyy-MM-dd HH:mm:ss”,取最新数据坚决使用Honeywell的自定义格式字符”NOW”