陳力群
摘 要:本文主要介紹了解決解決供排水廠供水系統和DN1600引水工程系統報表不能顯示問題的過程。找到系統報表不能顯示的原因,是PLC系統軟件組態(tài)王的HTconverTime()時間函數本身的問題,針對問題原因通過系統版本升級、HTconverTime()時間函數重新定義和HTconverTime()時間函數的優(yōu)化成功解決了問題。
關鍵詞:組態(tài)王;HTconverTime()函數
引 言
我廠使用的供排水廠供水系統和DN1600引水工程系統的日報表、月報表及自定義報表就2020年1月1日后不顯示數據。通過對軟件的研究組態(tài)王6.55版本幫助的研究發(fā)現TConvertTime()時間函數說明中介紹函數使用范圍1970-2019年。
1、解決HTconverTime()的問題
組態(tài)王6.55版中報表處理機制,分為不同的文件,存儲在硬盤上,然后通過格林威治時間,進行管理。如果將原有的HTConvertTime()函數給替換掉,就能實現系統的正常運行。以下是報表畫面沒有數據:
1.1 PLC組態(tài)王升級版本解決時間函數問題
升級組態(tài)王版本,經過研究和咨詢組態(tài)王系統廠家亞控科技,確定組態(tài)王7.55sp1版解決了時間函數問題,可以提供升級服務,因為我廠的應用系統非亞控科技開發(fā),不保證系統正常使用。
為了測試新版本是否能正常運行我廠的系統,先建立測試環(huán)境,安裝組態(tài)王7.5sp1版,然后將我廠的系統了安裝并接入工控網絡環(huán)境進行測試,系統不能運行。此方法不可行。
1.2重新編寫時間函數解決系統時間函數問題
重新定義時間函數來替代原來的時間函數來解決問題。組態(tài)王提供自定義函數的功能,在系統中重新定義一個時間函數。長整型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優(yōu)化時間函數
重新命名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時間函數問題,并不算組態(tài)王軟件錯誤,因為官方范例中,對此函數在報表文件的介紹中已經明確只能在1970-2019年使用。通過新建時間函數并替換,最終改寫并實施最優(yōu)時間函數方案為企業(yè),解決了歷史報表和新報表的問題。
參考文獻
[1] CSDN中szq8595的2020年組態(tài)王HTConvertTime輸入參數錯誤問題--組態(tài)王報表2020年無法使用問題--解決方案