国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

淺析多線程技術(shù)在測控系統(tǒng)中的實(shí)現(xiàn)

2013-05-09 05:59:58石永生
關(guān)鍵詞:輔助線主線線程

石永生

(江蘇信息職業(yè)技術(shù)學(xué)院物聯(lián)網(wǎng)工程系 江蘇 214153)

0 引言

Lab Windows/CVI是一種交換式的C語言開發(fā)平臺(tái),它可以通過多線程技術(shù)采集多路數(shù)據(jù)。之前在Windows環(huán)境中主要依賴的是單個(gè)線程執(zhí)行多路測試與控制任務(wù)來實(shí)現(xiàn)運(yùn)行操作,然而隨著現(xiàn)代的科學(xué)技術(shù)與網(wǎng)絡(luò)技術(shù)的發(fā)展與壯大,單個(gè)線程技術(shù)已經(jīng)不能遠(yuǎn)遠(yuǎn)不能滿足系統(tǒng)的要求,亟待解決與突破[1]。在這種情況下,多線程技術(shù)應(yīng)運(yùn)而生。將多線程技術(shù)應(yīng)用到測控系統(tǒng)中,可以大大的提高程序的性能,從而提高測控系統(tǒng)的工作效率。此外,在測控系統(tǒng)中運(yùn)用多線程技術(shù),可以很好的實(shí)現(xiàn)人機(jī)友好互動(dòng)的界面,而且編程的過程也較為簡潔明了,受到了眾多工程設(shè)計(jì)工作者的青睞,是測控系統(tǒng)的未來發(fā)展趨勢(shì)。所以,現(xiàn)階段探討多線程技術(shù)在測控系統(tǒng)中的實(shí)現(xiàn),為其探索出一條道路,具有非常重大的意義。

1 多線程技術(shù)概述

將進(jìn)程與線程的非搶占式方法應(yīng)用與Windows操作系統(tǒng)中,可以實(shí)現(xiàn)多任務(wù)的操作[2]。在Windows中運(yùn)用多線程程序可以讓操作系統(tǒng)在執(zhí)行完某個(gè)線程的一段時(shí)間后,自動(dòng)切換到其他的線程中繼續(xù)運(yùn)行,也就是進(jìn)行線程切換。通常在切換線程時(shí)操作系統(tǒng)的速度非???,用戶會(huì)想當(dāng)然的認(rèn)為多個(gè)線程都是在同時(shí)運(yùn)行的。其實(shí)在測控系統(tǒng)中,運(yùn)用多線程技術(shù),可以實(shí)現(xiàn)真正意義上的在操作系統(tǒng)中執(zhí)行多個(gè)線程,從而大大的提高計(jì)算機(jī)的性能。

2 多線程技術(shù)在測控系統(tǒng)中的設(shè)計(jì)

2.1 設(shè)計(jì)項(xiàng)目

運(yùn)用裝載機(jī)性能檢測系統(tǒng)時(shí)可以有針對(duì)性的對(duì)出廠檢測的各項(xiàng)功能性能的裝載機(jī),運(yùn)用的是分布式測控系統(tǒng)[3]。在這一系統(tǒng)中掘起力、提升力與速度是在進(jìn)行測量時(shí)必須具備的基本參量。這一軟件的線程安排圖如圖1所示。

圖1 裝載機(jī)測控系統(tǒng)軟件多線程結(jié)構(gòu)

建立這一系統(tǒng),首先要?jiǎng)?chuàng)建出一條主線程,然后根據(jù)主線程的需要,對(duì)同一線程池中的3個(gè)輔助線程進(jìn)行激活[4]。在采集數(shù)據(jù)時(shí),可以分為兩大部分:一是在進(jìn)行測量時(shí)采集AD數(shù)據(jù)卡,二是進(jìn)行溫度測量時(shí)采用RS232設(shè)備,并將測量出來的結(jié)果用LED顯示出來。因?yàn)閷?duì)串口設(shè)備的頻率與訪問時(shí)間都不會(huì)相差很大,所以可以將這些采集數(shù)據(jù)的過程放置到某個(gè)輔助的線程里。這樣,多線程技術(shù)不僅可以得到很好的利用,還可以對(duì)過多的開設(shè)線程造成的系統(tǒng)資源浪費(fèi)進(jìn)行規(guī)避。

2.2 關(guān)鍵技術(shù)

在設(shè)計(jì)多線應(yīng)用程序時(shí),有一個(gè)非常關(guān)鍵的問題需要慎重的考慮,即關(guān)于線程間的數(shù)據(jù)通信問題[5]。因?yàn)槟軌驅(qū)崟r(shí)顯示系統(tǒng)的狀態(tài)與信息是主線程的需求,把采集而來原始數(shù)據(jù)傳入到主線程中,需要輔助線程2與輔助線程3的準(zhǔn)確性。線程安全變量、線程鎖與線程安全隊(duì)列是Lad Windows/CVI Utility Library提供出來的三種保護(hù)數(shù)據(jù)機(jī)制[6]。在裝載機(jī)測試系統(tǒng)的過程中,通過線程安全隊(duì)列的方式可以實(shí)現(xiàn)主線程與輔助線程之間的數(shù)據(jù)傳遞,其過程如圖2所示。需要注意的是,在進(jìn)行數(shù)據(jù)采集之前,需要先激活輔助線程,然后再將調(diào)用函數(shù)放到主線程中,創(chuàng)建出一個(gè)可以在內(nèi)存中專用空間使用的數(shù)據(jù)緩沖,即線程安全隊(duì)列,這個(gè)隊(duì)列的大小函數(shù)確定應(yīng)該取決于前兩個(gè)參數(shù)。

圖2 通過安全隊(duì)列進(jìn)行線程間數(shù)據(jù)傳遞

在關(guān)鍵技術(shù)中,除了要有數(shù)據(jù)的保護(hù),還要運(yùn)用到指定的處理器[7]。當(dāng)有多個(gè)處理器在計(jì)算機(jī)中使用時(shí),便可以通過調(diào)用Cmt Get Number Of Processors函數(shù)的進(jìn)行程序運(yùn)行,以此來獲得在這個(gè)程序中計(jì)算機(jī)中處理器的數(shù)量。在指定允許執(zhí)行程序的處理器時(shí),通常使用的是Set Process Affinity Mask函數(shù)。在指定允許執(zhí)行程序中的特定線程中的特定線程的處理器數(shù)量,通常使用的是Set Thread Affinity Mask函數(shù)來處理。尤其要注意的是,Set Process Affinity Mask在接受到傳遞信息之后,mask的變量通過一定的程序傳遞到Set Process Affinity Mask中的mask變量的子集中。

3 在Windows NT環(huán)境下多線程技術(shù)在測控軟件中的應(yīng)用

在Windows NT中,要實(shí)現(xiàn)多線程技術(shù)的運(yùn)用,就要利用一系列如Resume Thread、Create Thread、Suspend Thread等Win32 API函數(shù)對(duì)多線程進(jìn)行編程,這樣做不僅麻煩,而且非常容易出錯(cuò)。但是如果在測控軟件的多線程技術(shù)中利用Delphi則可以收到事半功倍的功效。因?yàn)榱看蠖謴?fù)雜的Win32 API函數(shù)通過Delphi可以得到進(jìn)一步的封裝,對(duì)其進(jìn)行開發(fā)的工作人員只要運(yùn)用非常簡單的方法就可以開辟出一個(gè)真正具有安全性質(zhì)的Windows的多線程。此外,Delephi提供出了一個(gè)TThread對(duì)象,通過這個(gè)對(duì)象對(duì)多線程進(jìn)行編程將變得更為簡單、方便與實(shí)用。但是,利用Delephi對(duì)多線程進(jìn)行編程時(shí),有幾個(gè)問題必須給予高度的注意。

首先,運(yùn)用TThread對(duì)其子類TMy Thead對(duì)象下新定義時(shí),會(huì)通過Execute()重載的方式來實(shí)用多線程的對(duì)象,從而將多線程中已經(jīng)實(shí)現(xiàn)好的任務(wù)代碼放入到Execute中。所以,在使用的過程中,需要?jiǎng)?chuàng)建一個(gè)動(dòng)態(tài)的TMy Thread對(duì)象,并將其應(yīng)用到構(gòu)造函數(shù)中,使得程序中可以多增一個(gè)新的自定義線程。其次,VCL類庫是建立Delphi編程的基礎(chǔ),所以在運(yùn)用程序是時(shí)常都要對(duì)VCL對(duì)象的屬性與方法進(jìn)行訪問。Thread對(duì)象還提供了一個(gè)Synchronize()的方式來自動(dòng)規(guī)避多線程同時(shí)訪問產(chǎn)生的沖突。如果需要在線程中對(duì)VCL對(duì)象的屬性或者調(diào)用方式進(jìn)行訪問時(shí),則可以運(yùn)用Synchronize()的方式來進(jìn)行訪問,從而保障了對(duì)系統(tǒng)進(jìn)行操作時(shí)一次只有一個(gè)線程對(duì)VCL進(jìn)行訪問,較好的協(xié)調(diào)了各線程之間的運(yùn)行,降低意外產(chǎn)生后帶來的錯(cuò)誤。實(shí)質(zhì)上,可以將Synchronize()方式當(dāng)成一種鎖定機(jī)制來使用,對(duì)VCL對(duì)象進(jìn)行封鎖,并把Synchronize()方式作為進(jìn)入VCL對(duì)象的入口。再次,在設(shè)計(jì)程序的時(shí)候,將程序設(shè)計(jì)在多個(gè)線程中的共享數(shù)據(jù)或者對(duì)象中是一種非常普遍的情況。所以為了規(guī)避多線程在運(yùn)行的過程中對(duì)公共數(shù)據(jù)塊同時(shí)進(jìn)行訪問產(chǎn)生出的相互干擾與錯(cuò)誤信息,就需要采取一定的措施,保護(hù)好公共數(shù)據(jù)塊。最后,還要注意多線程間的同步問題。如果有多個(gè)線程在程序中同時(shí)運(yùn)行時(shí),它們使用的資源都是來源于同一個(gè)系統(tǒng),或者是要運(yùn)行一個(gè)線程的時(shí)候需要依靠另一個(gè)線程來完成運(yùn)行工作,這樣,多線程同步的問題便產(chǎn)生了。因?yàn)槎嗑€程是同時(shí)運(yùn)行工作的,所以就程序本身來說是無法確定誰在運(yùn)行過程中的快慢速度,也就使得多線程同步運(yùn)行時(shí)產(chǎn)生了相對(duì)突出的矛盾。如果對(duì)程序進(jìn)行設(shè)計(jì)時(shí)可以讓運(yùn)行中的一個(gè)線程等待一項(xiàng)特定的操作完成后在運(yùn)行操作,便可以大大的提高工作效率。要做到這點(diǎn),先要?jiǎng)?chuàng)建出一個(gè)所有線程都可以監(jiān)測的標(biāo)志——全局的TEvent對(duì)象,如果某個(gè)線程完成了某項(xiàng)特定的操作,就會(huì)對(duì)這個(gè)標(biāo)志進(jìn)行設(shè)置。其他的線程也可以通過對(duì)標(biāo)志的監(jiān)測來獲得操作的完成,也可以采取一些措施,如調(diào)用Reset Event()的方式來對(duì)標(biāo)志進(jìn)行取消。

新研制出來的艦船燃?xì)廨啓C(jī)就充分運(yùn)用了在Windows NT Workstation4.0環(huán)境中Delphi的多線程處理能力來運(yùn)行參數(shù),提高了燃?xì)廨啓C(jī)的運(yùn)行效率,對(duì)數(shù)據(jù)的采集、判斷等任務(wù)的完成效果也更好了。燃?xì)廨啓C(jī)運(yùn)行參數(shù)監(jiān)測系統(tǒng)軟件結(jié)構(gòu)示意圖,見圖3。

圖3 燃?xì)廨啓C(jī)運(yùn)行參數(shù)監(jiān)測系統(tǒng)軟件結(jié)構(gòu)示意圖

燃?xì)鈾C(jī)本身攜帶的數(shù)據(jù)采集系統(tǒng)是基于M6800系統(tǒng)的,將這個(gè)數(shù)據(jù)采集系統(tǒng)作為監(jiān)測系統(tǒng)的下位機(jī),可以留有多路,使得RS-422A與RS-232C能夠串行起來,便于向其他系統(tǒng)傳遞采集過來的數(shù)據(jù)。通過循環(huán)地接受串行接口傳輸過來的數(shù)據(jù),監(jiān)測系統(tǒng)可以很好的進(jìn)一步的數(shù)據(jù)計(jì)算以及任務(wù)分析進(jìn)行完成。

將用戶管理接口作為主線控的燃?xì)廨啓C(jī)運(yùn)行參數(shù)監(jiān)測系統(tǒng)軟件,可以把上下限的檢查、數(shù)據(jù)采集以及數(shù)據(jù)庫存儲(chǔ)等定位后臺(tái)線程,而在所有的并發(fā)線程中,優(yōu)先級(jí)最高的應(yīng)該是數(shù)據(jù)采集線程。因?yàn)閿?shù)據(jù)采集線程的主要負(fù)責(zé)任務(wù)就是將采集而來的數(shù)據(jù)不間斷地放置到某個(gè)公共數(shù)據(jù)緩沖區(qū)域,這樣可以方便其他線程對(duì)其進(jìn)行調(diào)用,從而及時(shí)對(duì)上下限的檢查與數(shù)據(jù)判斷等線程進(jìn)行喚起,對(duì)當(dāng)前數(shù)據(jù)的參數(shù)類型以及所處的參數(shù)區(qū)間進(jìn)行確定。結(jié)束了數(shù)據(jù)判斷線程的工作后,應(yīng)該及時(shí)將圖形顯示線程工作進(jìn)行喚起,因?yàn)槿绻麉?shù)數(shù)據(jù)超過了時(shí)限的話,那么分析線程故障就會(huì)被立即喚起。所以運(yùn)行整個(gè)程序的過程中,享有最高優(yōu)先級(jí)別的主線程應(yīng)該是用戶管理,只有用戶管理運(yùn)行好了,其他數(shù)據(jù)庫存儲(chǔ)線程、計(jì)算線程與數(shù)據(jù)采集線程等才能得到及時(shí)的喚醒與正常的運(yùn)行,從而保障了整個(gè)程序的正常運(yùn)行。

4 結(jié)語

綜上所述,隨著時(shí)代的發(fā)展與科學(xué)技術(shù)的不斷發(fā)展與進(jìn)步,多線程技術(shù)運(yùn)用到測控系統(tǒng)中將成為測控系統(tǒng)發(fā)展的必然趨勢(shì)。當(dāng)多線程技術(shù)真正運(yùn)用到了監(jiān)控系統(tǒng)中,在處理用戶界面時(shí)只要在主線程中處理即可,而對(duì)采集而來的數(shù)據(jù)進(jìn)行操作時(shí)只要放進(jìn)輔助線程中就可以。這樣,用戶界面在進(jìn)行操作的過程中就不會(huì)和數(shù)據(jù)采集產(chǎn)生并發(fā)執(zhí)行的問題,增強(qiáng)了系統(tǒng)的可靠性。同時(shí),對(duì)測控系統(tǒng)中的輔助線程進(jìn)行合理的安排,有利于系統(tǒng)的模塊化結(jié)構(gòu)的改善,這樣在以后對(duì)系統(tǒng)進(jìn)行移植與修改時(shí)就便捷了許多。所以說,在測控系統(tǒng)軟件中廣泛的運(yùn)用多線程技術(shù),是其將來的發(fā)展趨勢(shì)。

[1]何新軍熊幸明.基于多線程技術(shù)的PLC與PC通訊在電機(jī)測控系統(tǒng)中的實(shí)現(xiàn)[J]機(jī)床電器2008(2):31-33.

[2]代峰燕劉興華劉松杜曉帆.多線程技術(shù)在測控系統(tǒng)中的實(shí)現(xiàn)[J]北京石油化工學(xué)院學(xué)報(bào)2011(1):42-45.

[3]向運(yùn)飛劉旺開沈?yàn)槿?多線程技術(shù)在計(jì)算機(jī)測控系統(tǒng)中的應(yīng)用研究[J]計(jì)算機(jī)應(yīng)用研究2012(2):112-114.

[4]魏曉亮郭世明.多線程技術(shù)在微機(jī)測控系統(tǒng)中的運(yùn)用[J]電力機(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è)控制計(jì)算機(jī)2010(11):50-52.

[7]王瀚漓汪雄海.開關(guān)柜電氣磨合危機(jī)控制系統(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ù)在雞冠巖電站微機(jī)監(jiān)控系統(tǒng)中的應(yīng)用[J].西北水力發(fā)電.2006(04):36-42.

[12]彭志召,張雨,劉義樂,高永強(qiáng).基于LabWindows/CVI的礦用卡車實(shí)時(shí)狀態(tài)監(jiān)測系統(tǒng)的開發(fā)[J].礦山機(jī)械.2010(17):105-110.

[13]高功名,李文彬.基于虛擬儀器和無線網(wǎng)絡(luò)的數(shù)據(jù)采集系統(tǒng)[J].林業(yè)機(jī)械與木工設(shè)備.2008(03):79-83.

[14]翟巍,王勇,植涌.基于LabWindows/CVI高速數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J].鄭州輕工業(yè)學(xué)院學(xué)報(bào)(自然科學(xué)版).2007(06):34-40.

猜你喜歡
輔助線主線線程
怎樣添輔助線證全等
兩種重要的輔助線
淺談?shì)o助線在數(shù)控切割中的應(yīng)用
人物報(bào)道的多維思考、主線聚焦與故事呈現(xiàn)
活力(2019年17期)2019-11-26 00:42:32
更加突出主線 落實(shí)四個(gè)到位 推動(dòng)主題教育取得實(shí)實(shí)在在成效
數(shù)字主線
淺談linux多線程協(xié)作
下沉和整合 遼寧醫(yī)改主線
Have Fun with Math
Linux線程實(shí)現(xiàn)技術(shù)研究
监利县| 西吉县| 南阳市| 大埔县| 奈曼旗| 洱源县| 镇赉县| 许昌县| 富平县| 藁城市| 福建省| 韶关市| 定日县| 琼结县| 岐山县| 伽师县| 隆尧县| 报价| 通渭县| 全州县| 海阳市| 沈阳市| 囊谦县| 德钦县| 隆安县| 宁化县| 曲麻莱县| 德庆县| 凤台县| 沧州市| 安远县| 湖北省| 察隅县| 新巴尔虎左旗| 睢宁县| 平昌县| 景宁| 长春市| 文安县| 调兵山市| 阳曲县|