李麗宏,徐文舉
(太原理工大學(xué) 信息工程學(xué)院,太原030024)
隨著國民經(jīng)濟(jì)的迅速發(fā)展,煤炭行業(yè)進(jìn)入了前所未有的局面。煤炭行業(yè)的發(fā)展壯大帶來了管理模式的改革,其采煤工作機(jī)制為每天三班循環(huán)制。一些煤礦將每班的產(chǎn)量作為該班績效考核標(biāo)準(zhǔn)的一部分,這使得煤礦超能力生產(chǎn)問題愈演愈烈。引起超能力生產(chǎn)的原因主要有:各別煤礦追求利潤最大化、煤炭市場混亂和惡性競爭、法制不健全、各種稅費對煤礦壓力過大以及治理煤礦超能力生產(chǎn)力度不夠等。煤礦超能力生產(chǎn)現(xiàn)象的危害主要有:擾亂煤炭行業(yè)市場、設(shè)備超負(fù)荷運轉(zhuǎn)、降低了稅收征管質(zhì)量和工作效率、影響了煤礦的安全生產(chǎn)狀況、擾亂社會經(jīng)濟(jì)發(fā)展。為了更好的將煤礦的產(chǎn)量加以統(tǒng)計并且上報,設(shè)計了一種算法優(yōu)良、簡單高效、實用價值高的基于SQLServer的煤炭產(chǎn)量數(shù)據(jù)統(tǒng)計方法。
系統(tǒng)整體架構(gòu)如圖1所示,WinCE儀表計算出煤炭產(chǎn)量后,將產(chǎn)量數(shù)據(jù)通過煤炭專網(wǎng)上傳到本地的電腦。本地所實現(xiàn)的功能只是針對本煤礦的產(chǎn)量數(shù)據(jù),不涉及其他煤礦的產(chǎn)量數(shù)據(jù)。本地的數(shù)據(jù)經(jīng)過計算,以班產(chǎn)量的形式對產(chǎn)量數(shù)據(jù)進(jìn)行本地保存。本地電腦配有一臺熱備電腦,用于數(shù)據(jù)的備份和冗余。
圖1 系統(tǒng)整體架構(gòu)圖
系統(tǒng)服務(wù)軟件以Microsoft Visual Basic 6.0為開發(fā)環(huán)境,以Microsoft SQL Server 2005做后臺數(shù)據(jù)庫支撐。軟件中對稱重數(shù)據(jù)及設(shè)備狀態(tài)信息通過與稱重儀表Winsock通信的方式獲取,采用新的產(chǎn)量統(tǒng)計算法,降低了軟件開發(fā)的難度;主備機(jī)之間采用Winsock通信,不僅實現(xiàn)了對兩個工控機(jī)產(chǎn)量數(shù)據(jù)和設(shè)備狀態(tài)信息的統(tǒng)一處理,而且降低了系統(tǒng)的復(fù)雜程度,使得煤礦工作人員更容易操作。在Microsoft Visual Basic 6.0開發(fā)環(huán)境中,利用Winsock控件來實現(xiàn)客戶端和服務(wù)器的連接。通過網(wǎng)絡(luò)將WinCE儀表的通訊數(shù)據(jù)進(jìn)行接收,然后根據(jù)其通信協(xié)議對數(shù)據(jù)進(jìn)行分解和重新組合,以實現(xiàn)系統(tǒng)的功能要求。最后將收到的數(shù)據(jù)按照三班循環(huán)機(jī)制以一定的格式保存到SQLServer2005數(shù)據(jù)庫中,進(jìn)而完成班、日、月、年產(chǎn)量的查詢。服務(wù)軟件具有用戶管理設(shè)置、歷史數(shù)據(jù)查詢、報表打印等功能。軟件設(shè)計流程如圖2所示。
圖2 服務(wù)器端軟件流程圖
有一個已經(jīng)有序的數(shù)據(jù)序列,要求在這個已經(jīng)排好的數(shù)據(jù)序列中插入一個數(shù),但要求插入后此數(shù)據(jù)序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個新的、個數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序,是穩(wěn)定的排序方法。
要統(tǒng)計班產(chǎn)量就要根據(jù)煤礦的實際情況,確定其交班時間,并計算當(dāng)前時間所在的班次。由軟件記錄下當(dāng)前班的開始時間,當(dāng)交班時間到達(dá)時計算當(dāng)班的產(chǎn)量,并把數(shù)據(jù)保存到數(shù)據(jù)庫。根據(jù)煤礦不同的交班時間需要設(shè)置四個全局變量,即三個交班時間JBTime1、JBTime2和JBTime3,當(dāng)前時間CurrentTime,三個交班時間可以通過軟件設(shè)置,其循環(huán)機(jī)制如圖3所示。即每天24h內(nèi),JBTime1、JBTime2和JBTime3循環(huán)進(jìn)行??紤]到00:00這一特殊時間點可能所在的時間段,如圖4所示,將當(dāng)前時間所處的班次判斷分為三種情況。第一種為00:00在JBTime1和JBTime2之間,第二種為00:00在JBTime2和JBTime3之間,第三種為00:00在JBTime3和JBTime1之間。
圖3 交班時間循環(huán)機(jī)制圖
圖4 加入0時刻交班時間循環(huán)機(jī)制圖
并在定時器里將當(dāng)前時間與此三種情況下與各交班時間比對,得出當(dāng)前時間所在的班次:
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儀表每分鐘發(fā)送一次數(shù)據(jù),軟件用Winsock接收儀表數(shù)據(jù),從數(shù)據(jù)中提取瞬時流量及皮帶秤總累計值,保存到數(shù)據(jù)庫的shishi表中,shishi表設(shè)計如表1所示。
表1 實時數(shù)據(jù)表
圖7 第三種情況班次算法流程圖
這樣在shishi表中找到當(dāng)前班之前累計值的最大值作為當(dāng)前班產(chǎn)量的起始值BanLeiJi-Start,然后找到當(dāng)前班最新累計值BanLeiJi-End,可得出當(dāng)前班產(chǎn)量 BanLeiJi=BanLeiJi-End-BanLeiJi-Start。當(dāng)交班時間到達(dá)時保存當(dāng)前班產(chǎn)量到班產(chǎn)量數(shù)據(jù)表CL中,CL表中數(shù)據(jù)是為查詢和打印報表服務(wù),其數(shù)據(jù)是每天一條起始,且每到交班時間更新。班產(chǎn)量數(shù)據(jù)表設(shè)計如表2所示。
表2 班產(chǎn)量數(shù)據(jù)表CL
根據(jù)煤礦三班制循環(huán)工作機(jī)制,本設(shè)計只保存班產(chǎn)量,日月年產(chǎn)量查詢通過相應(yīng)的SQL語句利用班產(chǎn)量的相加來實現(xiàn)查詢。
軟件通過調(diào)用SQLServer2005數(shù)據(jù)庫的SQL語句完成日月年產(chǎn)量的查詢。并將數(shù)據(jù)顯示到查詢界面上。
日產(chǎn)量查詢SQL語句,設(shè)將要查詢的日期為2012-12-12:
SELECT ISNULL(Ban-1,0)+I(xiàn)SNULL(Ban-2,0)+I(xiàn)SNULL(Ban-3,0)FROM CL WHERE ShiJian=’2012-12-12’
月產(chǎn)量查詢SQL語句,設(shè)將要查詢的日期為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%’
年產(chǎn)量查詢SQL語句,設(shè)將要查詢的日期為2012:
SELECT SUM(ISNULL(Ban-1,0))+SUM(ISNULL(Ban-2,0))+
SUM(ISNULL(Ban-3,0))FROM CL WHERE ShiJian LIKE
’2012%’
圖8 整體軟件系統(tǒng)界面圖
整個軟件系統(tǒng)不僅實現(xiàn)了對產(chǎn)量數(shù)據(jù)、視頻、設(shè)備狀態(tài)、超產(chǎn)狀態(tài)等的檢測,而且實現(xiàn)了主備機(jī)數(shù)據(jù)保存的統(tǒng)一和數(shù)據(jù)上傳方式的轉(zhuǎn)變,實現(xiàn)了本地數(shù)據(jù)和上傳數(shù)據(jù)的統(tǒng)一,進(jìn)而提高了整個系統(tǒng)的可信性,有效監(jiān)測了煤礦的生產(chǎn)狀況,取得了良好的實際應(yīng)用效果。圖8是監(jiān)控中心上位機(jī)整體軟件系統(tǒng)界面圖。主要實現(xiàn)了煤礦產(chǎn)量數(shù)據(jù)、設(shè)備狀態(tài)信息與視頻信息的采集、存儲。實現(xiàn)了對煤礦產(chǎn)量和視頻的全自動檢測,為防治煤礦超能力生產(chǎn)工作提供了數(shù)據(jù)支撐。圖9是產(chǎn)量統(tǒng)計查詢界面圖。其中采用了新的產(chǎn)量統(tǒng)計算法,使得統(tǒng)計查詢更加簡單有效。按查詢條件查詢時,日、月和年產(chǎn)量都根據(jù)班產(chǎn)量相加得到。
圖9 產(chǎn)量查詢界面圖流程圖
本文設(shè)計的產(chǎn)量統(tǒng)計算法使得產(chǎn)量的統(tǒng)計和查詢更加方便,軟件的開發(fā)難度降低,煤礦工作人員更容易操作。通過分析實際煤炭產(chǎn)量的統(tǒng)計方法,設(shè)計出班產(chǎn)量計算算法及數(shù)據(jù)庫,實現(xiàn)了煤炭產(chǎn)量監(jiān)控系統(tǒng)對數(shù)據(jù)的有效監(jiān)控、查詢和歷史數(shù)據(jù)打印。該方法已經(jīng)成功應(yīng)用在山西晉城各大煤礦煤炭產(chǎn)量遠(yuǎn)程監(jiān)測系統(tǒng)軟件,取得了很好的實用效果。
[1] 戴有煒.網(wǎng)絡(luò)專業(yè)指南[M].北京:清華大學(xué)出版社,2004.
[2] 鄭阿奇.SQL Server實用教程[M].北京:電子工業(yè)出版社,2002.
[3] 姚巍.Visual Basic數(shù)據(jù)庫開發(fā)及工程實例[M].北京:人民郵電出版社.2004.
[4] 張宏林.Visual Basic開發(fā)ERP系統(tǒng)實例導(dǎo)航[M].北京:人民郵電出版社,2005.
[5] 國宏偉,鄧君堂,等.高爐專家系統(tǒng)的數(shù)據(jù)采集及處理[J].冶金自動化,2008,32(3):18-22.
[6] 武梅芳,李麗宏.基于 Winsock的網(wǎng)絡(luò)通信[J].技術(shù)交流,2009,25(1):46-47.
[7] 林陳雷.Visual Basic教育信息化系統(tǒng)開發(fā)實例導(dǎo)航[M].北京:清華大學(xué)出版社,2000.
[8] 秦戈,劉勇,等.Visual Basic編程之道與技巧指點[M].西安:電子科技大學(xué)出版社,2003.