湯佳明,安偉
(江南大學(xué)機(jī)械工程學(xué)院,江蘇無(wú)錫214122)
隨著工業(yè)自動(dòng)化進(jìn)程的不斷深入,虛擬儀器的使用越來(lái)越普遍,上位機(jī)作為虛擬儀器的一部分在工業(yè)生產(chǎn)與科學(xué)研究領(lǐng)域也被廣泛得使用,在測(cè)控與軟件設(shè)計(jì)方面已有了許多成功實(shí)例。上位機(jī)的功能是發(fā)出指令并傳送至下位機(jī)端,在這一過(guò)程中,數(shù)據(jù)的傳輸與反饋需要監(jiān)控,故根據(jù)需求設(shè)計(jì)相關(guān)的上位機(jī)程序顯得很有必要。
LABVIEW作為一款已被廣泛使用的虛擬儀器開(kāi)發(fā)平臺(tái),在教學(xué)、研究、測(cè)試和生產(chǎn)自動(dòng)化領(lǐng)域被廣泛應(yīng)用[1]。其圖形化編程界面與常規(guī)編程語(yǔ)言的不同在于以圖形數(shù)據(jù)流代替了代碼,這對(duì)于從事工程應(yīng)用的工程師而言簡(jiǎn)潔易懂,故可靈活迅速地開(kāi)發(fā)上位機(jī)軟件。同時(shí),LABVIEW提供很多外觀與傳統(tǒng)儀器(如示波器、萬(wàn)用表)類似的控件,可以方便地創(chuàng)建用戶界面[2]。通過(guò)LABVIEW搭建的控制系統(tǒng),軟件程序是其核心[3]。本文基于串口通信原理,編寫了上位機(jī)通信監(jiān)控程序,并對(duì)其進(jìn)行模擬通信驗(yàn)證。
本文設(shè)計(jì)的上位機(jī)軟件程序是基于串口通信方式,串口通信是一種在計(jì)算機(jī)與計(jì)算機(jī)之間或者計(jì)算機(jī)與外圍設(shè)備之間傳送數(shù)據(jù)的常用方法[4],通常應(yīng)用于傳統(tǒng)儀器的控制和緩慢變化信號(hào)的采集[5]。
在本文的串口通信過(guò)程中,上位機(jī)寫入的為字符類型的數(shù)據(jù),而后軟件將字符按照單個(gè)的字節(jié)位發(fā)送至接收端,作為接收端的下位機(jī)一方再將這些位組成完整的字節(jié),從而完成數(shù)據(jù)的傳送。通常采用美國(guó)信息交換標(biāo)準(zhǔn)代碼(American Standard Code for Information Interchange,ASCII)表示數(shù)據(jù)位對(duì)應(yīng)的值,當(dāng)傳輸特定文件時(shí)則會(huì)使用二進(jìn)制數(shù)據(jù)類型。在串口通信中,數(shù)據(jù)位是數(shù)據(jù)幀格式的一部分,完整的數(shù)據(jù)幀一般涵蓋了起始位、數(shù)據(jù)位、校驗(yàn)位與停止位。校驗(yàn)位根據(jù)字符編碼中“1”的數(shù)目用于檢查數(shù)據(jù)的準(zhǔn)確性。
在通信傳輸過(guò)程中,按照相同的通信規(guī)則規(guī)定上位機(jī)與下位機(jī)端口的性質(zhì),即對(duì)兩者的通信端口進(jìn)行初始化設(shè)置,按要求設(shè)置通信端口的傳輸速度、單位、起始位、停止位和校驗(yàn)位等參數(shù),這一過(guò)程由LABVIEW中的虛擬儀器軟件架構(gòu)(Virtual Instrument Software Architecture,VISA)模塊實(shí)現(xiàn)。VISA作為一個(gè)綜合軟件包模塊,可在任何平臺(tái)、總線和環(huán)境下對(duì)串口進(jìn)行配置、編程和調(diào)試[6]。同時(shí),VISA也是測(cè)試程序與數(shù)據(jù)傳輸中總線的中間層,為應(yīng)用程序和儀器總線的通信建立了通道,是應(yīng)用于儀器編程的標(biāo)準(zhǔn)I/O應(yīng)用程序接口[7]。同時(shí),如前所述,VISA的串口配置要與下位機(jī)的串口配置一一對(duì)應(yīng)[8]。VISA模塊的串口初始化配置如圖1所示。
圖1 串口參數(shù)配置
由于串口參數(shù)類型不同,在此通過(guò)數(shù)據(jù)簇模塊設(shè)定。簇為一種數(shù)據(jù)類型,相當(dāng)于文本編程語(yǔ)言中的結(jié)構(gòu)體變量,是由不同類型的數(shù)據(jù)組成的集合[9]。由上到下依次為波特率、數(shù)據(jù)位、校驗(yàn)位、停止位、流控制位,經(jīng)“解除捆綁”后分割為獨(dú)立的參數(shù),通過(guò)串口資源名稱模塊選擇串口。
在上位機(jī)監(jiān)控模式中,上位機(jī)與下位機(jī)之間的數(shù)據(jù)通信是整個(gè)系統(tǒng)的基礎(chǔ),這方面也有許多應(yīng)用實(shí)例[10]。本文在此設(shè)計(jì)了兩種數(shù)據(jù)通信模式,一種為單點(diǎn)通信,即將單個(gè)或少量特定數(shù)據(jù)字符寫入后發(fā)送至下位機(jī)端;另一種為表格通信,即將大量以Excel表格文件形式匯總的數(shù)據(jù)讀取轉(zhuǎn)換后發(fā)送至下位機(jī)端。設(shè)定的上位機(jī)端串口數(shù)據(jù)通信流程如圖2所示。
圖2 串口通信流程
初始階段虛擬串口設(shè)置主要通過(guò)VSPD軟件實(shí)現(xiàn),串口參數(shù)配置與串口通信終止字符類型設(shè)置兩者均相同,通過(guò)模式選擇按鈕選擇不同的通信方式,表格通信較單點(diǎn)通信的區(qū)別在于表格文件的讀取與數(shù)據(jù)的轉(zhuǎn)換,兩種方式的實(shí)現(xiàn)過(guò)程將在下文詳細(xì)闡述。
在LABVIEW平臺(tái)控制的串行通信過(guò)程中,數(shù)據(jù)格式是以字符串形式構(gòu)成的[11]。實(shí)際使用過(guò)程中,上位機(jī)端需要根據(jù)需求發(fā)送單個(gè)或少量數(shù)據(jù)至下位機(jī)端,故在此設(shè)計(jì)了單點(diǎn)通信模式。單點(diǎn)通信程序如圖3所示:整個(gè)程序包含在一個(gè)條件判斷結(jié)構(gòu)體(Case Structure)中,根據(jù)選擇按鈕的開(kāi)關(guān)狀態(tài)決定程序的運(yùn)行與停止。首先進(jìn)行串口參數(shù)配置,包含輸出與輸入端口兩個(gè)。其次,是設(shè)置VISA傳輸中的終止字符類型,在此用到了字節(jié)屬性模塊,用于在傳輸完畢下位機(jī)端收到的字符串后增加指定的結(jié)束字符,例如換行、回車或者空字符等類型,例如本程序框圖中字節(jié)屬性模塊設(shè)定了終止字符(Term Char)判斷、終止字符使能(Term Char En)開(kāi)關(guān)、寫入結(jié)束模式(ASRL End Out)3個(gè)屬性功能。需要注意的是,字節(jié)屬性模塊同時(shí)也用于檢測(cè)串口數(shù)據(jù)的存在,起到判斷的作用[12]。由于端口數(shù)據(jù)收發(fā)之間有延時(shí),故需要加入計(jì)時(shí)功能,通過(guò)寫函數(shù)模塊(VISA Write)寫入數(shù)據(jù)后延時(shí)500ms再經(jīng)由讀函數(shù)模塊(VISA Write)讀出串口數(shù)據(jù)。由于加入了結(jié)束字符,因此讀出的字符會(huì)比寫入的字符多一位,故將寫入的數(shù)據(jù)字節(jié)數(shù)與讀出的數(shù)據(jù)字節(jié)數(shù)進(jìn)行比較時(shí)兩者不相等,若前者小于后者且與前面板顯示結(jié)果一致,則表明通信正常,若兩個(gè)結(jié)果不同則表明通信異常。在串口通信結(jié)束后必須關(guān)閉串口,因此使用串口關(guān)閉函數(shù)(VISA Close)執(zhí)行這一功能。
圖3 單點(diǎn)通信
在實(shí)際使用過(guò)程中,往往需要發(fā)送大量數(shù)據(jù)至下位機(jī),這些數(shù)據(jù)通常以表格文件形式存儲(chǔ),如此一來(lái)發(fā)送更加便捷,因此針對(duì)這一需求本文也設(shè)計(jì)了表格數(shù)據(jù)通信功能,程序分為表格數(shù)據(jù)的讀取與數(shù)據(jù)的轉(zhuǎn)換通信兩部分。
表格數(shù)據(jù)通信的首要條件是上位機(jī)能夠讀取表格文件,在此本文通過(guò)ActiveX控件讀取表格文件內(nèi)容。ActiveX控件是一類面向?qū)ο蟪绦蚣夹g(shù)和工具的策略性軟件組件的簡(jiǎn)稱,涉及的主要技術(shù)內(nèi)容為部件對(duì)象模型(Component Object Model,COM),通過(guò)使用ActiveX組件,可以在開(kāi)發(fā)工具中增添特定的功能。在LABVIEW環(huán)境下,通過(guò)打開(kāi)ActiveX生成主對(duì)象,再由其生成所需子對(duì)象,通過(guò)設(shè)置和調(diào)用這些對(duì)象的屬性來(lái)實(shí)現(xiàn)程序所需功能[13]。
由于自帶相關(guān)的ActiveX控件,因此LABVIEW在處理Excel表格文件時(shí)直接采用該控件即可[14]。首先打開(kāi)自動(dòng)化引用模塊并創(chuàng)建自動(dòng)化引用句柄[15],作用為通過(guò)引用句柄找到指定文件路徑下的文件;隨后通過(guò)屬性節(jié)點(diǎn)與調(diào)用節(jié)點(diǎn)找到用戶指定表格文件中的表單號(hào)(Sheet);最后將表單范圍內(nèi)的數(shù)據(jù)值以數(shù)組格式輸出前面板顯示。表格文件讀取及顯示程序如圖4所示。
由于串口通信接受字符串?dāng)?shù)據(jù)格式,因此需先將從表格中讀取的、以數(shù)組形式呈現(xiàn)的表格數(shù)據(jù)轉(zhuǎn)化為字符串形式發(fā)送,這一過(guò)程由“數(shù)組至字符串轉(zhuǎn)換”模塊實(shí)現(xiàn)。表格數(shù)據(jù)通信程序如圖5所示。
表格數(shù)據(jù)通信程序結(jié)構(gòu)與單點(diǎn)通信大致相同,同樣在此增加了延時(shí)與字節(jié)比較功能。
由于串口通信至少需要一對(duì)串口互相連接、傳輸數(shù)據(jù),為方便快捷地對(duì)上位機(jī)程序進(jìn)行模擬驗(yàn)證、降低實(shí)驗(yàn)成本,在此使用了專用的串口調(diào)試軟件:虛擬串口驅(qū)動(dòng)(Virtual Serial Port Driver,VSPD)。VSPD可通過(guò)虛擬出成對(duì)的相互連接的串口,用于模擬上位機(jī)與下位機(jī)或者外部串行設(shè)備的通信通道[16-17]。
圖4 表格數(shù)據(jù)讀取
圖5 表格數(shù)據(jù)通信
模擬通信分為兩部分,單點(diǎn)模擬通信與表格模擬通信,其中單點(diǎn)通信以COM2為上位機(jī)發(fā)送端口,設(shè)定COM3為下位機(jī)接收端口;表格通信以COM4為上位機(jī)發(fā)送端口,設(shè)定COM5為下位機(jī)接收端口。上位機(jī)監(jiān)控界面模擬通信結(jié)果與VSPD串口收發(fā)字符統(tǒng)計(jì)如圖6、圖7所示。
圖6 上位機(jī)監(jiān)控界面顯示
在顯示界面中,單點(diǎn)通信的中止字符為十六進(jìn)制顯示的字符“A”,對(duì)應(yīng)ASCII碼表中換行鍵,即下位機(jī)讀出完畢后自動(dòng)換行;表格通信中的終止字符為“0”,對(duì)應(yīng)為空字符,因此讀取的字節(jié)數(shù)均比寫入的多了一位。兩對(duì)虛擬串口發(fā)送與接收的數(shù)據(jù)字節(jié)數(shù)一致,說(shuō)明通信內(nèi)容完整。模擬通信結(jié)果表明,設(shè)計(jì)的上位機(jī)串口通信監(jiān)控程序能夠準(zhǔn)確地在端口間傳送數(shù)據(jù)。
圖7 VSPD串口收發(fā)字節(jié)統(tǒng)計(jì)
文中說(shuō)明了基于串口通信原理的上位機(jī)監(jiān)控程序的設(shè)計(jì)過(guò)程。使用LABVIEW開(kāi)發(fā)上位機(jī)通信監(jiān)控界面軟件,解決了工程設(shè)計(jì)中實(shí)現(xiàn)簡(jiǎn)易的串口通信的問(wèn)題,不僅能夠簡(jiǎn)化軟件開(kāi)發(fā)流程和減少硬件成本,而且具有良好的擴(kuò)展性。文中設(shè)計(jì)了單點(diǎn)數(shù)據(jù)通信和表格數(shù)據(jù)通信兩種通信模式。前者采用Case條件選擇結(jié)構(gòu)選定模式,通過(guò)VISA函數(shù)配置模塊配置參數(shù)、VISA字節(jié)模塊設(shè)置終止格式,根據(jù)字節(jié)數(shù)判斷通信是否正常。后者相比前者的不同之處在于:在數(shù)據(jù)發(fā)送與顯示過(guò)程之前需通過(guò)ActiveX控件讀取表格文件并轉(zhuǎn)化為字符串?dāng)?shù)據(jù),然后進(jìn)行正常的通信。總體而言,該上位機(jī)軟件實(shí)現(xiàn)了所需功能,但包含的通信模式較少,只能作為簡(jiǎn)單的數(shù)據(jù)通信工具使用,對(duì)后續(xù)的深入開(kāi)發(fā)具有一定的參考價(jià)值。