于 倩
(中國電子科技集團公司第五十四研究所,河北 石家莊 050000)
隨著網絡信息技術蓬勃發展,其使用范圍越來越廣泛,通過以互聯網信息技術為主導的綜合信息管理平臺對實驗室的各種信息實施集中管理的技術手段已經成為一種主要的解決的渠道。實驗室是學校推行素質教育、實施“重視實踐、激勵創新能力”教學模式的主要基地。由于實驗室面對中小學生對外開放,可以最大限度使用教師教學的實驗資料,拓寬中小學生的認識面,培養中小學生的創新能力和自主動手意識,因此實驗室對外開放是學校進一步提高教學質量的主要內容之一[1-6]。實驗室的開放管理是促進試驗室對外開放、提升對外開放效益與水平的關鍵技術手段。科研人員開展了實驗室開放管理,但各個學校開放管理都不盡相同,很多院校都設計或研發了自己的實驗室開放管理,并和其他的體系加以融合。
為給研究生創造充分的實驗時間,大學通常設有大量的實驗室,同時各個實驗室都能配備足夠多的實驗器材。以南京大學軟件研究所為例,一個研究室通常有40~50個設備給本科生使用,而這樣的實驗室大約有幾十個。但是如果缺乏對實驗室開放管理的技術支持,將需要巨大的人工力量來控制實驗室的開放管理以及對儀器的維修,而且人工控制的錯誤風險也將大大超過計算機軟件控制。
對于研究機構或公司,其實驗室通常是關閉的,可供研究組織的內部人員使用,并且使用的人員在一定時期內相對穩定。然而,大學實驗室的不同之處在于,公共實驗室通常向全校師生開放,人數眾多,而且工作人員的身份也是隨機的。由于身份不同,因此不同的實驗室工作人員使用實驗室的方式也不同。學生進入該系的研習班不收費,但教師進入其他學科的研習班必須收費。如果缺乏實驗室開放管理制度,就無法識別實驗人員的身份,無法了解實驗人員所使用實驗設施的情況,可能會影響到實驗室的正常使用。
科研單位和專業的科研機構一般有規定的辦公時間。大學實驗室的開放時間通常都比較復雜,一般本科生與碩士使用的實驗室開放時間不同,而一些單次實驗持續時間比較長的實驗室開放時間也與其他研究所不同。
實驗室的系統分為服務器端和客戶端兩個部門,系統全部數據處理都存放在客戶端,同時由客戶端承擔全部的處理。系統服務器端管理與終端用戶的通信,包括提供從服務器端獲取的信息和修改內容。系統客戶端與服務器端之間使用自定義的協議集實現通信。
客戶端必須承擔對全部信息的保存和管理,并且只有客戶端才能進行更新信息。
Spring能夠用來控制業務對象,因為利用Spring所提出的控制反轉(Inversion Of Control,IOC)容器,能夠直接把目標間的依賴性問題交由Spring加以控制,從而減少了硬解碼所導致的過程耦合。由于利用Spring,開發者能夠不用再為單例模型類、屬性文件分析等很基礎的要求撰寫程序,從而能夠更加注重于上層應用研究。Spring并不排斥所有優秀的公開源代碼框架,能夠減少所有框架的應用難度。Spring實現了對所有優秀架構的直接支援,并且能夠和MINA與Hibernate良好的協調運作。Hibernate實現了數據的持久化服務,采用Hibernate,開發人員在運用數據庫系統時只要求操作面向對象,而放棄了數據庫系統中心的思想,并引入了完整的面向對象思想。
服務器端過程如圖1所示,以卡片掃描功能為例進行詳細說明。首先,服務器端發送卡片掃描消息。服務器端收到消息后,MINA對消息進行編碼,并分析消息表單和包含的信息。此傳入信息是卡號,然后由先前注冊的消息處理功能處理消息。在消息處理模式下,可以使用Spring對象池中的適當對象算法編輯卡號,以進行Intranet分析和翻譯。此時,對象必須讀取慣性數據庫中的信息,以確定卡號是否顯示在數據庫中、是否報告為丟失。如果操作方面沒有足夠的信息,將返回對象彈簧箱中的數據,并返回相應的結果,在根據計算結果對數據進行編碼的同時進行挖掘,并將數據返回給客戶。

圖1 服務器端處理過程示意
3.1.1 網絡功能實現
網絡功能主要依賴于PyQt IV的QtNetwork模塊,該模塊為開發人員所建立的可移植性應用程式提供了許多類。該模塊既給出了Qhttp和Qftp等類型來實現更通用的應用層協議定義;又提供了QtcpSocket、QtcpServer、QudpSocket等類型,實現更底層的應用定義;還包括了QNetworkRequest、QnetworkReply和qnetwork Access Manager,為更高級別的應用編程操作而提供,可以同時支援各種協議。
在實際開發中,主要使用本模塊中的Qtcp Socket類。網絡模塊中維護了QtcpSocket類的一個示例,用于網絡操作。
3.1.2 串口功能實現
串口模塊主要用來控制PLT-485模塊,而PLT-485模塊則通過電力線載波控制,完成了對實驗儀器供電的管理。主機使用串口對PLT-485控制器發送操作命令的讀取工作。
PySerial封裝了串口的操作,并可以根據本地平臺類型(Windows、Linux、BSD、Jython或IronPython)選擇后端串口應用程序界面(Application Program Interface,API)。
當向串口寫入信息后,先確定串口能否開啟,若不能開機則啟動串口,并在寫入信息過程中捕捉異常值,如寫入錯誤則返回-1。最終不管寫入成功還是錯誤,在所有輸出結束后都必須關掉串口。
3.2.1 數據幀編解碼實現
數據幀是計算機與PLT-485系統實現交流的基礎數據類型,通過數據幀格式,可以確定出數據幀數據結構。在編碼過程中首先按照對數據幀實例中各個屬性的設定,分別在數據幀字節上填寫對應數據,然后再進行校驗和比較,并返回已經編碼好的數據字符串。解碼流程也與此相似,只是流程方向相反。
3.2.2 消息編解碼實現
消息的具體解碼型后,再根據消息類型分為2種方法,首先使用MessageHandler類分析出了消息的具體類型,其次再使用更具體的消息編碼函數,最后采用Python語言中的Struct模型完成了消息解碼運算。Struct模型還可以作為Python字符串與原始二進制文件互相轉化。在Struct模型中,既通過格式字符串說明了轉換規則,也通過格式化字符串描述了在轉換時的文本字段的位置與內容排布。
當解碼過程開始時,若消息長度低于8Byte,則表示消息不完全。如果消息類型未注冊,則無法解密。如果消息格式正確,首先分析消息數據的數據類型,然后通過Struct的解包功能完成從原始二進制信息到Python數據類型的轉換。消息格式字符串通常為“LIS”,第一個“L”表示模塊使用網絡字節順序執行轉換過程。“LIS”是指排列在消息數據塊中的2個整數字符串,它們最初是二進制信息。處理程序是一個信息字典。鍵是描述消息類型的整數,該值表示為消息數據類型的示例。在分析消息數據類型之后,根據特定消息數據類型的對應實例進一步說明文件。
用戶界面維護包含用戶界面的創建和控件的管理。
卡有關的功能或與硬件有關的功能,都必須封裝在硬件層。但是,目前使用的磁卡系統的開發人員并不能實現這些設置。由于磁卡讀卡器利用USB端口可以直接連到電腦,而讀卡器在讀取卡片信息時會透過鍵盤事件的方式把卡號傳送至應用程序,因此就等于使用者可以透過鼠標直接輸入卡號,卡的功能在邏輯上并沒有完全和用戶功能分離。
在對比了目前主要的數據庫管理系統以后,考慮選用MySQL,其特點如下。
(1)MySQL是開放式源代碼數據庫系統,具備很好的可移植功能,并在各個編譯平臺通過了穩定能力試驗;
(2)MySQL可以充分運用CPU資源,運用多線程編程,支撐多用戶、多任務。
(3)MySQL通過如Java數據庫連接(Java Database Connectioity,JDBC)、開放數據庫連接(Open Datebase Connectivity,ODBC)或者TCP/IP等多種形式完成數據庫系統網站鏈接,便于程式設計。
(4)MySQL有Navicat等相似的繪圖工具,便于使用者對數據庫信息系統管理、優化、信息檢索等應用。
(5) MySQL為各種主流編程語言,如C、C++、Ruby、Java和Python等,開通了API端口,便于程序設計。
(6) MySQL軟件系統小巧、特性強大、安裝方便,可以同步管理上千萬條實時記錄。
(7) MySQL支援 Linux、Mac OS、Windows等各種操作系統,并最終選定了 MySQL作為實驗室管理系統的主要數據庫系統。
綜上所述,本文的分析主要利用了實驗室開放系統的優點。但經過對比當時市場上已有的實驗室開源操作系統,操作系統必須具備高功能、可擴展性和通信穩定性。系統使用Python編程語言開發,并采用了PyQt作為圖形用戶界面架構,以便于進行拓展功能。而電源管理使用了電力線載波控制,既不需要另外的控制線,還可以直接和現有的供電線路系統集成,以減少部署成本。