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