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