李麗宏,徐文舉
(太原理工大學 信息工程學院,太原030024)
隨著國民經濟的迅速發展,煤炭行業進入了前所未有的局面。煤炭行業的發展壯大帶來了管理模式的改革,其采煤工作機制為每天三班循環制。一些煤礦將每班的產量作為該班績效考核標準的一部分,這使得煤礦超能力生產問題愈演愈烈。引起超能力生產的原因主要有:各別煤礦追求利潤最大化、煤炭市場混亂和惡性競爭、法制不健全、各種稅費對煤礦壓力過大以及治理煤礦超能力生產力度不夠等。煤礦超能力生產現象的危害主要有:擾亂煤炭行業市場、設備超負荷運轉、降低了稅收征管質量和工作效率、影響了煤礦的安全生產狀況、擾亂社會經濟發展。為了更好的將煤礦的產量加以統計并且上報,設計了一種算法優良、簡單高效、實用價值高的基于SQLServer的煤炭產量數據統計方法。
系統整體架構如圖1所示,WinCE儀表計算出煤炭產量后,將產量數據通過煤炭專網上傳到本地的電腦。本地所實現的功能只是針對本煤礦的產量數據,不涉及其他煤礦的產量數據。本地的數據經過計算,以班產量的形式對產量數據進行本地保存。本地電腦配有一臺熱備電腦,用于數據的備份和冗余。

圖1 系統整體架構圖
系統服務軟件以Microsoft Visual Basic 6.0為開發環境,以Microsoft SQL Server 2005做后臺數據庫支撐。軟件中對稱重數據及設備狀態信息通過與稱重儀表Winsock通信的方式獲取,采用新的產量統計算法,降低了軟件開發的難度;主備機之間采用Winsock通信,不僅實現了對兩個工控機產量數據和設備狀態信息的統一處理,而且降低了系統的復雜程度,使得煤礦工作人員更容易操作。在Microsoft Visual Basic 6.0開發環境中,利用Winsock控件來實現客戶端和服務器的連接。通過網絡將WinCE儀表的通訊數據進行接收,然后根據其通信協議對數據進行分解和重新組合,以實現系統的功能要求。最后將收到的數據按照三班循環機制以一定的格式保存到SQLServer2005數據庫中,進而完成班、日、月、年產量的查詢。服務軟件具有用戶管理設置、歷史數據查詢、報表打印等功能。軟件設計流程如圖2所示。

圖2 服務器端軟件流程圖
有一個已經有序的數據序列,要求在這個已經排好的數據序列中插入一個數,但要求插入后此數據序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,算法適用于少量數據的排序,是穩定的排序方法。
要統計班產量就要根據煤礦的實際情況,確定其交班時間,并計算當前時間所在的班次。由軟件記錄下當前班的開始時間,當交班時間到達時計算當班的產量,并把數據保存到數據庫。根據煤礦不同的交班時間需要設置四個全局變量,即三個交班時間JBTime1、JBTime2和JBTime3,當前時間CurrentTime,三個交班時間可以通過軟件設置,其循環機制如圖3所示。即每天24h內,JBTime1、JBTime2和JBTime3循環進行。考慮到00:00這一特殊時間點可能所在的時間段,如圖4所示,將當前時間所處的班次判斷分為三種情況。第一種為00:00在JBTime1和JBTime2之間,第二種為00:00在JBTime2和JBTime3之間,第三種為00:00在JBTime3和JBTime1之間。

圖3 交班時間循環機制圖

圖4 加入0時刻交班時間循環機制圖
并在定時器里將當前時間與此三種情況下與各交班時間比對,得出當前時間所在的班次:
1)00:00:00≤JBTime1And JBTime1<JBTime2And JBTime2<JBTime3And JBTime3≤23:59:59,此情況算法流程圖如圖5所示。
2)00:00:00≤JBTime3And JBTime3<JBTime1And JBTime1<JBTime2And JBTime2≤23:59:59此情況算法流程圖如圖6所示。

圖5 第一種情況班次算法流程圖

圖6 第二種情況班次算法流程圖
3)00:00:00≤JBTime2And JBTime2<JBTime3And JBTime3<JBTime1And JBTime1≤23:59:59此情況算法流程圖如圖7所示。
WinCE儀表每分鐘發送一次數據,軟件用Winsock接收儀表數據,從數據中提取瞬時流量及皮帶秤總累計值,保存到數據庫的shishi表中,shishi表設計如表1所示。

表1 實時數據表

圖7 第三種情況班次算法流程圖
這樣在shishi表中找到當前班之前累計值的最大值作為當前班產量的起始值BanLeiJi-Start,然后找到當前班最新累計值BanLeiJi-End,可得出當前班產量 BanLeiJi=BanLeiJi-End-BanLeiJi-Start。當交班時間到達時保存當前班產量到班產量數據表CL中,CL表中數據是為查詢和打印報表服務,其數據是每天一條起始,且每到交班時間更新。班產量數據表設計如表2所示。

表2 班產量數據表CL
根據煤礦三班制循環工作機制,本設計只保存班產量,日月年產量查詢通過相應的SQL語句利用班產量的相加來實現查詢。
軟件通過調用SQLServer2005數據庫的SQL語句完成日月年產量的查詢。并將數據顯示到查詢界面上。
日產量查詢SQL語句,設將要查詢的日期為2012-12-12:
SELECT ISNULL(Ban-1,0)+ISNULL(Ban-2,0)+ISNULL(Ban-3,0)FROM CL WHERE ShiJian=’2012-12-12’
月產量查詢SQL語句,設將要查詢的日期為2012-12:
SELECT SUM(ISNULL(Ban-1,0))+SUM(ISNULL(Ban-2,0))+
SUM(ISNULL(Ban-3,0))FROM CL WHERE ShiJian LIKE
’2012-12%’
年產量查詢SQL語句,設將要查詢的日期為2012:
SELECT SUM(ISNULL(Ban-1,0))+SUM(ISNULL(Ban-2,0))+
SUM(ISNULL(Ban-3,0))FROM CL WHERE ShiJian LIKE
’2012%’

圖8 整體軟件系統界面圖
整個軟件系統不僅實現了對產量數據、視頻、設備狀態、超產狀態等的檢測,而且實現了主備機數據保存的統一和數據上傳方式的轉變,實現了本地數據和上傳數據的統一,進而提高了整個系統的可信性,有效監測了煤礦的生產狀況,取得了良好的實際應用效果。圖8是監控中心上位機整體軟件系統界面圖。主要實現了煤礦產量數據、設備狀態信息與視頻信息的采集、存儲。實現了對煤礦產量和視頻的全自動檢測,為防治煤礦超能力生產工作提供了數據支撐。圖9是產量統計查詢界面圖。其中采用了新的產量統計算法,使得統計查詢更加簡單有效。按查詢條件查詢時,日、月和年產量都根據班產量相加得到。

圖9 產量查詢界面圖流程圖
本文設計的產量統計算法使得產量的統計和查詢更加方便,軟件的開發難度降低,煤礦工作人員更容易操作。通過分析實際煤炭產量的統計方法,設計出班產量計算算法及數據庫,實現了煤炭產量監控系統對數據的有效監控、查詢和歷史數據打印。該方法已經成功應用在山西晉城各大煤礦煤炭產量遠程監測系統軟件,取得了很好的實用效果。
[1] 戴有煒.網絡專業指南[M].北京:清華大學出版社,2004.
[2] 鄭阿奇.SQL Server實用教程[M].北京:電子工業出版社,2002.
[3] 姚巍.Visual Basic數據庫開發及工程實例[M].北京:人民郵電出版社.2004.
[4] 張宏林.Visual Basic開發ERP系統實例導航[M].北京:人民郵電出版社,2005.
[5] 國宏偉,鄧君堂,等.高爐專家系統的數據采集及處理[J].冶金自動化,2008,32(3):18-22.
[6] 武梅芳,李麗宏.基于 Winsock的網絡通信[J].技術交流,2009,25(1):46-47.
[7] 林陳雷.Visual Basic教育信息化系統開發實例導航[M].北京:清華大學出版社,2000.
[8] 秦戈,劉勇,等.Visual Basic編程之道與技巧指點[M].西安:電子科技大學出版社,2003.