于 倩
(中國電子科技集團公司第五十四研究所,河北 石家莊 050000)
隨著網(wǎng)絡(luò)信息技術(shù)蓬勃發(fā)展,其使用范圍越來越廣泛,通過以互聯(lián)網(wǎng)信息技術(shù)為主導(dǎo)的綜合信息管理平臺對實驗室的各種信息實施集中管理的技術(shù)手段已經(jīng)成為一種主要的解決的渠道。實驗室是學(xué)校推行素質(zhì)教育、實施“重視實踐、激勵創(chuàng)新能力”教學(xué)模式的主要基地。由于實驗室面對中小學(xué)生對外開放,可以最大限度使用教師教學(xué)的實驗資料,拓寬中小學(xué)生的認識面,培養(yǎng)中小學(xué)生的創(chuàng)新能力和自主動手意識,因此實驗室對外開放是學(xué)校進一步提高教學(xué)質(zhì)量的主要內(nèi)容之一[1-6]。實驗室的開放管理是促進試驗室對外開放、提升對外開放效益與水平的關(guān)鍵技術(shù)手段??蒲腥藛T開展了實驗室開放管理,但各個學(xué)校開放管理都不盡相同,很多院校都設(shè)計或研發(fā)了自己的實驗室開放管理,并和其他的體系加以融合。
為給研究生創(chuàng)造充分的實驗時間,大學(xué)通常設(shè)有大量的實驗室,同時各個實驗室都能配備足夠多的實驗器材。以南京大學(xué)軟件研究所為例,一個研究室通常有40~50個設(shè)備給本科生使用,而這樣的實驗室大約有幾十個。但是如果缺乏對實驗室開放管理的技術(shù)支持,將需要巨大的人工力量來控制實驗室的開放管理以及對儀器的維修,而且人工控制的錯誤風(fēng)險也將大大超過計算機軟件控制。
對于研究機構(gòu)或公司,其實驗室通常是關(guān)閉的,可供研究組織的內(nèi)部人員使用,并且使用的人員在一定時期內(nèi)相對穩(wěn)定。然而,大學(xué)實驗室的不同之處在于,公共實驗室通常向全校師生開放,人數(shù)眾多,而且工作人員的身份也是隨機的。由于身份不同,因此不同的實驗室工作人員使用實驗室的方式也不同。學(xué)生進入該系的研習(xí)班不收費,但教師進入其他學(xué)科的研習(xí)班必須收費。如果缺乏實驗室開放管理制度,就無法識別實驗人員的身份,無法了解實驗人員所使用實驗設(shè)施的情況,可能會影響到實驗室的正常使用。
科研單位和專業(yè)的科研機構(gòu)一般有規(guī)定的辦公時間。大學(xué)實驗室的開放時間通常都比較復(fù)雜,一般本科生與碩士使用的實驗室開放時間不同,而一些單次實驗持續(xù)時間比較長的實驗室開放時間也與其他研究所不同。
實驗室的系統(tǒng)分為服務(wù)器端和客戶端兩個部門,系統(tǒng)全部數(shù)據(jù)處理都存放在客戶端,同時由客戶端承擔(dān)全部的處理。系統(tǒng)服務(wù)器端管理與終端用戶的通信,包括提供從服務(wù)器端獲取的信息和修改內(nèi)容。系統(tǒng)客戶端與服務(wù)器端之間使用自定義的協(xié)議集實現(xiàn)通信。
客戶端必須承擔(dān)對全部信息的保存和管理,并且只有客戶端才能進行更新信息。
Spring能夠用來控制業(yè)務(wù)對象,因為利用Spring所提出的控制反轉(zhuǎn)(Inversion Of Control,IOC)容器,能夠直接把目標(biāo)間的依賴性問題交由Spring加以控制,從而減少了硬解碼所導(dǎo)致的過程耦合。由于利用Spring,開發(fā)者能夠不用再為單例模型類、屬性文件分析等很基礎(chǔ)的要求撰寫程序,從而能夠更加注重于上層應(yīng)用研究。Spring并不排斥所有優(yōu)秀的公開源代碼框架,能夠減少所有框架的應(yīng)用難度。Spring實現(xiàn)了對所有優(yōu)秀架構(gòu)的直接支援,并且能夠和MINA與Hibernate良好的協(xié)調(diào)運作。Hibernate實現(xiàn)了數(shù)據(jù)的持久化服務(wù),采用Hibernate,開發(fā)人員在運用數(shù)據(jù)庫系統(tǒng)時只要求操作面向?qū)ο?,而放棄了?shù)據(jù)庫系統(tǒng)中心的思想,并引入了完整的面向?qū)ο笏枷搿?/p>
服務(wù)器端過程如圖1所示,以卡片掃描功能為例進行詳細說明。首先,服務(wù)器端發(fā)送卡片掃描消息。服務(wù)器端收到消息后,MINA對消息進行編碼,并分析消息表單和包含的信息。此傳入信息是卡號,然后由先前注冊的消息處理功能處理消息。在消息處理模式下,可以使用Spring對象池中的適當(dāng)對象算法編輯卡號,以進行Intranet分析和翻譯。此時,對象必須讀取慣性數(shù)據(jù)庫中的信息,以確定卡號是否顯示在數(shù)據(jù)庫中、是否報告為丟失。如果操作方面沒有足夠的信息,將返回對象彈簧箱中的數(shù)據(jù),并返回相應(yīng)的結(jié)果,在根據(jù)計算結(jié)果對數(shù)據(jù)進行編碼的同時進行挖掘,并將數(shù)據(jù)返回給客戶。
圖1 服務(wù)器端處理過程示意
3.1.1 網(wǎng)絡(luò)功能實現(xiàn)
網(wǎng)絡(luò)功能主要依賴于PyQt IV的QtNetwork模塊,該模塊為開發(fā)人員所建立的可移植性應(yīng)用程式提供了許多類。該模塊既給出了Qhttp和Qftp等類型來實現(xiàn)更通用的應(yīng)用層協(xié)議定義;又提供了QtcpSocket、QtcpServer、QudpSocket等類型,實現(xiàn)更底層的應(yīng)用定義;還包括了QNetworkRequest、QnetworkReply和qnetwork Access Manager,為更高級別的應(yīng)用編程操作而提供,可以同時支援各種協(xié)議。
在實際開發(fā)中,主要使用本模塊中的Qtcp Socket類。網(wǎng)絡(luò)模塊中維護了QtcpSocket類的一個示例,用于網(wǎng)絡(luò)操作。
3.1.2 串口功能實現(xiàn)
串口模塊主要用來控制PLT-485模塊,而PLT-485模塊則通過電力線載波控制,完成了對實驗儀器供電的管理。主機使用串口對PLT-485控制器發(fā)送操作命令的讀取工作。
PySerial封裝了串口的操作,并可以根據(jù)本地平臺類型(Windows、Linux、BSD、Jython或IronPython)選擇后端串口應(yīng)用程序界面(Application Program Interface,API)。
當(dāng)向串口寫入信息后,先確定串口能否開啟,若不能開機則啟動串口,并在寫入信息過程中捕捉異常值,如寫入錯誤則返回-1。最終不管寫入成功還是錯誤,在所有輸出結(jié)束后都必須關(guān)掉串口。
3.2.1 數(shù)據(jù)幀編解碼實現(xiàn)
數(shù)據(jù)幀是計算機與PLT-485系統(tǒng)實現(xiàn)交流的基礎(chǔ)數(shù)據(jù)類型,通過數(shù)據(jù)幀格式,可以確定出數(shù)據(jù)幀數(shù)據(jù)結(jié)構(gòu)。在編碼過程中首先按照對數(shù)據(jù)幀實例中各個屬性的設(shè)定,分別在數(shù)據(jù)幀字節(jié)上填寫對應(yīng)數(shù)據(jù),然后再進行校驗和比較,并返回已經(jīng)編碼好的數(shù)據(jù)字符串。解碼流程也與此相似,只是流程方向相反。
3.2.2 消息編解碼實現(xiàn)
消息的具體解碼型后,再根據(jù)消息類型分為2種方法,首先使用MessageHandler類分析出了消息的具體類型,其次再使用更具體的消息編碼函數(shù),最后采用Python語言中的Struct模型完成了消息解碼運算。Struct模型還可以作為Python字符串與原始二進制文件互相轉(zhuǎn)化。在Struct模型中,既通過格式字符串說明了轉(zhuǎn)換規(guī)則,也通過格式化字符串描述了在轉(zhuǎn)換時的文本字段的位置與內(nèi)容排布。
當(dāng)解碼過程開始時,若消息長度低于8Byte,則表示消息不完全。如果消息類型未注冊,則無法解密。如果消息格式正確,首先分析消息數(shù)據(jù)的數(shù)據(jù)類型,然后通過Struct的解包功能完成從原始二進制信息到Python數(shù)據(jù)類型的轉(zhuǎn)換。消息格式字符串通常為“LIS”,第一個“L”表示模塊使用網(wǎng)絡(luò)字節(jié)順序執(zhí)行轉(zhuǎn)換過程?!癓IS”是指排列在消息數(shù)據(jù)塊中的2個整數(shù)字符串,它們最初是二進制信息。處理程序是一個信息字典。鍵是描述消息類型的整數(shù),該值表示為消息數(shù)據(jù)類型的示例。在分析消息數(shù)據(jù)類型之后,根據(jù)特定消息數(shù)據(jù)類型的對應(yīng)實例進一步說明文件。
用戶界面維護包含用戶界面的創(chuàng)建和控件的管理。
卡有關(guān)的功能或與硬件有關(guān)的功能,都必須封裝在硬件層。但是,目前使用的磁卡系統(tǒng)的開發(fā)人員并不能實現(xiàn)這些設(shè)置。由于磁卡讀卡器利用USB端口可以直接連到電腦,而讀卡器在讀取卡片信息時會透過鍵盤事件的方式把卡號傳送至應(yīng)用程序,因此就等于使用者可以透過鼠標(biāo)直接輸入卡號,卡的功能在邏輯上并沒有完全和用戶功能分離。
在對比了目前主要的數(shù)據(jù)庫管理系統(tǒng)以后,考慮選用MySQL,其特點如下。
(1)MySQL是開放式源代碼數(shù)據(jù)庫系統(tǒng),具備很好的可移植功能,并在各個編譯平臺通過了穩(wěn)定能力試驗;
(2)MySQL可以充分運用CPU資源,運用多線程編程,支撐多用戶、多任務(wù)。
(3)MySQL通過如Java數(shù)據(jù)庫連接(Java Database Connectioity,JDBC)、開放數(shù)據(jù)庫連接(Open Datebase Connectivity,ODBC)或者TCP/IP等多種形式完成數(shù)據(jù)庫系統(tǒng)網(wǎng)站鏈接,便于程式設(shè)計。
(4)MySQL有Navicat等相似的繪圖工具,便于使用者對數(shù)據(jù)庫信息系統(tǒng)管理、優(yōu)化、信息檢索等應(yīng)用。
(5) MySQL為各種主流編程語言,如C、C++、Ruby、Java和Python等,開通了API端口,便于程序設(shè)計。
(6) MySQL軟件系統(tǒng)小巧、特性強大、安裝方便,可以同步管理上千萬條實時記錄。
(7) MySQL支援 Linux、Mac OS、Windows等各種操作系統(tǒng),并最終選定了 MySQL作為實驗室管理系統(tǒng)的主要數(shù)據(jù)庫系統(tǒng)。
綜上所述,本文的分析主要利用了實驗室開放系統(tǒng)的優(yōu)點。但經(jīng)過對比當(dāng)時市場上已有的實驗室開源操作系統(tǒng),操作系統(tǒng)必須具備高功能、可擴展性和通信穩(wěn)定性。系統(tǒng)使用Python編程語言開發(fā),并采用了PyQt作為圖形用戶界面架構(gòu),以便于進行拓展功能。而電源管理使用了電力線載波控制,既不需要另外的控制線,還可以直接和現(xiàn)有的供電線路系統(tǒng)集成,以減少部署成本。