基于Windows服務、網絡和串口投影機遠程控制設計
摘 要:在小型或零星的多媒體教室實現對投影機的網絡遠程控制,仍然值得進一步研究。在此闡述Windows服務的
基本特性,分析服務器端網絡數據幀與串口數據幀通信協議的轉換,論述基于Windows服務的軟件設計流程。進而提出在
無網絡中控的情況下,對投影機實現遠程控制的“零成本”解決方案,并介紹投影機遠程冷啟動開機和延時關機的方法。基
于Windows服務的數據通信有著在特殊應用中的優勢。
關鍵詞:Windows服務;網絡;串口;遠程控制;投影機
0 引 言
在小型、零星或分散的多媒體教室里,如果吊裝投影機后,再配置一套多媒體教室設備網絡集成中央控制系統(簡稱網絡中控)顯得有些多余。因為網絡中控的主要控制對象是投影機,是圍繞投影機服務而實現多媒體教室設備的集成控制。不過投影機已經具備了信號源的切換功能,與其連接的計算機又有網絡和串口資源,而且網絡中控還必須占用一個目前網絡資源緊張的IP地址。
為了充分利用投影機和計算機自有的硬件軟件資源,這里使用Microsoft Visual Studio 2005集成開發工具和.NET 2.O框架,采用C#編程語言,提出一種既能在運行時不需用戶交戶的窗口界面、不與其它應用進程發生沖突,又能實現投影機的遠程冷啟動開機和延時關機,基于網絡、Windows服務和串口的投影機遠程控制“零成本”解決方案。
l 關鍵技術的實現
1.1 計算機Windows服務技術特征
一個計算機 Windows服務程序是沒有Win-dows窗口界面的后臺運行程序,是在Windows操作系統下不要求用戶交互而能在后臺運行特定功能的可執行應用程序。對于自動啟動的Windows服務程序,在Windows啟動或是重啟之后,用戶登錄之前就開始執行,隨Windows系統關閉而最后停止。 Windows服務程序的應用范圍很廣,典型的Windows服務程序包含硬件控制、應用程序監視、系統級應用、診斷、報告、Web和文件系統服務等功能。
Windows服務應用程序的啟動由Windows服務控制管理器(Service Control Manager,SCM)完成,而SCM通過維護數據庫對已經安裝到系統的所有服務和驅動程序進行統一而安全的控制和管理,是一個遠程進程調用服務器,在 Windows操作系統導人時自動啟動。Windows服務分為服務應用程序啟動、服務程序監控及運行和服務程序安裝三個部分。這三部分通過安裝程序組合為一個完整的.exe文件。
實現投影機的遠程控制,開發用戶主要精力放在網絡與串口通信協議及程序設計上。與投影機連接的計算機設置為服務器端,由服務器端的網絡與串口通信程序轉發客戶端發送的控制信號實現對投影機控制,或作為返回投影機的應答信號。顯然,計算機只是數據信號轉發的硬件軟件中介,網絡與串口通信軟件只能在計算機的 Windows操作系統后臺進行,即Windows服務承擔此特殊任務。這是實現硬件控制和應用程序監視,并以軟件設計為主的解決方案。.NET框架簡化了Win-dows服務程序的創建和控制過程,其中啟動函數On-Start()和關閉函數OnClose()都是Windows服務開發重點。
1.2 網絡數據幀與串口幀的通信協議設計
為了在計算機啟動后立即監聽網絡,及時轉發客戶端發來的控制信號到投影機,使投影機實現相應的動作,則計算機首先必須實現基于Windows服務的網絡和串口的轉換協議,定義圖1所示網絡數據幀和串口數據幀格式。服務器和客戶端都以網絡數據幀來通信,網絡數據幀包含IP頭、TCP頭和若干串口數據幀。由于服務器端的計算機可能要使用多個串口控制嵌入式設備,同時因不同廠家生產投影機的串口波特率、效驗位、數據位、停止位等都不一致。無法確定所有投影機的串口設置,串口幀除了串口數據(N位)外,還需要在串口數據前加串口號(1位)、串口設置(1位)。為了編程方便,設定統一串口幀長度,對于不夠長度的,以填充位(為O)來補齊。在允許網絡數據幀最大長度的情況下,可以一個網絡數據幀包含若干個串口數據幀,各個串口數據幀以串口幀頭和串口幀尾區分開。
1.3 網絡與串口通信軟件設計
由上面論述可知,與投影機連接的計算機設置為服務器端。其軟件設計采用客戶機/服務器(C/S)模型,與遠程客戶端實現網絡通信,都要建立通信網絡套接字 Socket.對象,以后服務器端和客戶端通過這個套接字進行網絡通信。.NET 2.O提供了SerialPort串口組件,以完成與投影機或其他嵌入式設備的串口數據信號轉發。
在服務器端,基于計算機Windows服務的關鍵程序是網絡與串口通信程序設計,網絡與串口通信主程序流程圖如圖2所示。服務控制管理器SCM在Win- dows系統啟動后就調用網絡與串口通信程序的On-Start()函數。在OnStart()函數里建立新的線程,并建立新的Socket對象,使用 bind()函數綁定本地計算機的IP地址和協議端口,通過。listen()函數監聽該協議端口。為了提高計算機的運行效率,采用非阻塞異步 Socket編程。
評論