APP下载

解决组态王2020年报表不显示问题

2020-10-20陈力群

西部论丛 2020年7期
关键词:报表定义升级

陈力群

摘 要:本文主要介绍了解决解决供排水厂供水系统和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年无法使用问题--解决方案

猜你喜欢

报表定义升级
以爱之名,定义成长
定义“风格”
字词升级
镇长看报表
第九章 升级!我的宠物
第九章升级!我的宠物
月度报表
自主阅读,快乐升级
月度报表
年终总结