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

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

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

圖3 燃氣輪機運行參數監測系統軟件結構示意圖
燃氣機本身攜帶的數據采集系統是基于M6800系統的,將這個數據采集系統作為監測系統的下位機,可以留有多路,使得RS-422A與RS-232C能夠串行起來,便于向其他系統傳遞采集過來的數據。通過循環地接受串行接口傳輸過來的數據,監測系統可以很好的進一步的數據計算以及任務分析進行完成。
將用戶管理接口作為主線控的燃氣輪機運行參數監測系統軟件,可以把上下限的檢查、數據采集以及數據庫存儲等定位后臺線程,而在所有的并發線程中,優先級最高的應該是數據采集線程。因為數據采集線程的主要負責任務就是將采集而來的數據不間斷地放置到某個公共數據緩沖區域,這樣可以方便其他線程對其進行調用,從而及時對上下限的檢查與數據判斷等線程進行喚起,對當前數據的參數類型以及所處的參數區間進行確定。結束了數據判斷線程的工作后,應該及時將圖形顯示線程工作進行喚起,因為如果參數數據超過了時限的話,那么分析線程故障就會被立即喚起。所以運行整個程序的過程中,享有最高優先級別的主線程應該是用戶管理,只有用戶管理運行好了,其他數據庫存儲線程、計算線程與數據采集線程等才能得到及時的喚醒與正常的運行,從而保障了整個程序的正常運行。
綜上所述,隨著時代的發展與科學技術的不斷發展與進步,多線程技術運用到測控系統中將成為測控系統發展的必然趨勢。當多線程技術真正運用到了監控系統中,在處理用戶界面時只要在主線程中處理即可,而對采集而來的數據進行操作時只要放進輔助線程中就可以。這樣,用戶界面在進行操作的過程中就不會和數據采集產生并發執行的問題,增強了系統的可靠性。同時,對測控系統中的輔助線程進行合理的安排,有利于系統的模塊化結構的改善,這樣在以后對系統進行移植與修改時就便捷了許多。所以說,在測控系統軟件中廣泛的運用多線程技術,是其將來的發展趨勢。
[1]何新軍熊幸明.基于多線程技術的PLC與PC通訊在電機測控系統中的實現[J]機床電器2008(2):31-33.
[2]代峰燕劉興華劉松杜曉帆.多線程技術在測控系統中的實現[J]北京石油化工學院學報2011(1):42-45.
[3]向運飛劉旺開沈為群.多線程技術在計算機測控系統中的應用研究[J]計算機應用研究2012(2):112-114.
[4]魏曉亮郭世明.多線程技術在微機測控系統中的運用[J]電力機車與城軌車輛2008(3):47-49.
[5]劉九七.Windows NT環境下多線程技術在測控軟件中的應用[J]測控技術2010(3):45-47.
[6]蔣瑜陳循.Delphi多線程技術在測控系統中的應用[J]工業控制計算機2010(11):50-52.
[7]王瀚漓汪雄海.開關柜電氣磨合危機控制系統中多線程技術的應用[J]測控技術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]張宇峰,胡仕尊,王德意,賈嶸.多線程技術在雞冠巖電站微機監控系統中的應用[J].西北水力發電.2006(04):36-42.
[12]彭志召,張雨,劉義樂,高永強.基于LabWindows/CVI的礦用卡車實時狀態監測系統的開發[J].礦山機械.2010(17):105-110.
[13]高功名,李文彬.基于虛擬儀器和無線網絡的數據采集系統[J].林業機械與木工設備.2008(03):79-83.
[14]翟巍,王勇,植涌.基于LabWindows/CVI高速數據采集系統的設計[J].鄭州輕工業學院學報(自然科學版).2007(06):34-40.