楊貴福,胡佑蓉,劉淑霞,劉振邦,包 宇
(1.東北師范大學(xué)信息科學(xué)與技術(shù)學(xué)院,吉林 長(zhǎng)春 130117; 2.廣州大學(xué)化學(xué)化工學(xué)院分析科學(xué)技術(shù)研究中心,廣東 廣州 510006; 3.廣州大學(xué)土木工程學(xué)院,廣東 廣州 510006)
高分辨掃描電致發(fā)光顯微成像系統(tǒng)是計(jì)算機(jī)控制的通用電化學(xué)測(cè)量分析系統(tǒng),為國(guó)家重大科研儀器研制項(xiàng)目。其內(nèi)部由快速數(shù)字波形發(fā)生器、高速數(shù)據(jù)采集電路、多功能恒電位/電流儀、低通濾波器、溶液電阻補(bǔ)償電路等組成,分析儀需要由安裝在PC上的成像系統(tǒng)軟件進(jìn)行控制,儀器與PC機(jī)通過(guò)USB 2.0/3.0接口進(jìn)行通信,實(shí)驗(yàn)測(cè)量結(jié)果最終存儲(chǔ)和顯示在PC機(jī)上。
現(xiàn)如今,操作系統(tǒng)更新?lián)Q代速度越來(lái)越快,而硬件設(shè)備升級(jí)較慢,對(duì)于驅(qū)動(dòng)不適應(yīng)新的操作系統(tǒng)的遺留系統(tǒng)將面臨著越來(lái)越大的壓力。遺留系統(tǒng)[1]是指不再支持操作系統(tǒng)或其他計(jì)算機(jī)技術(shù)有關(guān)的源代碼。當(dāng)平臺(tái)升級(jí)(或被取代)時(shí),遺留代碼不能再正常工作,不能運(yùn)行在更高版本的系統(tǒng)上,需要兼容層才能正常運(yùn)行執(zhí)行代碼。
在軟硬件設(shè)備協(xié)同開(kāi)發(fā)[2]中,由于操作系統(tǒng)的升級(jí)或變更,當(dāng)軟件與硬件設(shè)備進(jìn)行通信時(shí),如果驅(qū)動(dòng)與操作系統(tǒng)位數(shù)不匹配,原軟件的驅(qū)動(dòng)便不能運(yùn)行在更高版本的操作系統(tǒng)上,從而影響設(shè)備的使用。想要解決設(shè)備驅(qū)動(dòng)[3]不兼容新的操作系統(tǒng)的問(wèn)題,第1種方案是購(gòu)買新的設(shè)備[4],但會(huì)增加額外的費(fèi)用開(kāi)支;第2種方案是對(duì)軟件的遺留代碼進(jìn)行處理,這種方式是開(kāi)發(fā)人員常用方式。遺留代碼的處理方式一般有2種:1)建立新的軟件系統(tǒng)、新的數(shù)據(jù),摒棄原有的代碼,這樣做能夠從根本上改觀遺留代碼帶來(lái)的困擾;2)使用技術(shù)和方案來(lái)改進(jìn)和維護(hù)已有的遺留代碼,在本質(zhì)上不改變遺留代碼[5-6]的整體架構(gòu),保留系統(tǒng)的體系結(jié)構(gòu)部件,來(lái)達(dá)到預(yù)期的功能,顯然這種方式為更佳之選。
針對(duì)遺留系統(tǒng)[7]復(fù)用和系統(tǒng)升級(jí)的問(wèn)題,研究者從各種角度對(duì)其進(jìn)行剖析。文獻(xiàn)[8]提出基于面向服務(wù)的體系結(jié)構(gòu)架構(gòu)的再工程方法,將遺留系統(tǒng)封裝成服務(wù)器對(duì)外提供服務(wù)。文獻(xiàn)[9]通過(guò)面向?qū)ο蟮姆治龊驮O(shè)計(jì)方法,運(yùn)行POSIX線程模式來(lái)取代遺留系統(tǒng)中的進(jìn)程模式,以提升系統(tǒng)的功能、性能以及系統(tǒng)的可維護(hù)性。文獻(xiàn)[10]對(duì)基于Spring Cloud微服務(wù)框架實(shí)現(xiàn)的購(gòu)物商城遺留系統(tǒng)提供了重構(gòu)方法和實(shí)踐,重構(gòu)系統(tǒng)后明顯改善了系統(tǒng)的運(yùn)行效率和系統(tǒng)可用性。文獻(xiàn)[11]提出利用中間件技術(shù)通過(guò)構(gòu)件化實(shí)現(xiàn)對(duì)遺留系統(tǒng)改造的方法,挖掘了遺留系統(tǒng)的可用價(jià)值,增強(qiáng)了系統(tǒng)的演化能力。上述研究通過(guò)不同的角度推動(dòng)了遺留系統(tǒng)的發(fā)展,節(jié)省了開(kāi)發(fā)和維護(hù)成本,然而,仍舊存在以下2個(gè)不足:1)由于沒(méi)有很好地解決遺留代碼遺留的風(fēng)險(xiǎn),限制了其遺留系統(tǒng)[12]的應(yīng)用;2)修改了較多的代碼來(lái)復(fù)用遺留系統(tǒng),工作量較大。
針對(duì)驅(qū)動(dòng)升級(jí)的問(wèn)題,文獻(xiàn)[13]通過(guò)VFN技術(shù)實(shí)現(xiàn)軟硬件分離,一定程度上解除了VNF層和NFVI的強(qiáng)耦合關(guān)系,使VNF層和NFVI層能夠獨(dú)立完成升級(jí),減少升級(jí)時(shí)間,提高升級(jí)效率,有助于盡快降低其他站點(diǎn)的負(fù)載,減少了網(wǎng)絡(luò)的風(fēng)險(xiǎn)率。文獻(xiàn)[14]使上位機(jī)通過(guò)CAN將本地的閃存驅(qū)動(dòng)和文件傳輸?shù)娇刂破髦?,彌補(bǔ)了MCU的FlashROM空間不足,同時(shí)也提高了代碼的執(zhí)行速度和效率。上述研究通過(guò)不同的方法解決了驅(qū)動(dòng)升級(jí)的問(wèn)題,提高了執(zhí)行效率。然而,這2類方法不適用遺留系統(tǒng)的驅(qū)動(dòng)升級(jí)。
據(jù)此,本文通過(guò)研究和分析用戶所遇到的問(wèn)題以及解決方案的優(yōu)缺點(diǎn),最終采用命名管道[15]技術(shù)作為中間件[11]的方案實(shí)現(xiàn)對(duì)遺留代碼的改造,從而使系統(tǒng)與設(shè)備成功通信。在通信過(guò)程中,系統(tǒng)與設(shè)備通過(guò)驅(qū)動(dòng)進(jìn)行通信,利用命名管道技術(shù)實(shí)現(xiàn)一個(gè)接收多客戶機(jī)的服務(wù)端,不需要大量更改系統(tǒng)的遺留代碼,通過(guò)增加一個(gè)中間層,便能解決驅(qū)動(dòng)不適用于新的操作系統(tǒng)的問(wèn)題,實(shí)現(xiàn)了系統(tǒng)的低耦合、高內(nèi)聚。利用軟件復(fù)用的思想,在已有遺留系統(tǒng)開(kāi)發(fā)勞動(dòng)成果的基礎(chǔ)上實(shí)現(xiàn)復(fù)用,開(kāi)發(fā)滿足用戶新需求的系統(tǒng),消除了重復(fù)的勞動(dòng),提高了軟件開(kāi)發(fā)的質(zhì)量和效率。
命名管道是Windows操作系統(tǒng)提供的一種簡(jiǎn)單的進(jìn)程間通信[16](Inter-Process Communication,IPC)機(jī)制[17],可在本地和網(wǎng)絡(luò)的不同進(jìn)程之間,支持可靠的、單向或雙向的數(shù)據(jù)通信。命名管道是一種內(nèi)存緩沖區(qū),系統(tǒng)在一個(gè)進(jìn)程寫(xiě)命名管道和另一個(gè)進(jìn)程讀命名管道時(shí)在其中保存數(shù)據(jù)。命名管道不需要基層網(wǎng)絡(luò)協(xié)議來(lái)實(shí)現(xiàn)數(shù)據(jù)傳輸。命名管道代碼實(shí)現(xiàn)起來(lái)比較簡(jiǎn)潔和靈活,且更有利于維護(hù)。
每個(gè)命名的管道都有一個(gè)唯一的名稱,將其與系統(tǒng)的命名對(duì)象列表中的其它命名管道區(qū)分開(kāi)來(lái)。管道服務(wù)器在調(diào)用CreateNamedPipe函數(shù)時(shí)創(chuàng)建一個(gè)或多個(gè)命名管道實(shí)例。管道客戶端在調(diào)用CreateFile或CallNamedPipe函數(shù)來(lái)連接命名管道實(shí)例時(shí)指定管道名稱,管道名稱使用的格式為:\ServerNamepipePipeName。其中ServerName是遠(yuǎn)程計(jì)算機(jī)的名稱,用于指定本地計(jì)算機(jī),PipeName指定的管道名稱字符串可以包括除反斜杠之外的任何字符,包括數(shù)字和特殊字符。管道服務(wù)端無(wú)法在另一臺(tái)計(jì)算機(jī)上創(chuàng)建管道,CreateNamedPipe必須使用服務(wù)器名稱的句點(diǎn),格式為:\.pipePipeName,管道服務(wù)器可以向其管道客戶端提供管道名稱,以便它們連接到管道。
一個(gè)程序創(chuàng)建命名管道時(shí),命名管道就會(huì)存在。創(chuàng)建命名管道的程序?yàn)槊艿婪?wù)端,而其他的進(jìn)程為客戶端。命名管道的服務(wù)端可創(chuàng)建單個(gè)管道實(shí)例連接單個(gè)客戶端進(jìn)行通信。命名管道服務(wù)器也可以使用單個(gè)管道實(shí)例來(lái)連接多個(gè)管道客戶端,支持一對(duì)一的C/S和一對(duì)多的C/S通信。通常采用管道服務(wù)端創(chuàng)建多個(gè)管道實(shí)例以有效地同時(shí)處理多個(gè)客戶端[12]。
命名管道的通信流程如圖1所示。
圖1 命名管道的通信流程
服務(wù)器端首先使用API函數(shù)CreateNamedPipe創(chuàng)建一個(gè)命名管道實(shí)例句柄,并使用API函數(shù)ConnectNamedPipe在命名管道實(shí)例上監(jiān)聽(tīng)客戶機(jī)的連接請(qǐng)求,再分別使用API函數(shù)ReadFile和WriteFile從客戶機(jī)接收數(shù)據(jù)或?qū)?shù)據(jù)發(fā)送給客戶機(jī),最后使用API函數(shù)DisconnectNamedPipe和CloseHandle關(guān)閉命名管道的連接和關(guān)閉命名管道實(shí)例句柄??蛻舳耸紫仁褂肁PI函數(shù)WaitNamedPipe和CreateFile檢測(cè)管道并建立與命名管道的連接,再使用API函數(shù)WriteFile和ReadFile分別向服務(wù)器發(fā)送數(shù)據(jù)或從中接收數(shù)據(jù),最后使用API函數(shù)CloseHandle關(guān)閉打開(kāi)的命名管道會(huì)話[12]。
命名管道通信方式有很多優(yōu)點(diǎn):1)本地和網(wǎng)絡(luò)都可以使用;2)可以在不相關(guān)進(jìn)程間進(jìn)行通信;3)可以打開(kāi)指定文件進(jìn)行通信;4)支持多客戶端連接;5)支持單/雙向通信;6)支持異步重疊I/O操作[15]。由于命名管道使用的靈活性,其常被用來(lái)解決進(jìn)程間通信和數(shù)據(jù)安全傳輸?shù)膯?wèn)題,在各個(gè)領(lǐng)域都應(yīng)用廣泛。
隨著網(wǎng)絡(luò)和技術(shù)的發(fā)展,在信息安全等領(lǐng)域,為了保證科研信息管理系統(tǒng)安全,研究人員通常會(huì)采用命名管道技術(shù)編程實(shí)現(xiàn)數(shù)據(jù)安全通信[17]。命名管道作為數(shù)據(jù)通信的傳輸通道,可以保證數(shù)據(jù)安全可靠地傳輸。對(duì)于冶金、化工等領(lǐng)域,開(kāi)發(fā)人員也常使用命名管道機(jī)制實(shí)現(xiàn)過(guò)程控制計(jì)算機(jī)服務(wù)器和上位機(jī)、下位機(jī)以及同位機(jī)人機(jī)接口(Human Machine Interface, HMI)的通信[18]。采用這樣的方法和這樣的設(shè)計(jì),開(kāi)發(fā)進(jìn)程通信程序,方便可靠、開(kāi)發(fā)成本小,并且可以很方便地?cái)U(kuò)展HMI客戶端的使用數(shù)量。
本文對(duì)比了WinDriver、WDM、VxD、WinUSB等多個(gè)主流驅(qū)動(dòng)。WinDriver[20]驅(qū)動(dòng)制作程序簡(jiǎn)單,但調(diào)錯(cuò)困難;WDM[21]開(kāi)發(fā)復(fù)雜,驅(qū)動(dòng)功能有限;VxD[22]新操作系統(tǒng)不兼容驅(qū)動(dòng)。升級(jí)高分辨率掃描電致發(fā)光顯微成像系統(tǒng)最終使用WinUSB[23]作為新的驅(qū)動(dòng),WinUSB支持Windows不同版本,且WinUSB支持多種USB的功能,滿足設(shè)備對(duì)驅(qū)動(dòng)的需求,且開(kāi)發(fā)簡(jiǎn)單。WinUSB由于一次只能有一個(gè)實(shí)例,在不修改遺留軟件代碼[24]的原則上,WinUSB[25]不能與上位機(jī)遺留軟件通信。對(duì)比信號(hào)量、匿名管道、命名管道、Socket等多種進(jìn)程通信的方式,本文最終選擇命名管道技術(shù)作為中間件,以命名管道和WinUSB驅(qū)動(dòng)的異構(gòu)通信方式來(lái)使上位機(jī)和下位機(jī)通信[26]。使用原驅(qū)動(dòng)的通信和使用命名管道和WinUSB技術(shù)進(jìn)行驅(qū)動(dòng)升級(jí)的新通信如圖2所示。
圖2 2種通信方式
在原驅(qū)動(dòng)通信中,上位機(jī)應(yīng)用直接通過(guò)原驅(qū)動(dòng)來(lái)與硬件進(jìn)行通信,驅(qū)動(dòng)扮演溝通的角色,把硬件的功能告訴上位機(jī)應(yīng)用系統(tǒng),并且也將系統(tǒng)的指令傳達(dá)給硬件,讓它開(kāi)始工作。由于原驅(qū)動(dòng)已經(jīng)不適應(yīng)新的操作系統(tǒng)了,于是提出了命名管道結(jié)合驅(qū)動(dòng)異構(gòu)通信。
在命名管道通信中,P1、P2是命名管道2個(gè)實(shí)例,一個(gè)用于上行數(shù)據(jù),一個(gè)用于下行數(shù)據(jù)。當(dāng)上位機(jī)應(yīng)用寫(xiě)數(shù)據(jù)時(shí),觸發(fā)命名管道服務(wù)端響應(yīng),響應(yīng)的動(dòng)作是寫(xiě)數(shù)據(jù)給WinUSB驅(qū)動(dòng),這個(gè)過(guò)程為下行數(shù)據(jù)。當(dāng)下位機(jī)返回?cái)?shù)據(jù)時(shí),WinUSB驅(qū)動(dòng)使用命名管道技術(shù)結(jié)合驅(qū)動(dòng)方法代替原版本的驅(qū)動(dòng),讓上位機(jī)應(yīng)用軟件與硬件設(shè)備進(jìn)行通信。本文將命名管道實(shí)現(xiàn)的服務(wù)器稱為MARIO(Mario’s Access Redirection I/O)。
MARIO是基于命名管道技術(shù)實(shí)現(xiàn)的服務(wù)端,MARIO在主線程中創(chuàng)建2個(gè)命名管道實(shí)例,分別對(duì)應(yīng)于2個(gè)子線程。一個(gè)命名管道實(shí)例用于下行數(shù)據(jù),即下行子線程,通過(guò)該命名管道實(shí)例,從上位機(jī)讀數(shù)據(jù),然后將數(shù)據(jù)寫(xiě)給驅(qū)動(dòng),驅(qū)動(dòng)將數(shù)據(jù)寫(xiě)給下位機(jī)。另一個(gè)命名管道實(shí)例用于上行數(shù)據(jù),即上行子線程,通過(guò)該命名管道實(shí)例,MARIO讀取驅(qū)動(dòng)數(shù)據(jù),然后將數(shù)據(jù)寫(xiě)給上位機(jī),上位機(jī)根據(jù)下位機(jī)返回的協(xié)議數(shù)據(jù),處理后繪制實(shí)驗(yàn)曲線。MARIO的功能結(jié)構(gòu)如圖3所示。
圖3 MARIO的功能結(jié)構(gòu)圖
圖3中,上位機(jī)中的Writer程序的作用是負(fù)責(zé)向下位機(jī)寫(xiě)數(shù)據(jù),上位機(jī)的Reader程序的作用是從下位機(jī)讀數(shù)據(jù)。WinUSB是使用WinUSB技術(shù)實(shí)現(xiàn)的動(dòng)態(tài)鏈接庫(kù)。MARIO的功能是打開(kāi)驅(qū)動(dòng)、讀/寫(xiě)驅(qū)動(dòng)和讀寫(xiě)管道,MARIO讀取上位機(jī)Writer的數(shù)據(jù)后,將數(shù)據(jù)寫(xiě)給驅(qū)動(dòng)WinUSB,驅(qū)動(dòng)WinUSB將數(shù)據(jù)傳給下位機(jī)。下位機(jī)收到數(shù)據(jù)之后,會(huì)返回?cái)?shù)據(jù),然后MARIO讀取驅(qū)動(dòng)WinUSB的數(shù)據(jù),將數(shù)據(jù)寫(xiě)給上位機(jī)的Reader,上位機(jī)再通過(guò)Reader的數(shù)據(jù)處理后繪制曲線,上位機(jī)的Writer和Reader程序是命名管道MARIO的客戶端,MARIO是一服務(wù)端多客戶端實(shí)現(xiàn)的模型。對(duì)于上位機(jī)和下位機(jī)程序而言,MARIO是透明的,這使得MARIO具有通用性,能夠適用驅(qū)動(dòng)升級(jí)和驅(qū)動(dòng)更新等多種應(yīng)用場(chǎng)景。
上位機(jī)與下位機(jī)的一般的通信方式是上位機(jī)通過(guò)驅(qū)動(dòng)與下位機(jī)進(jìn)行通信。本文提供了一種使用命名管道技術(shù)結(jié)合驅(qū)動(dòng)方法代替舊版本的驅(qū)動(dòng)[26],讓上位機(jī)與下位機(jī)進(jìn)行通信。
命名管道結(jié)合驅(qū)動(dòng)方法在傳送上位機(jī)和下位機(jī)的數(shù)據(jù)時(shí),可以由用戶運(yùn)行軟件發(fā)送下行指令,也可以是下位機(jī)收到下行指令后,下位機(jī)發(fā)送上行指令。上行和下行都打開(kāi)WinUSB提供同一個(gè)文件(不關(guān)閉,只打開(kāi)一次),上層的上位機(jī)通過(guò)訪問(wèn)命名管道服務(wù)端提供的管道進(jìn)行通信。使用命名管道進(jìn)行上下位機(jī)通信的系統(tǒng)結(jié)構(gòu)如圖4所示。
圖4 利用命名管道的上下位機(jī)通信的系統(tǒng)結(jié)構(gòu)圖
為驗(yàn)證本文提出的命名管道結(jié)合驅(qū)動(dòng)方法更新驅(qū)動(dòng)的有效性,本文選用遺留系統(tǒng)中10種電化學(xué)實(shí)驗(yàn)進(jìn)行測(cè)試,具體如表1所示。表中check為連接測(cè)試,其他實(shí)驗(yàn)數(shù)據(jù)為10種電化學(xué)實(shí)驗(yàn)每個(gè)實(shí)驗(yàn)上行和下行數(shù)據(jù)包的大小以及每個(gè)實(shí)驗(yàn)的數(shù)據(jù)包的個(gè)數(shù),本研究在Win10 64位系統(tǒng)、Win8 64系統(tǒng)、Win7 32位系統(tǒng)下進(jìn)行了實(shí)驗(yàn)驗(yàn)證。
表1 待檢測(cè)實(shí)驗(yàn)的數(shù)據(jù)匯總表
實(shí)驗(yàn)協(xié)議數(shù)據(jù)包大小/B協(xié)議數(shù)據(jù)包個(gè)數(shù)Check644CV64350CA256178CC1024213ITC102425LSV64183CP256662DPV6435NPV6422SWV6420OCV64350
Win7 32位系統(tǒng)上位機(jī)與下位機(jī)[27]通信使用原驅(qū)動(dòng)。Win10 64位和Win8 64位系統(tǒng)上位機(jī)與下位機(jī)通信使用MARIO和WinUSB異構(gòu)通信,在Win7 32位系統(tǒng)下和在Win10 64位系統(tǒng)下,在做上下位機(jī)通信實(shí)驗(yàn)時(shí),都使用Bus Hound抓取數(shù)據(jù)。
表1中所有的實(shí)驗(yàn)在64位系統(tǒng)下用MARIO結(jié)合驅(qū)動(dòng)的方法升級(jí)的軟件都成功地得到了與Win7 32位系統(tǒng)類似的曲線和實(shí)驗(yàn)數(shù)據(jù),將64位系統(tǒng)得到的實(shí)驗(yàn)數(shù)據(jù)與Win7 32位系統(tǒng)原驅(qū)動(dòng)的實(shí)驗(yàn)數(shù)據(jù)作比較,兩者實(shí)驗(yàn)數(shù)據(jù)的相對(duì)誤差在0.000~0.001之間。如表2所示,以CA實(shí)驗(yàn)為例在4950組數(shù)據(jù)隨機(jī)截取一小段(10組)實(shí)驗(yàn)數(shù)據(jù)做對(duì)比,絕對(duì)誤差在0.00E-05~0.03E-05。
表2 64位和32位系統(tǒng)下CA實(shí)驗(yàn)結(jié)果
32位64位誤差時(shí)間/s電位/V電流/A時(shí)間/s電位/V電流/A電流/A0.2710.56.80E-050.2710.56.80E-050.00E-050.2720.56.71E-050.2720.56.71E-050.00E-050.2730.56.65E-050.2730.56.65E-050.00E-050.2740.56.59E-050.2740.56.56E-050.03E-050.2750.56.46E-050.2750.56.46E-050.00E-050.2760.56.40E-050.2760.56.43E-050.03E-050.2770.56.34E-050.2770.56.31E-050.03E-050.2780.56.28E-050.2780.56.28E-050.00E-050.2790.56.19E-050.2790.56.22E-050.03E-050.2800.56.09E-050.2800.56.09E-050.00E-05
將64位系統(tǒng)與32位系統(tǒng)的全部實(shí)驗(yàn)數(shù)據(jù)使用Excel畫(huà)在同一坐標(biāo)圖中展示,如圖5所示,32位系統(tǒng)和64位系統(tǒng)的實(shí)驗(yàn)數(shù)據(jù)生成的曲線重合。
圖5 CA(計(jì)時(shí)電流法)實(shí)驗(yàn)
升級(jí)后的電化學(xué)軟件,在Win10 64位系統(tǒng)和Win8 64位系統(tǒng)上做實(shí)驗(yàn),Bus Hound抓取的下行指令和上行指令,觀察到的與遺留系統(tǒng)軟件使用原驅(qū)動(dòng)在Win7 32位系統(tǒng)上做實(shí)驗(yàn),Bus Hound抓取的下行數(shù)據(jù)與上行數(shù)據(jù)一致。圖6、圖7以2個(gè)典型的實(shí)驗(yàn)(NPV實(shí)驗(yàn)、SWV實(shí)驗(yàn))為例,在64位系統(tǒng)下和32位系統(tǒng)下設(shè)置相同的實(shí)驗(yàn)參數(shù)進(jìn)行實(shí)驗(yàn)。
如表3所示,64位系統(tǒng)得到的NPV實(shí)驗(yàn)數(shù)據(jù)與32位系統(tǒng)原驅(qū)動(dòng)的NPV實(shí)驗(yàn)數(shù)據(jù)做了比較,兩者實(shí)驗(yàn)數(shù)據(jù)的絕對(duì)誤差在0.00E-05~0.19E-05。圖6將在Win7 32位系統(tǒng)的電腦上用原驅(qū)動(dòng)的電化學(xué)軟件測(cè)試得到的結(jié)果數(shù)據(jù)與在Win10 64位系統(tǒng)用MARIO升級(jí)的電化學(xué)軟件測(cè)試得到的結(jié)果數(shù)據(jù)畫(huà)在同一幅圖中。從圖6可以看出,在誤差范圍內(nèi),使用MARIO結(jié)合驅(qū)動(dòng)方法與原驅(qū)動(dòng)生成的NPV曲線重合。
表3 64位和32位系統(tǒng)下NPV實(shí)驗(yàn)結(jié)果
64位32位誤差電壓/V電流/A電壓/V電流/A電流/A0.11.11E-050.11.07E-050.04E-050.22.13E-050.21.94E-050.19E-050.33.12E-050.33.05E-050.07E-050.44.14E-050.44.00E-050.14E-050.55.09E-050.55.05E-050.04E-050.66.17E-050.66.13E-050.04E-050.77.16E-050.77.03E-050.13E-050.88.14E-050.88.23E-050.09E-050.99.10E-050.99.19E-050.09E-051.01.11E-051.01.07E-050.04E-05
圖6 NPV(常規(guī)脈沖伏安法)實(shí)驗(yàn)圖
如表4所示,表中將64系統(tǒng)得到的SWV實(shí)驗(yàn)數(shù)據(jù)與32位系統(tǒng)原驅(qū)動(dòng)的SWV實(shí)驗(yàn)數(shù)據(jù)做了比較,兩者的實(shí)驗(yàn)數(shù)據(jù)完全一致,誤差為0。圖7將在Win7 32位系統(tǒng)的電腦上用原驅(qū)動(dòng)的電化學(xué)軟件測(cè)試得到的結(jié)果數(shù)據(jù)與在Win10 64位系統(tǒng)用MARIO升級(jí)的電化學(xué)軟件測(cè)試得到的結(jié)果數(shù)據(jù)畫(huà)在同一幅圖中。從圖7可以看出,使用異構(gòu)通信方法與原驅(qū)動(dòng)生成的SWV曲線重合。
表4 64位和32位系統(tǒng)下SWV實(shí)驗(yàn)結(jié)果
32位64位誤差電壓/V電流/A電壓/V電流/A電流/A0.050013.28E-060.050013.28E-060.00E-060.152.98E-060.152.98E-060.00E-06
圖7 SWV(方波伏安法)實(shí)驗(yàn)圖
上述的實(shí)驗(yàn)數(shù)據(jù)和實(shí)驗(yàn)曲線表明,使用MARIO和WinUSB代替原有的驅(qū)動(dòng),從而使遺留系統(tǒng)[28-29]驅(qū)動(dòng)升級(jí)這種方法是有效的,且MARIO和WinUSB異構(gòu)通信具有低耦合的特性,驅(qū)動(dòng)升級(jí)后的電化學(xué)軟件能夠適用于現(xiàn)有主流的Windows系統(tǒng),并在性能和功能上滿足用戶需求。
實(shí)踐證明,基于命名管道結(jié)合驅(qū)動(dòng)方法來(lái)實(shí)現(xiàn)上位機(jī)與下位機(jī)的通信,是簡(jiǎn)單、方便和高效的。不僅解決了軟件不適應(yīng)新的操作系統(tǒng)和遺留系統(tǒng)驅(qū)動(dòng)升級(jí)的問(wèn)題,而且使得數(shù)據(jù)可以得到備份。本文的方法只需修改很少的遺留系統(tǒng)代碼,減少了遺留系統(tǒng)遷移的工作量,使遺留代碼得到復(fù)用。本文的異構(gòu)通信策略為解決遺留系統(tǒng)升級(jí)和驅(qū)動(dòng)不適用于新的操作系統(tǒng)的問(wèn)題提供了一個(gè)很好的方案,利用命名管道技術(shù)作為2個(gè)進(jìn)程之間數(shù)據(jù)通信的橋梁,減少了設(shè)備對(duì)驅(qū)動(dòng)的依賴。本文所述的方法具有通用性,已經(jīng)在某電化學(xué)項(xiàng)目上得到了應(yīng)用,極大簡(jiǎn)化了開(kāi)發(fā)人員的工作。