石永生
(江蘇信息職業(yè)技術(shù)學院物聯(lián)網(wǎng)工程系 江蘇 214153)
Lab Windows/CVI是一種交換式的C語言開發(fā)平臺,它可以通過多線程技術(shù)采集多路數(shù)據(jù)。之前在Windows環(huán)境中主要依賴的是單個線程執(zhí)行多路測試與控制任務(wù)來實現(xiàn)運行操作,然而隨著現(xiàn)代的科學技術(shù)與網(wǎng)絡(luò)技術(shù)的發(fā)展與壯大,單個線程技術(shù)已經(jīng)不能遠遠不能滿足系統(tǒng)的要求,亟待解決與突破[1]。在這種情況下,多線程技術(shù)應(yīng)運而生。將多線程技術(shù)應(yīng)用到測控系統(tǒng)中,可以大大的提高程序的性能,從而提高測控系統(tǒng)的工作效率。此外,在測控系統(tǒng)中運用多線程技術(shù),可以很好的實現(xiàn)人機友好互動的界面,而且編程的過程也較為簡潔明了,受到了眾多工程設(shè)計工作者的青睞,是測控系統(tǒng)的未來發(fā)展趨勢。所以,現(xiàn)階段探討多線程技術(shù)在測控系統(tǒng)中的實現(xiàn),為其探索出一條道路,具有非常重大的意義。
將進程與線程的非搶占式方法應(yīng)用與Windows操作系統(tǒng)中,可以實現(xiàn)多任務(wù)的操作[2]。在Windows中運用多線程程序可以讓操作系統(tǒng)在執(zhí)行完某個線程的一段時間后,自動切換到其他的線程中繼續(xù)運行,也就是進行線程切換。通常在切換線程時操作系統(tǒng)的速度非常快,用戶會想當然的認為多個線程都是在同時運行的。其實在測控系統(tǒng)中,運用多線程技術(shù),可以實現(xiàn)真正意義上的在操作系統(tǒng)中執(zhí)行多個線程,從而大大的提高計算機的性能。
運用裝載機性能檢測系統(tǒng)時可以有針對性的對出廠檢測的各項功能性能的裝載機,運用的是分布式測控系統(tǒng)[3]。在這一系統(tǒng)中掘起力、提升力與速度是在進行測量時必須具備的基本參量。這一軟件的線程安排圖如圖1所示。

圖1 裝載機測控系統(tǒng)軟件多線程結(jié)構(gòu)
建立這一系統(tǒng),首先要創(chuàng)建出一條主線程,然后根據(jù)主線程的需要,對同一線程池中的3個輔助線程進行激活[4]。在采集數(shù)據(jù)時,可以分為兩大部分:一是在進行測量時采集AD數(shù)據(jù)卡,二是進行溫度測量時采用RS232設(shè)備,并將測量出來的結(jié)果用LED顯示出來。因為對串口設(shè)備的頻率與訪問時間都不會相差很大,所以可以將這些采集數(shù)據(jù)的過程放置到某個輔助的線程里。這樣,多線程技術(shù)不僅可以得到很好的利用,還可以對過多的開設(shè)線程造成的系統(tǒng)資源浪費進行規(guī)避。
在設(shè)計多線應(yīng)用程序時,有一個非常關(guān)鍵的問題需要慎重的考慮,即關(guān)于線程間的數(shù)據(jù)通信問題[5]。因為能夠?qū)崟r顯示系統(tǒng)的狀態(tài)與信息是主線程的需求,把采集而來原始數(shù)據(jù)傳入到主線程中,需要輔助線程2與輔助線程3的準確性。線程安全變量、線程鎖與線程安全隊列是Lad Windows/CVI Utility Library提供出來的三種保護數(shù)據(jù)機制[6]。在裝載機測試系統(tǒng)的過程中,通過線程安全隊列的方式可以實現(xiàn)主線程與輔助線程之間的數(shù)據(jù)傳遞,其過程如圖2所示。需要注意的是,在進行數(shù)據(jù)采集之前,需要先激活輔助線程,然后再將調(diào)用函數(shù)放到主線程中,創(chuàng)建出一個可以在內(nèi)存中專用空間使用的數(shù)據(jù)緩沖,即線程安全隊列,這個隊列的大小函數(shù)確定應(yīng)該取決于前兩個參數(shù)。

圖2 通過安全隊列進行線程間數(shù)據(jù)傳遞
在關(guān)鍵技術(shù)中,除了要有數(shù)據(jù)的保護,還要運用到指定的處理器[7]。當有多個處理器在計算機中使用時,便可以通過調(diào)用Cmt Get Number Of Processors函數(shù)的進行程序運行,以此來獲得在這個程序中計算機中處理器的數(shù)量。在指定允許執(zhí)行程序的處理器時,通常使用的是Set Process Affinity Mask函數(shù)。在指定允許執(zhí)行程序中的特定線程中的特定線程的處理器數(shù)量,通常使用的是Set Thread Affinity Mask函數(shù)來處理。尤其要注意的是,Set Process Affinity Mask在接受到傳遞信息之后,mask的變量通過一定的程序傳遞到Set Process Affinity Mask中的mask變量的子集中。
在Windows NT中,要實現(xiàn)多線程技術(shù)的運用,就要利用一系列如Resume Thread、Create Thread、Suspend Thread等Win32 API函數(shù)對多線程進行編程,這樣做不僅麻煩,而且非常容易出錯。但是如果在測控軟件的多線程技術(shù)中利用Delphi則可以收到事半功倍的功效。因為量大而又復雜的Win32 API函數(shù)通過Delphi可以得到進一步的封裝,對其進行開發(fā)的工作人員只要運用非常簡單的方法就可以開辟出一個真正具有安全性質(zhì)的Windows的多線程。此外,Delephi提供出了一個TThread對象,通過這個對象對多線程進行編程將變得更為簡單、方便與實用。但是,利用Delephi對多線程進行編程時,有幾個問題必須給予高度的注意。
首先,運用TThread對其子類TMy Thead對象下新定義時,會通過Execute()重載的方式來實用多線程的對象,從而將多線程中已經(jīng)實現(xiàn)好的任務(wù)代碼放入到Execute中。所以,在使用的過程中,需要創(chuàng)建一個動態(tài)的TMy Thread對象,并將其應(yīng)用到構(gòu)造函數(shù)中,使得程序中可以多增一個新的自定義線程。其次,VCL類庫是建立Delphi編程的基礎(chǔ),所以在運用程序是時常都要對VCL對象的屬性與方法進行訪問。Thread對象還提供了一個Synchronize()的方式來自動規(guī)避多線程同時訪問產(chǎn)生的沖突。如果需要在線程中對VCL對象的屬性或者調(diào)用方式進行訪問時,則可以運用Synchronize()的方式來進行訪問,從而保障了對系統(tǒng)進行操作時一次只有一個線程對VCL進行訪問,較好的協(xié)調(diào)了各線程之間的運行,降低意外產(chǎn)生后帶來的錯誤。實質(zhì)上,可以將Synchronize()方式當成一種鎖定機制來使用,對VCL對象進行封鎖,并把Synchronize()方式作為進入VCL對象的入口。再次,在設(shè)計程序的時候,將程序設(shè)計在多個線程中的共享數(shù)據(jù)或者對象中是一種非常普遍的情況。所以為了規(guī)避多線程在運行的過程中對公共數(shù)據(jù)塊同時進行訪問產(chǎn)生出的相互干擾與錯誤信息,就需要采取一定的措施,保護好公共數(shù)據(jù)塊。最后,還要注意多線程間的同步問題。如果有多個線程在程序中同時運行時,它們使用的資源都是來源于同一個系統(tǒng),或者是要運行一個線程的時候需要依靠另一個線程來完成運行工作,這樣,多線程同步的問題便產(chǎn)生了。因為多線程是同時運行工作的,所以就程序本身來說是無法確定誰在運行過程中的快慢速度,也就使得多線程同步運行時產(chǎn)生了相對突出的矛盾。如果對程序進行設(shè)計時可以讓運行中的一個線程等待一項特定的操作完成后在運行操作,便可以大大的提高工作效率。要做到這點,先要創(chuàng)建出一個所有線程都可以監(jiān)測的標志——全局的TEvent對象,如果某個線程完成了某項特定的操作,就會對這個標志進行設(shè)置。其他的線程也可以通過對標志的監(jiān)測來獲得操作的完成,也可以采取一些措施,如調(diào)用Reset Event()的方式來對標志進行取消。
新研制出來的艦船燃氣輪機就充分運用了在Windows NT Workstation4.0環(huán)境中Delphi的多線程處理能力來運行參數(shù),提高了燃氣輪機的運行效率,對數(shù)據(jù)的采集、判斷等任務(wù)的完成效果也更好了。燃氣輪機運行參數(shù)監(jiān)測系統(tǒng)軟件結(jié)構(gòu)示意圖,見圖3。

圖3 燃氣輪機運行參數(shù)監(jiān)測系統(tǒng)軟件結(jié)構(gòu)示意圖
燃氣機本身攜帶的數(shù)據(jù)采集系統(tǒng)是基于M6800系統(tǒng)的,將這個數(shù)據(jù)采集系統(tǒng)作為監(jiān)測系統(tǒng)的下位機,可以留有多路,使得RS-422A與RS-232C能夠串行起來,便于向其他系統(tǒng)傳遞采集過來的數(shù)據(jù)。通過循環(huán)地接受串行接口傳輸過來的數(shù)據(jù),監(jiān)測系統(tǒng)可以很好的進一步的數(shù)據(jù)計算以及任務(wù)分析進行完成。
將用戶管理接口作為主線控的燃氣輪機運行參數(shù)監(jiān)測系統(tǒng)軟件,可以把上下限的檢查、數(shù)據(jù)采集以及數(shù)據(jù)庫存儲等定位后臺線程,而在所有的并發(fā)線程中,優(yōu)先級最高的應(yīng)該是數(shù)據(jù)采集線程。因為數(shù)據(jù)采集線程的主要負責任務(wù)就是將采集而來的數(shù)據(jù)不間斷地放置到某個公共數(shù)據(jù)緩沖區(qū)域,這樣可以方便其他線程對其進行調(diào)用,從而及時對上下限的檢查與數(shù)據(jù)判斷等線程進行喚起,對當前數(shù)據(jù)的參數(shù)類型以及所處的參數(shù)區(qū)間進行確定。結(jié)束了數(shù)據(jù)判斷線程的工作后,應(yīng)該及時將圖形顯示線程工作進行喚起,因為如果參數(shù)數(shù)據(jù)超過了時限的話,那么分析線程故障就會被立即喚起。所以運行整個程序的過程中,享有最高優(yōu)先級別的主線程應(yīng)該是用戶管理,只有用戶管理運行好了,其他數(shù)據(jù)庫存儲線程、計算線程與數(shù)據(jù)采集線程等才能得到及時的喚醒與正常的運行,從而保障了整個程序的正常運行。
綜上所述,隨著時代的發(fā)展與科學技術(shù)的不斷發(fā)展與進步,多線程技術(shù)運用到測控系統(tǒng)中將成為測控系統(tǒng)發(fā)展的必然趨勢。當多線程技術(shù)真正運用到了監(jiān)控系統(tǒng)中,在處理用戶界面時只要在主線程中處理即可,而對采集而來的數(shù)據(jù)進行操作時只要放進輔助線程中就可以。這樣,用戶界面在進行操作的過程中就不會和數(shù)據(jù)采集產(chǎn)生并發(fā)執(zhí)行的問題,增強了系統(tǒng)的可靠性。同時,對測控系統(tǒng)中的輔助線程進行合理的安排,有利于系統(tǒng)的模塊化結(jié)構(gòu)的改善,這樣在以后對系統(tǒng)進行移植與修改時就便捷了許多。所以說,在測控系統(tǒng)軟件中廣泛的運用多線程技術(shù),是其將來的發(fā)展趨勢。
[1]何新軍熊幸明.基于多線程技術(shù)的PLC與PC通訊在電機測控系統(tǒng)中的實現(xiàn)[J]機床電器2008(2):31-33.
[2]代峰燕劉興華劉松杜曉帆.多線程技術(shù)在測控系統(tǒng)中的實現(xiàn)[J]北京石油化工學院學報2011(1):42-45.
[3]向運飛劉旺開沈為群.多線程技術(shù)在計算機測控系統(tǒng)中的應(yīng)用研究[J]計算機應(yīng)用研究2012(2):112-114.
[4]魏曉亮郭世明.多線程技術(shù)在微機測控系統(tǒng)中的運用[J]電力機車與城軌車輛2008(3):47-49.
[5]劉九七.Windows NT環(huán)境下多線程技術(shù)在測控軟件中的應(yīng)用[J]測控技術(shù)2010(3):45-47.
[6]蔣瑜陳循.Delphi多線程技術(shù)在測控系統(tǒng)中的應(yīng)用[J]工業(yè)控制計算機2010(11):50-52.
[7]王瀚漓汪雄海.開關(guān)柜電氣磨合危機控制系統(tǒng)中多線程技術(shù)的應(yīng)用[J]測控技術(shù)2010(10):87-89.
[8]Chengming Xiao,Zhou Yang.Measurement and Control System Based on Delphi Language Design and Implementation of Software Platform [J].Nanjing University of Chemical Technology(Natural Science Edition).2010(03)58-63.
[9]SONG Jian1,ZOU Mu-chun2,3,SUN Wei3 1.School of Network,Lanzhou University of Technology,Lanzhou,730050,China;2.School of Maths and Computer,YiChun University,YiChun,336000,China;3.School of communication and computer,Lanzhou University of Technology,Lanzhou,730050,China.Research of Intrusion Detection Method Based on Rough Set and Adaptive Boost[J].International Journal of Systems and Control.2007(03):87-95.
[10]Zhang Liang,the Yellow Sea in,ZHANG Cui-fang Based on Lab Windows / CVI multithreading Research and Design of Data Acquisition [J].Chinese instruments.2005(08):83-90.
[11]張宇峰,胡仕尊,王德意,賈嶸.多線程技術(shù)在雞冠巖電站微機監(jiān)控系統(tǒng)中的應(yīng)用[J].西北水力發(fā)電.2006(04):36-42.
[12]彭志召,張雨,劉義樂,高永強.基于LabWindows/CVI的礦用卡車實時狀態(tài)監(jiān)測系統(tǒng)的開發(fā)[J].礦山機械.2010(17):105-110.
[13]高功名,李文彬.基于虛擬儀器和無線網(wǎng)絡(luò)的數(shù)據(jù)采集系統(tǒng)[J].林業(yè)機械與木工設(shè)備.2008(03):79-83.
[14]翟巍,王勇,植涌.基于LabWindows/CVI高速數(shù)據(jù)采集系統(tǒng)的設(shè)計[J].鄭州輕工業(yè)學院學報(自然科學版).2007(06):34-40.