專利名稱:多虛擬串口系統及其通信方法
技術領域:
本發明涉及通信領域,具體而言,涉及一種多虛擬串口系統及其通信方法。
背景技術:
通常,普通電腦上物理的串口資源有限,大多為1到2個(如coml、com2等),當 實際業務應用需求多于系統實際硬件配置時,傳統的方法是擴展物理串口數量,由專業公 司提供串口物理芯片電路板卡和驅動程序,這樣就實現了多個物理串口的配置和使用,這 在傳統的工業場合經常使用,但帶來的最直接問題是增加了投資成本。如圖1所示,示出了 傳統的串口組網的架構。在相關技術中出現了一種方法,S卩,虛擬串口與網絡通信相結合的技術,從而實現 傳統串口設備切換到IP網絡,以及實現串口數據在網絡中的透明傳輸。考慮到兼容已有的 串口應用軟件,使得底層通信方式的變化對串口應用完全屏蔽,因而,虛擬串口驅動可以不 通過硬件擴展串口,實現軟件擴展,從而降低了成本。同時,虛擬串口可以在不更改原有串 口應用軟件的前提下實現串口接入IP網絡的功能,即串口接入服務器。發明人發現上述的相關技術中,由于串口線程往往設置在操作系統層,因而,導致 虛擬串口網絡架構不夠清晰,且不利于用戶進行開發設計維護監控。
發明內容
本發明的主要目的在于提供一種多虛擬串口系統及其實現方法,以至少解決上述 的虛擬串口網絡傳輸架構不夠清晰,且不利于用戶進行監控開發設計維護問題。根據本發明的一個方面,提供了一種多虛擬串口系統,該多虛擬串口系統包括多 個串口管理模塊,位于多虛擬串口系統的應用層中,用于調用對應串口設備的串口資源進 行串口通信,其中,串口資源位于多虛擬串口系統的操作系統層中。根據本發明的另一方面,提供了一種多虛擬串口系統的通信方法,該方法包括多 虛擬串口系統的應用層中的串口管理模塊接收來自應用程序的串口通信請求;串口管理模 塊調用多虛擬串口系統的操作系統中的對應串口設備的串口資源,以進行串口通信請求所 請求的串口通信。通過本發明,采用包括以下結構的多虛擬串口系統多個串口管理模塊,位于所述 多虛擬串口系統的應用層中,用于調用對應串口設備的串口資源進行串口通訊,其中,所述 串口資源位于所述多虛擬串口系統的操作系統層中,解決了虛擬串口網絡傳輸架構不夠清 晰,且不利于用戶進行監控的問題,進而達到了使代碼實現簡潔、虛擬串口數量多,數據流 量大效果。
此處所說明的附圖用來提供對本發明的進一步理解,構成本申請的一部分,本發 明的示意性實施例及其說明用于解釋本發明,并不構成對本發明的不當限定。在附圖中
圖1是根據相關技術的串口組網的示意圖;圖2是根據本發明實施例的多虛擬串口系統的示意圖;圖3是根據本發明實施例的多虛擬串口系統的實現方法的流程圖;圖4是根據本發明實施例的多虛擬串口系統的通信方法的流程圖。
具體實施例方式下文中將參考附圖并結合實施例來詳細說明本發明。需要說明的是,在不沖突的 情況下,本申請中的實施例及實施例中的特征可以相互組合。根據本發明實施例,提供了一種多虛擬串口系統及其實現方法。圖2是根據本發明實施例的多虛擬串口系統的示意圖。如圖2所示,根據本發明實施例的多虛擬串口系統包括多個串口管理模塊,該多 個串口管理模塊位于所述多虛擬串口系統的應用層中,用于調用對應串口設備的串口資源 進行串口通信,其中,所述串口資源位于所述多虛擬串口系統的操作系統層中。該多個串口 管理模塊可以位于所述多虛擬串口系統的應用層通信鏈路管理程序中,某個串口管理模塊 與位于操作系統層虛擬串口驅動程序中相應的串口資源進行數據交互通信。如圖2所示,在多虛擬串口系統中包括應用程序層,操作系統層以及設備數據層, 通信鏈路管理程序位于應用程序層之中。在該實施例中,由于多個串口線程設置于通信鏈 路管理程序中,因而,串口線程設置于應用程序層,使代碼實現簡潔開發維護更加方便、便 于用戶監控。在下行方向,串口 η應用打開串口行為、關閉串口行為、寫入數據,讀取數據與多 虛擬串口系統的虛擬串口驅動程序中的對應串口設備資源產生交互操作。操作系統中的對應虛擬串口驅動程序通知多虛擬串口系統的應用層中的串口管 理模塊以接收來自應用程序串口 η應用的串口通信請求。在上行方向,串口管理模塊一旦接收到的網絡設備的數據,調用多虛擬串口系統 的操作系統中的對應串口設備的串口資源以產生網絡側的數據通信,從而由應用程序串口 η應用讀取網絡側的數據,這樣就完成網絡設備TCP/UDP通信到串口應用的上行數據交互。應用程序串口 η應用與多虛擬串口系統的操作系統中的對應串口設備的串口資 源進行交互包括應用程序串口 η應用打開,關閉,讀取,寫入等操作與多虛擬串口系統的 操作系統中的串口驅動實例號一一對應,同時,的串口驅動設置事件通知通信鏈路管理程 序的串口管理模塊,因而,應用程序串口 η應用、串口驅動資源和串口管理模塊一一對應。 這樣實現了的應用程序串口 η應用到的操作系統中的串口驅動,通信鏈路管理程序的串口 管理模塊,網絡設備的下行數據流動。通信鏈路管理程序串口管理模塊一旦接收到的網絡設備側的數據,就會調用多虛 擬串口系統的操作系統中的對應串口設備的串口資源,接著到達的應用程序串口 η應用, 以進行網絡設備通信請求的TCP/UDP通信的上行數據流動。虛擬串口驅動的資源寫數據區事件標志多次自動置位,通知通信鏈路管理程序的 串口管理模塊多次讀取數據直至數據讀完。每當通信鏈路管理程序第一次讀操作行為發生 后,自動檢測驅動的寫數據環形緩存區是否存在有效數據,如果存在,則對寫數據區事件標 志再次置位,自動重復置位直至數據讀出完畢。
4
位于多虛擬串口系統的應用層中的通信鏈路管理程序的多個串口管理模塊,其線 程處于通信鏈路管理程序的監控,一旦線程退出,監控狗自動重啟動該線程的串口管理模 塊。虛擬串口驅動程序實現由windows操作系統自身維護虛擬串口實例表,采用IRP 消息實現串口實例數量很多,數據流量很大的服務器工作方式。上述的串口資源可以為多個,其中,多個串口資源和多個串口管理模塊一一對應, 多個串口資源和多個串口應用程序一一對應。串口資源和多個串口管理模塊之間可以采用I/O Request Package (IRP,輸入/輸 出請求包)消息進行通信。各個串口資源包括以下至少之一讀數據緩存區、寫數據緩存區、定時器資源、事 件資源、鎖資源。上述的多虛擬串口系統還包括多個讀數據緩存區和多個寫數據緩存區,位于多 虛擬串口系統的操作系統層中,每個讀數據緩存區和每個寫數據緩存區分別用于被一個串 口管理模塊訪問。本發明能夠實現windows操作系統虛擬串口驅動和網絡通信技術相結合。因而適 用于windows操作系統虛擬串口驅動,網絡通信的開發應用場合。本發明能夠實現TCP/IP網絡通信系統替換串口通信系統,保持應用軟件串口方 式依然正常工作。如圖1所示,本發明采用以下技術方案。應用程序層是串口應用,主要是創建串 口,打開串口,讀取串口,寫入串口,包括同步和異步方式操作,如串口調試助手,超級終端 等。操作系統層是操作系統自帶的串口驅動或者專業廠家提供的串口驅動程序。硬件物理 層是物理串口或者擴展物理串口,提供一定數量的實際物理串口的電路芯片板。設備數據 層是指帶有串口的各種終端設備,基于物理串口而形成的RS232/RS422/RS485的網絡。本發明中虛擬串口驅動是一個可在Windows平臺計算機下操作的程序,此驅動程 序可以創造數個“虛擬”的串行端口。在串口應用程序看來,這些虛擬的串行端口跟物理的 串行端口相同。在應用程序編碼中,與傳統的普通物理串口的操作如打開串口,讀取數據, 寫入數據,以及同步與異步方式操作都是一樣。對串口設備的各種參數讀取或者設置,可 以通過windows的相關API讀取或者設置。然后保存到通信鏈路管理程序中,并與設備數 據層的網絡/串口轉換設備的物理串口產生交互,這里有兩種應用場景串口 _網絡和串 口-網絡-串口。對前者處理比較簡單,串口數據封裝成IP即可,對后者則需要經過網絡 的傳輸后還原成串口的過程。進一步地,串口應用程序對虛擬串口的操作,如設置屬性等, 最終會通過網絡傳輸作用到對應的設備物理串口上,通過網絡的傳輸相當于把串口線拉長 了,對串口應用而言看到的仍然是串口 _串口的點對點通信。對比圖1和圖2可以看出,原有的串口應用程序可以不做任何修改就可以使用。 虛擬串口驅動與傳統的物理串口驅動差異在于底層數據的傳輸。在應用程序層,串口應用 的各種軟件,通過相關API對不同串口進行打開,讀取,寫入數據等操作。這些數據交互信 息行為與驅動程序產生交互。傳統串口驅動程序會因為這些不同操作行為去操作實際的物 理串口芯片。而虛擬串口驅動程序對這些操作行為,卻是直接與應用程序層的通信鏈路管 理程序產生信息交互,并由通信鏈路管理程序進一步與設備數據層的各類通信設備交互工作,這包括一般的網絡設備,網絡/串口轉換設備。這些數據交互是雙向的。通信鏈路管理 程序采用不同的通信傳輸協議與各類通信設備通信,包括TCP server,TCP client,UDP等, 具體的協議類型軟件可配置,這樣,網路的遠距離傳輸等優勢可以充分地體現出來。所以不 論串行設備或計算機串口應用程序都無法辨別真實串行與虛擬串行傳輸的差異,實現了透 明傳輸。對于虛擬串口驅動程序,與現有技術相比較,實現目的原理各個廠家差異不大,但 設計方法多種多樣,也各有優缺點。有的廠家是在內核驅動程序中就實現了多線程,同時對 通信鏈路管理程序也提供了 windows相關API的支持,串口應用程序和通信鏈路管理程序 都可以通過標準的API接口操作,此方案的優點是程序架構清晰,因使用標準API接口訪問 從而方便第三方軟件開發使用。在本發明的虛擬串口驅動設計中,對每一個虛擬串口對應開辟一個串口資源,內 核沒有實現多線程,但在通信鏈路管理程序采用多線程技術,每個虛擬串口對應一個線程, 該線程僅負責對此虛擬串口資源的各種操作行為消息交互,同時與設備數據層的相關通信 設備數據通信。驅動程序采用IRP消息驅動,通過windows操作系統自身對消息隊列維護, 無論讀和寫環形數據區都采用事件通知方式,多級環形緩存設計,相對驅動多線程和共享 內存等方式的驅動程序,結構合理,邏輯高效,代碼簡潔,可維護性好。此外,由windows操 作系統自身維護虛擬串口實例表,采用IRP消息可以實現串口實例數量很多,數據流量很 大的服務器工作方式。圖3是根據本發明實施例的多虛擬串口系統的實現方法的流程圖。如圖3所示,DriverEntry是驅動程序的入口,虛擬串口方案主要實現步驟如下步驟Sl =AddDevice,增加虛擬串口設備,在該步驟中,在內核驅動程序中為該虛 擬串口開辟一定大小的讀數據緩存區和一定大小的寫數據緩存區,以及其他相應的定時器 KTIMER, KEVENT, KSPIN_L0CK等系統資源,把這些資源添加到虛擬串口設計結構體而生成 的新實例(IoCreateDevice)維護指針中,同時把該串口實例掛載到設備棧資源管理鏈表 (IoAttachDeviceToDeviceStack),這個鏈表是系統運行維護的重要依據。步驟S2 :IRP_MJ_WRITE 消息設計方法,VSerialWrite,串 口應用 程序使用WriteFile時,就產生該寫入數據消息。在該消息方法中,通過 IoGetCurrentlrpStackLocation獲取當前IRP消息的有關參數,并拷貝該IRP消息的相應 數據到寫緩存數據區中,寫數據緩存數據區采用環形管理,具有相應字節數量的緩存功能。 在VSerialWrite方法中,每次寫數據,通過KeSetEvent設置寫數據區的事件標志,用于表 明寫數據環形緩存區已經有了數據到來。步驟S3 與此相應,通信鏈路管理程序,對該串口實例存在一個管理線程。該 線程存在while循環,每當寫數據緩存區有數據,相應事件標志在驅動程序中會被置位, WaitForSingleObject 返回,由 DeviceIoControl 設置 WDM_I0CTL_GET_DATA 讀取虛擬串 口 驅動寫緩存區的數據。對應虛擬驅動的寫環形數據緩存區,通信鏈路管理程序中同時開辟 了讀數據環形緩存區,DeviceIoControl的IpOutBuffer為讀緩存區指針,nOutBufferSize 的數據長度最大為該讀數據區長度,在此上限條件下可以自由設置,如果虛擬驅動實例的 寫數據區數據很多,超過每次讀取的長度,寫數據區事件標志多次置位,則通信鏈路管理程 序會多次讀取數據直至數據讀完。這里涉及寫數據區事件標志如何自動重復置位問題,
6每當通信鏈路管理程序第一次讀操作行為發生后,自動檢測驅動的寫數據區是否存在有 效數據,如果存在,則對寫數據區事件標志置位,自動重復置位直至數據讀出完畢。其中, DeviceIoControl 是 windows 操作系統自身的標準函數,WDM_IOCTL_GET_DATA 同 windows 自身的驅動消息定義使用類似。有效數據是指在讀寫緩存數據中,一次沒有被讀取過的數 據,一旦被讀取過了,就是無效數據。步驟S4:通信鏈路管理程序根據與網絡設備的配置對應關系,因為是多線程設 計,不需要維護查詢較大的媒體轉發表,把驅動讀出的數據發送到下層相關網絡設備,這樣 實現了從串口應用程序,串口虛擬驅動,通信鏈路管理程序,網絡/串口設備的下行方向的 數據流動。步驟S5 相對應IRP_MJ_READ消息方法設計,通信鏈路管理程序,對應該串口實例 維護一個線程。該線程while循環,每當網絡/串口設備上傳數據時,檢測網絡端口信息標 志有數據到來,就讀取這些網絡設備的數據到相應緩存數據區中。步驟S6 通信鏈路管理程序中,一旦某線程讀取到網絡設備的數據,該線程則 會通過DeviceloComrol,虛擬串口描述符,WDM_I0CTL_SET_DATA等參數把數據寫入到 虛擬串口的讀環形緩存數據區。同時,虛擬串口驅動程序會檢測該串口實例如果存在 WaitOnMaskIrp消息和WaitMask的標志位,結束WaitOnMaskIrp消息,設置接收數據標志, 表明已有數據到驅動的讀環形緩存區。I0CTL_SERIAL_GET_C0MMSTATUS消息中設置相關參 數,以提供應用查詢狀態參數。步驟S7 :IRP_MJ_READ消息設計方法,VSerialRead,串口應用程序使用ReadFile 時,就產生該讀取數據消息。如果該虛擬串口實例的讀環形數據緩存區中存在數據,就把這 些數據拷貝到該IRP的相應數據區,如果該IRP消息產生時,讀數據區不存在有效的數據, 則把該IRP消息設置為掛起狀態,同時啟動該虛擬串口的定時器,為串口應用程序實現異 步讀取數據做準備。步驟S8 當定時器超時到達時,檢查讀取環形數據區是否存在有效的數據,如果 存在,把數據拷貝到上次掛起的IRP消息的相應數據區。同時,把上次掛起的IRP消息清 除。如果沒有數據,也會清楚上次的IRP消息。該步驟是串口應用異步讀取數據的重要保 證。這樣就可以實現同步或異步讀取數據。通過上述相關步驟,同時實現了網絡/串口設備,通信鏈路管理程序,串口虛擬驅 動串口應用程序的上行方向的數據流動。此外,通信鏈路管理程序每個串口實例CreateFile的dwShareMode標志位需要設 置為FILE_SHARE_READ FILE_SHARE_WRITE,只有這樣,才可以同時操作該串口實例的句柄, 讀寫數據等多種操作。同時在該部分程序中,分別開辟讀取和寫入環形緩存數據區。配置 一個串口實例可以對應多個通信設備數據等,實現信息交互。圖4是根據本發明實施例的多虛擬串口系統的通信方法的流程圖。如圖4所示,根據本發明實施例的多虛擬串口系統的通信方法包括步驟S402,多虛擬串口系統的應用層中的串口管理模塊接收來自應用程序的串口 通信請求。步驟S404,串口管理模塊調用多虛擬串口系統的操作系統中的對應串口設備的串 口資源,以進行串口通信請求所請求的串口通信。
串口管理模塊調用多虛擬串口系統的操作系統中的對應串口設備的串口資源包 括串口管理模塊調用多虛擬串口系統的操作系統中與串口管理模塊一一對應的串口資 源,其中,多個串口資源和多個串口設備一一對應。優選地,串口管理模塊調用多虛擬串口系統的操作系統中的對應串口設備的串口 資源,以進行串口通信請求所請求的串口通信包括應用程序利用串口通信,與串口設備交 換數據。上述方法還可以包括串口管理模塊訪問多虛擬串口系統中與其一一對應的讀數 據緩存區和寫數據緩存區。串口資源和多個串口管理模塊之間可以采用IRP消息進行通信。從以上的描述中,可以看出,本發明的技術方案具有如下優點1)可以不用維護媒體轉發表,即虛擬串口設備和網絡通信協議端口號的對應表, 每個線程負責守護對應的套接字端口,而線程與虛擬串口之間是唯一綁定的,較單線程查 詢媒體轉發表方式效率要高。2)多線程雖然耗費更多的系統資源,但由于分布式處理,可靠性較單線程集中式 處理要高,單線程異常退出只會影響對應的虛擬串口業務流處理,從而保證故障不擴散到全局。顯然,本領域的技術人員應該明白,上述的本發明的各模塊或各步驟可以用通用 的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成 的網絡上,可選地,它們可以用計算裝置可執行的程序代碼來實現,從而,可以將它們存儲 在存儲裝置中由計算裝置來執行,并且在某些情況下,可以以不同于此處的順序執行所示 出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或 步驟制作成單個集成電路模塊來實現。這樣,本發明不限制于任何特定的硬件和軟件結合。以上所述僅為本發明的優選實施例而已,并不用于限制本發明,對于本領域的技 術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修 改、等同替換、改進等,均應包含在本發明的保護范圍之內。
權利要求
一種多虛擬串口系統,其特征在于,包括多個串口管理模塊,位于所述多虛擬串口系統的應用層中,用于調用對應串口設備的串口資源進行串口通信,其中,所述串口資源位于所述多虛擬串口系統的操作系統層中。
2.根據權利要求1所述的多虛擬串口系統,其特征在于,所述串口資源為多個,其中, 所述多個串口資源和所述多個串口管理模塊一一對應,所述多個串口資源和多個串口應用程序一一對應。
3.根據權利要求2所述的多虛擬串口系統,其特征在于,所述串口資源和所述多個串 口管理模塊之間采用IRP消息進行通信。
4.根據權利要求2所述的多虛擬串口系統,其特征在于,各個所述串口資源包括以下 至少之一讀數據緩存區、寫數據緩存區、定時器資源、事件資源、鎖資源。
5.根據權利要求1所述的多虛擬串口系統,其特征在于,還包括多個讀數據緩存區和多個寫數據緩存區,位于所述多虛擬串口系統的操作系統層中, 每個所述讀數據緩存區和每個所述寫數據緩存區分別用于被一個所述串口管理模塊訪問。
6.一種多虛擬串口系統的通信方法,其特征在于,包括所述多虛擬串口系統的應用層中的串口管理模塊接收來自應用程序的串口通信請求;所述串口管理模塊調用所述多虛擬串口系統的操作系統中的對應串口設備的串口資 源,以進行所述串口通信請求所請求的串口通信。
7.根據權利要求6所述的方法,其特征在于,所述串口管理模塊調用所述多虛擬串口 系統的操作系統中的對應串口設備的串口資源包括所述串口管理模塊調用所述多虛擬串口系統的操作系統中與所述串口管理模塊一一 對應的串口資源,其中,所述多個串口資源和多個串口應用程序一一對應。
8.根據權利要求7所述的方法,其特征在于,所述串口管理模塊調用所述多虛擬串口 系統的操作系統中的對應串口設備的串口資源,以進行所述串口通信請求所請求的串口通 信包括所述應用程序利用所述串口通信,與所述串口設備交換數據。
9.根據權利要求7所述的方法,其特征在于,還包括所述串口管理模塊訪問所述多虛擬串口系統中與其一一對應的讀數據緩存區和寫數 據緩存區。
10.根據權利要求9所述的方法,其特征在于,所述串口資源包括事件資源,所述串 口管理模塊訪問所述多虛擬串口系統中與其一一對應的讀數據緩存區和寫數據緩存區包 括對所述事件資源進行多次自動置位直到所述寫數據緩存區中的數據被訪問完。
全文摘要
本發明公開了一種多虛擬串口系統及其通信方法。其中,該多虛擬串口系統包括多個串口管理模塊,該串口管理模塊位于所述多虛擬串口系統的應用層中,用于調用對應串口設備的串口資源進行串口通訊,其中,所述串口資源位于所述多虛擬串口系統的操作系統層中。通過本發明,能夠使代碼實現簡潔,以及使虛擬串口數據的流量更大。
文檔編號G06F9/455GK101894041SQ201010232240
公開日2010年11月24日 申請日期2010年7月15日 優先權日2010年7月15日
發明者劉俊峰, 陳明恩 申請人:中興通訊股份有限公司