关于组态王HTconvertTime()函数的2020报表问题的解决方案 点击:1430 | 回复:5



Nicy

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 0回
  • 年度积分:15
  • 历史总积分:165
  • 注册:2018年10月12日
发表于:2020-04-13 21:06:51
楼主

      进入到2020大家都会发现,用组态王组态的工程,到了2020年的日报表,月报表或者是自定义报表就不能查询使用了。关于这个问题,是因为一个组态王HTconvertTime的函数有时间的现在造成的。在官方范例中,对报表文件的介绍,是使用了一个HTConvertTime()函数,来计算当前时间查询历史数据。而这个函数的说明中,写明了这个函数只能在1970-2019年使用。我们查看这个函数的说明,1970.1.1,其实就是格林威治时间,组态王自己的格式把数据按天,分为不同的文件,存储在硬盘上,然后通过格林威治时间,进行管理,只要我们能自己写程序,转换下格林威治时间,就可以把原有的HTConvertTime()函数给替换掉,从而实现正常运行的功能。那剩下就简单了。

      组态王提供了自定义函数的机制,在命令语言/自定义函数命令语言,定义一个LONG型的函数:CYL_HTConvertTime(long Year,long Month,long Day,long Hour,long minites,long sends),名字可以随意起的,这个是在原有名字上加个前缀,便于替换原函数。然后里面可以计算了。当然你前面要获得当前的年、月、日、时、分、秒信息。下面就是计算格林威治时间了,网上算法很多。规则也简单,每三个平年跟一个闰年,平年365天,2月份28天;闰年366天,2月份,29天。则算法基本就是下面:

        1.计算当前年份与1970之间,有多少个4年,每个就是365×4+1天;

        2.计算当前年份与1970的间隔除4,看余几年,判断是否闰年,加对应时间;

        3.计算当前月份,如果是闰年,过了2月份就加1天;如果不是闰年,就按大小月,排布天数,当然了,要把当天刨掉,因为只算整天;

       4.最后把天数都加起来 天数×24×60×60,再把后面的小时、分钟、秒,统一折算秒数,然后都相加返回,即可。

       5.然后,在你的报表脚本中,一切都不变,只把原来语句中的HTConvertTime前面加个前缀,改为CYL_HTConvertTime,全部保存就完事了。

附件文档我上传了自编脚本和使用步骤,欢迎大家分享交流!

正在下载,请等待……
下载附件需5积分!



楼主最近还看过



fighting2020

  • [管理员]
  • 精华:4帖
  • 求助:4帖
  • 帖子:1023帖 | 7244回
  • 年度积分:1284
  • 历史总积分:18892
  • 注册:2008年11月11日
发表于:2020-04-14 09:14:28
1楼

非常感谢楼主的资料分享

花深梦

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 27回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2004年5月10日
发表于:2020-07-19 16:24:48
2楼

难道需要回复才能下载?

dayushouji

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 35回
  • 年度积分:0
  • 历史总积分:81
  • 注册:2012年5月29日
发表于:2021-08-08 13:42:32
3楼

感谢楼主的分享

张晓金

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:116
  • 注册:2021年9月05日
发表于:2021-09-05 19:21:55
4楼

感谢楼主分享

寻道归途

  • 精华:0帖
  • 求助:5帖
  • 帖子:6帖 | 50回
  • 年度积分:0
  • 历史总积分:140
  • 注册:2016年9月22日
发表于:2021-11-15 16:57:13
5楼

感谢楼主分享


热门招聘
相关主题

官方公众号

智造工程师