梁 艷,王鵬偉
(1.山西省地震局,山西 太原 030021;2.太原大陸裂谷動力學(xué)國家野外科學(xué)觀測研究站,山西 太原 030025)
目前,山西測震臺網(wǎng)有57個固定臺站,監(jiān)測信息中心技術(shù)保障室負(fù)責(zé)監(jiān)管并匯總每月的維護(hù)記錄,臺站設(shè)備由各個維護(hù)中心負(fù)責(zé)。維護(hù)人員需手動將各維護(hù)中心的各類Excel表進(jìn)行整理匯總,通過郵箱報(bào)送。由于統(tǒng)計(jì)表種類繁多,導(dǎo)致測震臺網(wǎng)工作效率低下;有時(shí)對每個臺站各種儀器的信息及更換未進(jìn)行詳細(xì)的統(tǒng)計(jì),對各種異常不能及時(shí)判定是儀器故障還是其他原因引起,需進(jìn)行現(xiàn)場調(diào)查與分析[1]。借鑒山西前兆臺網(wǎng)日常運(yùn)行管理軟件,大大降低維護(hù)人員的工作量,提高工作效率[2]。根據(jù)工作實(shí)際,設(shè)計(jì)一款測震臺網(wǎng)臺站及設(shè)備運(yùn)行維護(hù)管理系統(tǒng),包括測震臺站及設(shè)備基本信息的數(shù)據(jù)庫。系統(tǒng)模塊主要包括用戶管理、臺站基本信息、臺站維護(hù)記錄、設(shè)備維護(hù)記錄和報(bào)表統(tǒng)計(jì)等,實(shí)現(xiàn)統(tǒng)計(jì)和查詢臺站基本信息、維護(hù)記錄及儀器更換記錄等,上報(bào)臺站及設(shè)備的故障原因及處理情況,根據(jù)需要導(dǎo)出報(bào)表。
系統(tǒng)主要任務(wù)是實(shí)現(xiàn)山西臺網(wǎng)臺站及設(shè)備運(yùn)行維護(hù)管理業(yè)務(wù)流程,主要包括設(shè)計(jì)山西臺網(wǎng)臺站及設(shè)備運(yùn)行維護(hù)管理系統(tǒng)的功能模塊圖、功能模塊內(nèi)容和數(shù)據(jù)庫。系統(tǒng)按照軟件工程的思路來進(jìn)行Windows程序的開發(fā),分別進(jìn)行需求分析、數(shù)據(jù)庫設(shè)計(jì)、系統(tǒng)架構(gòu)設(shè)計(jì)、主窗體設(shè)計(jì)、用戶管理功能、臺站及設(shè)備管理功能、臺站及設(shè)備維護(hù)記錄功能、查詢及報(bào)表導(dǎo)出功能[3]。系統(tǒng)主要內(nèi)容魚骨圖如第35頁圖1所示。
(1) 結(jié)合UML建模方式對實(shí)例進(jìn)行分析,利用UML進(jìn)行系統(tǒng)分析和設(shè)計(jì),將應(yīng)用程序設(shè)計(jì)和數(shù)據(jù)庫設(shè)計(jì)統(tǒng)一起來,提高數(shù)據(jù)庫設(shè)計(jì)的效率和質(zhì)量。
(2) 采用C#進(jìn)行開發(fā)。C#語言是微軟公司專門為使用.NET平臺而創(chuàng)建的,.NET 技術(shù)為 EXE 程序提供新的開發(fā)技術(shù)和開發(fā)工具。
(3) 系統(tǒng)采用C/S結(jié)構(gòu)(客戶端/服務(wù)器模式)。這種結(jié)構(gòu)的基本原則是“功能分布”,即將一個大的計(jì)算機(jī)任務(wù)分解為多個子任務(wù)??蛻舳送瓿蓴?shù)據(jù)處理、實(shí)現(xiàn)應(yīng)用接口等相關(guān)功能,服務(wù)端基于SQL Server數(shù)據(jù)庫完成數(shù)據(jù)庫的管理。
系統(tǒng)功能包括用戶管理、臺站基本信息、設(shè)備基本信息、臺站維護(hù)記錄、設(shè)備維護(hù)記錄、查詢及報(bào)表導(dǎo)出六部分,流程圖、功能模塊圖如第35頁圖2、第36頁圖3所示。系統(tǒng)采用UML用例圖描述系統(tǒng)的功能和行為(見第36頁圖4)。
(1) 用戶管理主要包括新建,查詢,修改用戶名、密碼、權(quán)限等。
圖1 系統(tǒng)主要內(nèi)容魚骨圖Fig.1 The main content of the system
圖2 系統(tǒng)流程圖Fig.2 The system flow
(2) 臺站基本信息管理主要包括新建和修改臺站名稱、代碼、類別、臺基、地震計(jì)、數(shù)據(jù)采集器、運(yùn)行時(shí)間、看護(hù)人、信息節(jié)點(diǎn)、故障記錄等。
(3) 設(shè)備基本信息管理主要包括新建和修改設(shè)備名稱、型號、序列號、類別、IP、網(wǎng)關(guān)、端口、參數(shù)、維修記錄等。
(4) 臺站維護(hù)記錄管理主要包括新建、修改臺站故障及處理記錄,包括臺站名稱、代碼、故障時(shí)間、恢復(fù)時(shí)間、故障原因、處理辦法、設(shè)備更換記錄等。
(5) 設(shè)備維護(hù)記錄管理主要包括新建、修改設(shè)備維修更換記錄,包括設(shè)備名稱、型號、序列號、所屬臺站、故障時(shí)間、維修返回時(shí)間、維修接受單位、接收人、寄件人等。
(6) 查詢及報(bào)表導(dǎo)出管理主要包括查詢臺站和設(shè)備信息,導(dǎo)出臺網(wǎng)臺站維修記錄表、設(shè)備維修記錄表及維護(hù)巡檢表等。
系統(tǒng)采用SQL Server 2012數(shù)據(jù)庫。數(shù)據(jù)庫包括:用戶信息表、臺站信息表、設(shè)備信息表、臺站維護(hù)記錄表、設(shè)備維護(hù)記錄表、維護(hù)巡檢表。各表的含義如第37頁表1所示。
(1) 用戶管理。包括對用戶名、密碼、權(quán)限等的管理。用戶管理界面中,顯示所有用戶信息列表,在每條信息后面加“修改”“刪除”按鈕,頁面頂端加“新建”按鈕,將相應(yīng)的修改更新至數(shù)據(jù)庫tb_User表。用戶登錄流程、用戶管理流程、用戶登錄界面、系統(tǒng)主界面、用戶管理界面分別如第37頁圖5至圖9所示。
(2) 臺站管理。臺站信息管理界面中,顯示所有臺站信息列表,在每條信息后面加“修改”“刪除”按鈕,頁面底端加“新建”按鈕,將相應(yīng)的修改更新至數(shù)據(jù)庫tb_Sta表(見圖7)。
(3) 設(shè)備管理。設(shè)備信息管理界面中,顯示所有設(shè)備信息列表,在每條信息后面加“修改”“刪除”按鈕,頁面底端加“新建”按鈕,將相應(yīng)的修改更新至數(shù)據(jù)庫tb_Equ表(見圖8)。
(4) 臺站維護(hù)記錄。臺站維護(hù)管理界面中,顯示所有臺站維護(hù)信息列表,在每條信息后面加“修改”“刪除”按鈕,頁面底端加“新建”按鈕,將相應(yīng)的修改更新至數(shù)據(jù)庫tb_StaMain表(見圖9)。
圖3 系統(tǒng)功能模塊圖Fig.3 System function module
圖4 系統(tǒng)用例圖Fig.4 System use case
表名說明用戶信息表(tb_User)姓名、用戶名、密碼、權(quán)限、單位、聯(lián)系電話等臺站信息表(tb_Sta)臺站名稱、代碼、類別、臺基、儀器、運(yùn)行時(shí)間、看護(hù)人、信息節(jié)點(diǎn)等設(shè)備信息表(tb_Equ)名稱、型號、序列號、類別、所屬臺站、IP、網(wǎng)關(guān)、端口、參數(shù)、維修記錄等臺站維護(hù)記錄表(tb_StaMain)臺站名稱、代碼、故障時(shí)間、恢復(fù)時(shí)間、斷記時(shí)長、故障原因、處理辦法、設(shè)備更換記錄等設(shè)備維護(hù)記錄表(tb_EquMain)設(shè)備名稱、型號、序列號、所屬臺站、故障時(shí)間、維修返回時(shí)間、維修接受單位、接收人、寄件人等維護(hù)巡檢表(tb_MainInspection)臺站名稱、維護(hù)日期、故障時(shí)間、恢復(fù)時(shí)間、斷記時(shí)長、故障描述、處理辦法、維護(hù)記錄(設(shè)備、供電、通信)、巡檢記錄(避雷、觀測室情況)、維護(hù)人員、負(fù)責(zé)人、填報(bào)日期等
圖5 用戶登錄流程圖Fig.5 User login flow
圖6 用戶管理流程圖Fig.6 User management flow
圖7 臺站管理流程圖Fig.7 Station management flow
圖8 設(shè)備管理流程圖Fig.8 Equipment management flow
圖9 臺站維護(hù)流程圖Fig.9 Station maintenance flow
(5) 設(shè)備維護(hù)記錄。設(shè)備維護(hù)管理界面中,顯示所有設(shè)備維護(hù)信息列表,在每條信息后面加“修改”“刪除”按鈕,頁面底端加“新建”按鈕,將相應(yīng)的修改更新至數(shù)據(jù)庫tb_EquMain表(見圖10)。
(6) 查詢及報(bào)表導(dǎo)出。根據(jù)所選內(nèi)容,調(diào)用相關(guān)數(shù)據(jù)表,顯示查詢內(nèi)容或?qū)С鏊鑳?nèi)容(見圖11)。導(dǎo)出文件為excel格式。
(1) 同步更新。
當(dāng)維護(hù)人員新增一條臺站維護(hù)記錄時(shí),系統(tǒng)自動生成一條維護(hù)巡檢記錄,并將有關(guān)內(nèi)容自動填寫。實(shí)現(xiàn)的部分代碼如下:
//連接數(shù)據(jù)庫
SqlConnection con = new SqlConnection();
con.ConnectionString = "server=" + ConfigHelper.GetAppConfig("ServerIP") + ";database=" + ConfigHelper.GetAppConfig("DataBase") + ";uid=" + ConfigHelper.GetAppConfig("user") + ";pwd=" + ConfigHelper.GetAppConfig("password");
con.Open();
//新增一條維護(hù)記錄
string strSQL = string.Format("insert into tb_StaMain(StaName,StaCode,StaBreakTime,StaRecoveryTime,StaDownTime,Reson,Handle,EquRepRec,Maintainer,DateSta,GUID) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')", comboBox1.Text, comboBox2.Text, dt2, dt1, tm, textBox7.Text, textBox2.Text, textBox3.Text, textBox4.Text, dateTimePicker4.Value, strGUID);
圖11 查詢及報(bào)表導(dǎo)出流程圖Fig.11 Query and report flow
//向維護(hù)巡檢表tb_MainInspection添加一條維護(hù)記錄
string strSQL2 = string.Format("insert into tb_MainInspection(StaName,StaBreakTime,StaRecoveryTime,StaDownTime,Reson,Handle,SeiGeoModel,SeiGeoSerial,DataCollModel,DataCollSerial,ComUnitModel,ComUnitSerial,GPSModel,GPSSerial,EnviMonitorModel,EnviMonitorSerial,VideoMonitorModel,VideoMonitorSerial,IntelPowerModel,BatteryModel,BatteryNum,LinkType,LinkEqu,LinkPowerType,ArresterModel,GroundResisValue,Lighting,Door,Environment,RoomLength,RoomWidth,RoomHeight,BlockLength,BlockWidth,SeiGeoCoverModel,Azimuth) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}',"+"'{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','{22}','{23}','{24}','{25}','{26}','{27}','{28}','{29}','{30}','{31}','{32}','{33}','{34}','{35}')", comboBox1.Text, dt2, dt1, tm, textBox7.Text, textBox2.Text, SeiGeoModel, SeiGeoSerial, DataCollModel, DataCollSerial, ComUnitModel, ComUnitSerial, GPSModel, GPSSerial, EnviMonitorModel, EnviMonitorSerial, VideoMonitorModel, VideoMonitorSerial, IntelPowerModel, BatteryModel, BatteryNum, LinkType, LinkEqu, LinkPowerType, ArresterModel, GroundResisValue, Lighting, Door, Environments, RoomLength, RoomWidth, RoomHeight, BlockLength, BlockWidth, SeiGeoCoverModel, Azimuth);
(2) 報(bào)表導(dǎo)出。
山西測震臺網(wǎng)臺站日常維護(hù)的月評比報(bào)表中重要的一項(xiàng)工作是填報(bào)維護(hù)巡檢記錄表。系統(tǒng)根據(jù)維護(hù)記錄,按照設(shè)計(jì)模板,自動生成維護(hù)巡檢記錄的Excel文件。該功能實(shí)現(xiàn)主要是借助Aspose.Cells電子表格組件,對Excel文件的單元進(jìn)行操作。具體代碼如下:
//首先需在命名空間中聲明
using Aspose.Cells;
//獲得數(shù)據(jù)庫信息,并將有關(guān)信息寫入Excel模板文件
SqlConnection con = new SqlConnection();
con.ConnectionString = "server=" + ConfigHelper.GetAppConfig("ServerIP") + ";database=" + ConfigHelper.GetAppConfig("DataBase") + ";uid=" + ConfigHelper.GetAppConfig("user") + ";pwd=" + ConfigHelper.GetAppConfig("password");
string strSQL = "select * from tb_MainInspection";
SqlDataAdapter da = new SqlDataAdapter(strSQL, con);
DataSet ds = new DataSet();
da.Fill(ds, "B_sp_dalei");
string dataDir = Path.GetFullPath("E:/temp/");
Workbook workbook = new Workbook(dataDir + "temp.xls");
Worksheet worksheet = workbook.Worksheets[0];
worksheet.Cells["B2"].PutValue(ds.Tables[0].Rows[e.RowIndex]["StaName"].ToString());
worksheet.Cells["D2"].PutValue(ds.Tables[0].Rows[e.RowIndex]["MainDate"].ToString());
worksheet.Cells["B3"].PutValue(ds.Tables[0].Rows[e.RowIndex]["StaBreakTime"].ToString());
……
worksheet.Cells["A27"].PutValue(ds.Tables[0].Rows[e.RowIndex]["ChangeEqu2"].ToString());
worksheet.Cells["D27"].PutValue(ds.Tables[0].Rows[e.RowIndex]["ChangeSeiBe2"].ToString());
worksheet.Cells["G27"].PutValue(ds.Tables[0].Rows[e.RowIndex]["ChangeSeiAf2"].ToString());
MessageBox.Show("導(dǎo)出成功");
目前,系統(tǒng)已經(jīng)設(shè)計(jì)完成,初步實(shí)現(xiàn)對山西測震臺網(wǎng)臺站及設(shè)備信息的統(tǒng)計(jì)、查詢及各類報(bào)表導(dǎo)出功能,提高維護(hù)人員的工作效率,做好測震臺站的運(yùn)維工作。今后,設(shè)計(jì)人員還需對系統(tǒng)進(jìn)行技術(shù)完善,進(jìn)一步提高系統(tǒng)的實(shí)用性及操作性。
參考文獻(xiàn):
[1] 呂芳,張淑亮,胡玉良,等.山西靜樂井水位異常調(diào)查與分析[J].山西地震,2013(3):28-31.
[2] 程冬焱,胡玉良,穆慧敏,等. 山西地震前兆臺網(wǎng)日常運(yùn)行管理軟件[J]. 地震地磁觀測與研究,2016,37(4):181-186.
[3] 李瑩. Windows程序開發(fā)——基于Visual Studio 2013[M].北京:清華大學(xué)出版社,2015.