解决组态王2020年报表不显示问题
2020-10-20陈力群
陈力群
摘 要:本文主要介绍了解决解决供排水厂供水系统和DN1600引水工程系统报表不能显示问题的过程。找到系统报表不能显示的原因,是PLC系统软件组态王的HTconverTime()时间函数本身的问题,针对问题原因通过系统版本升级、HTconverTime()时间函数重新定义和HTconverTime()时间函数的优化成功解决了问题。
关键词:组态王;HTconverTime()函数
引 言
我厂使用的供排水厂供水系统和DN1600引水工程系统的日报表、月报表及自定义报表就2020年1月1日后不显示数据。通过对软件的研究组态王6.55版本帮助的研究发现TConvertTime()时间函数说明中介绍函数使用范围1970-2019年。
1、解决HTconverTime()的问题
组态王6.55版中报表处理机制,分为不同的文件,存储在硬盘上,然后通过格林威治时间,进行管理。如果将原有的HTConvertTime()函数给替换掉,就能实现系统的正常运行。以下是报表画面没有数据:
1.1 PLC组态王升级版本解决时间函数问题
升级组态王版本,经过研究和咨询组态王系统厂家亚控科技,确定组态王7.55sp1版解决了时间函数问题,可以提供升级服务,因为我厂的应用系统非亚控科技开发,不保证系统正常使用。
为了测试新版本是否能正常运行我厂的系统,先建立测试环境,安装组态王7.5sp1版,然后将我厂的系统了安装并接入工控网络环境进行测试,系统不能运行。此方法不可行。
1.2重新编写时间函数解决系统时间函数问题
重新定义时间函数来替代原来的时间函数来解决问题。组态王提供自定义函数的功能,在系统中重新定义一个时间函数。长整型long变量的取值范围是-2147483647~+2147483647,但HTConvertTime函数按照2019年1月1日0时0分0秒,转换出的最大值为1577721600,还未达到长整型变量的最大值,因此可以通过编写自定义函数,替换原来的时间函数。以下以HTCT命名函数代码如下:
LONG HTCT(long YEAR,long MONTH,long DAY,long HOUR,long MINUTE,long SECOND)
{
long StartYear=1970;long StartMonth=1;long YearOfLeap=0;long YearsToDays=0;long DaysOfMonth=0;long DaysOfDay=0;long SecondNum=0;bool MarkOfLeap=0;
while(StartYear < YEAR)
{if((StartYear % 4 ==0 && StartYear % 100 !=0) || StartYear % 400 ==0)
YearOfLeap=YearOfLeap + 1;StartYear = StartYear +1;}
YearsToDays = (YEAR-1970)*365+YearOfLeap;
if((YEAR % 4 ==0 && YEAR % 100 !=0)|| YEAR % 400 ==0)
MarkOfLeap=1;while(StartMonth < Month){if(StartMonth==2)if(MarkOfLeap==1)DaysOfMonth=DaysOfMonth +29;elseDaysOfMonth=DaysOfMonth +28;else if(StartMonth==4)DaysOfMonth=DaysOfMonth +30;else if(StartMonth==6)DaysOfMonth=DaysOfMonth +30;else if(StartMonth==9)DaysOfMonth=DaysOfMonth +30;else if(StartMonth==11)DaysOfMonth=DaysOfMonth +30;elseDaysOfMonth=DaysOfMonth +31;StartMonth = StartMonth +1;} DaysOfDay =Day-1;SecondNum=(YearsToDays+DaysOfMonth+DaysOfDay)*86400+(HOUR-8)*3600+MINUTE*60+SECOND;return SecondNum;}
替换后出现新的问题,2020年后的报表能显示数据,以前不显示,函数兼容性有一定的问题。
1.3优化时间函数
重新命名NEWHTConvertTime函数,内容如下图:
long rtnVer;
rtnVer = 0;
if(Year >= 2020) {
Year = Year - 20;
//从2000年开始计算,与2020年一样是闰年,留20年余量
//1970年1月1日00:00到1999年12月31日23时59分59秒,是946655999
//到2019年12月31日23时59分59秒,是1577807999
rtnVer = 631152000+ HTConvertTime(Year, Month, Day, Hour, Minute, Second);
//631152000為20年的秒数
}else{
rtnVer = HTConvertTime(Year,Month,Day,Hour,Minute,Second);
}
return rtnVer;
代码简单,替代函数后显示报表正常。如下:
2 结束语
从严格意义上HTConvertTime时间函数问题,并不算组态王软件错误,因为官方范例中,对此函数在报表文件的介绍中已经明确只能在1970-2019年使用。通过新建时间函数并替换,最终改写并实施最优时间函数方案为企业,解决了历史报表和新报表的问题。
参考文献
[1] CSDN中szq8595的2020年组态王HTConvertTime输入参数错误问题--组态王报表2020年无法使用问题--解决方案