梁 艷,王鵬偉
(1.山西省地震局,山西 太原 030021;2.太原大陸裂谷動力學國家野外科學觀測研究站,山西 太原 030025)
目前,山西測震臺網(wǎng)有57個固定臺站,監(jiān)測信息中心技術(shù)保障室負責監(jiān)管并匯總每月的維護記錄,臺站設(shè)備由各個維護中心負責。維護人員需手動將各維護中心的各類Excel表進行整理匯總,通過郵箱報送。由于統(tǒng)計表種類繁多,導(dǎo)致測震臺網(wǎng)工作效率低下;有時對每個臺站各種儀器的信息及更換未進行詳細的統(tǒng)計,對各種異常不能及時判定是儀器故障還是其他原因引起,需進行現(xiàn)場調(diào)查與分析[1]。借鑒山西前兆臺網(wǎng)日常運行管理軟件,大大降低維護人員的工作量,提高工作效率[2]。根據(jù)工作實際,設(shè)計一款測震臺網(wǎng)臺站及設(shè)備運行維護管理系統(tǒng),包括測震臺站及設(shè)備基本信息的數(shù)據(jù)庫。系統(tǒng)模塊主要包括用戶管理、臺站基本信息、臺站維護記錄、設(shè)備維護記錄和報表統(tǒng)計等,實現(xiàn)統(tǒng)計和查詢臺站基本信息、維護記錄及儀器更換記錄等,上報臺站及設(shè)備的故障原因及處理情況,根據(jù)需要導(dǎo)出報表。
系統(tǒng)主要任務(wù)是實現(xiàn)山西臺網(wǎng)臺站及設(shè)備運行維護管理業(yè)務(wù)流程,主要包括設(shè)計山西臺網(wǎng)臺站及設(shè)備運行維護管理系統(tǒng)的功能模塊圖、功能模塊內(nèi)容和數(shù)據(jù)庫。系統(tǒng)按照軟件工程的思路來進行Windows程序的開發(fā),分別進行需求分析、數(shù)據(jù)庫設(shè)計、系統(tǒng)架構(gòu)設(shè)計、主窗體設(shè)計、用戶管理功能、臺站及設(shè)備管理功能、臺站及設(shè)備維護記錄功能、查詢及報表導(dǎo)出功能[3]。系統(tǒng)主要內(nèi)容魚骨圖如第35頁圖1所示。
(1) 結(jié)合UML建模方式對實例進行分析,利用UML進行系統(tǒng)分析和設(shè)計,將應(yīng)用程序設(shè)計和數(shù)據(jù)庫設(shè)計統(tǒng)一起來,提高數(shù)據(jù)庫設(shè)計的效率和質(zhì)量。
(2) 采用C#進行開發(fā)。C#語言是微軟公司專門為使用.NET平臺而創(chuàng)建的,.NET 技術(shù)為 EXE 程序提供新的開發(fā)技術(shù)和開發(fā)工具。
(3) 系統(tǒng)采用C/S結(jié)構(gòu)(客戶端/服務(wù)器模式)。這種結(jié)構(gòu)的基本原則是“功能分布”,即將一個大的計算機任務(wù)分解為多個子任務(wù)??蛻舳送瓿蓴?shù)據(jù)處理、實現(xiàn)應(yīng)用接口等相關(guān)功能,服務(wù)端基于SQL Server數(shù)據(jù)庫完成數(shù)據(jù)庫的管理。
系統(tǒng)功能包括用戶管理、臺站基本信息、設(shè)備基本信息、臺站維護記錄、設(shè)備維護記錄、查詢及報表導(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) 臺站基本信息管理主要包括新建和修改臺站名稱、代碼、類別、臺基、地震計、數(shù)據(jù)采集器、運行時間、看護人、信息節(jié)點、故障記錄等。
(3) 設(shè)備基本信息管理主要包括新建和修改設(shè)備名稱、型號、序列號、類別、IP、網(wǎng)關(guān)、端口、參數(shù)、維修記錄等。
(4) 臺站維護記錄管理主要包括新建、修改臺站故障及處理記錄,包括臺站名稱、代碼、故障時間、恢復(fù)時間、故障原因、處理辦法、設(shè)備更換記錄等。
(5) 設(shè)備維護記錄管理主要包括新建、修改設(shè)備維修更換記錄,包括設(shè)備名稱、型號、序列號、所屬臺站、故障時間、維修返回時間、維修接受單位、接收人、寄件人等。
(6) 查詢及報表導(dǎo)出管理主要包括查詢臺站和設(shè)備信息,導(dǎo)出臺網(wǎng)臺站維修記錄表、設(shè)備維修記錄表及維護巡檢表等。
系統(tǒng)采用SQL Server 2012數(shù)據(jù)庫。數(shù)據(jù)庫包括:用戶信息表、臺站信息表、設(shè)備信息表、臺站維護記錄表、設(shè)備維護記錄表、維護巡檢表。各表的含義如第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) 臺站維護記錄。臺站維護管理界面中,顯示所有臺站維護信息列表,在每條信息后面加“修改”“刪除”按鈕,頁面底端加“新建”按鈕,將相應(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)臺站名稱、代碼、類別、臺基、儀器、運行時間、看護人、信息節(jié)點等設(shè)備信息表(tb_Equ)名稱、型號、序列號、類別、所屬臺站、IP、網(wǎng)關(guān)、端口、參數(shù)、維修記錄等臺站維護記錄表(tb_StaMain)臺站名稱、代碼、故障時間、恢復(fù)時間、斷記時長、故障原因、處理辦法、設(shè)備更換記錄等設(shè)備維護記錄表(tb_EquMain)設(shè)備名稱、型號、序列號、所屬臺站、故障時間、維修返回時間、維修接受單位、接收人、寄件人等維護巡檢表(tb_MainInspection)臺站名稱、維護日期、故障時間、恢復(fù)時間、斷記時長、故障描述、處理辦法、維護記錄(設(shè)備、供電、通信)、巡檢記錄(避雷、觀測室情況)、維護人員、負責人、填報日期等
圖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 臺站維護流程圖Fig.9 Station maintenance flow
(5) 設(shè)備維護記錄。設(shè)備維護管理界面中,顯示所有設(shè)備維護信息列表,在每條信息后面加“修改”“刪除”按鈕,頁面底端加“新建”按鈕,將相應(yīng)的修改更新至數(shù)據(jù)庫tb_EquMain表(見圖10)。
(6) 查詢及報表導(dǎo)出。根據(jù)所選內(nèi)容,調(diào)用相關(guān)數(shù)據(jù)表,顯示查詢內(nèi)容或?qū)С鏊鑳?nèi)容(見圖11)。導(dǎo)出文件為excel格式。
(1) 同步更新。
當維護人員新增一條臺站維護記錄時,系統(tǒng)自動生成一條維護巡檢記錄,并將有關(guān)內(nèi)容自動填寫。實現(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();
//新增一條維護記錄
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 查詢及報表導(dǎo)出流程圖Fig.11 Query and report flow
//向維護巡檢表tb_MainInspection添加一條維護記錄
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) 報表導(dǎo)出。
山西測震臺網(wǎng)臺站日常維護的月評比報表中重要的一項工作是填報維護巡檢記錄表。系統(tǒng)根據(jù)維護記錄,按照設(shè)計模板,自動生成維護巡檢記錄的Excel文件。該功能實現(xiàn)主要是借助Aspose.Cells電子表格組件,對Excel文件的單元進行操作。具體代碼如下:
//首先需在命名空間中聲明
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è)計完成,初步實現(xiàn)對山西測震臺網(wǎng)臺站及設(shè)備信息的統(tǒng)計、查詢及各類報表導(dǎo)出功能,提高維護人員的工作效率,做好測震臺站的運維工作。今后,設(shè)計人員還需對系統(tǒng)進行技術(shù)完善,進一步提高系統(tǒng)的實用性及操作性。
參考文獻:
[1] 呂芳,張淑亮,胡玉良,等.山西靜樂井水位異常調(diào)查與分析[J].山西地震,2013(3):28-31.
[2] 程冬焱,胡玉良,穆慧敏,等. 山西地震前兆臺網(wǎng)日常運行管理軟件[J]. 地震地磁觀測與研究,2016,37(4):181-186.
[3] 李瑩. Windows程序開發(fā)——基于Visual Studio 2013[M].北京:清華大學出版社,2015.