日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 通信技術(shù) > 通信技術(shù)
[導(dǎo)讀] 虛擬儀器(Virtual Instruments)是80年代末出現(xiàn)的概念,即在通用硬件平臺(tái)上通過更改軟件功能,設(shè)計(jì)出不同功能的測試儀器,能大幅縮短研發(fā)周期,降低成本。NI公司的LabWindows/CVI具有強(qiáng)大的圖形界面設(shè)計(jì)功能,以ANS

 虛擬儀器(Virtual Instruments)是80年代末出現(xiàn)的概念,即在通用硬件平臺(tái)上通過更改軟件功能,設(shè)計(jì)出不同功能的測試儀器,能大幅縮短研發(fā)周期,降低成本。NI公司的LabWindows/CVI具有強(qiáng)大的圖形界面設(shè)計(jì)功能,以ANSIC為核心,提供了豐富的庫函數(shù)與儀器驅(qū)動(dòng)。

Modbus是由MODICON公司于1978年提出并倡導(dǎo)的一種協(xié)議,其應(yīng)用領(lǐng)域包括生產(chǎn)過程自動(dòng)化、過程控制和樓宇自動(dòng)化。目前主要通過以太網(wǎng)上的TCP/IP、Modbus令牌傳遞網(wǎng)絡(luò)以及各種介質(zhì)上的異步串行傳輸來實(shí)現(xiàn)。

文中以自動(dòng)卷煙機(jī)械控制系統(tǒng)為例,自動(dòng)卷煙控制系統(tǒng)完成卷煙動(dòng)作需要多個(gè)設(shè)備協(xié)同動(dòng)作完成,該系統(tǒng)可視為一個(gè)過程控制系統(tǒng),需要對(duì)各設(shè)備的工作狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控并要求能實(shí)時(shí)響應(yīng)用戶的操作。采用Modbus協(xié)議通信的方式,以上位機(jī)作為通信主站,將遵循完成對(duì)從站的動(dòng)作控制。然而對(duì)于較為復(fù)雜的Modbus通訊協(xié)議的各設(shè)備作為子站完成組網(wǎng),可方便地以通信的方式與從站完成信息交互并過程控制系統(tǒng),常規(guī)的組態(tài)軟件難以消除實(shí)時(shí)通信與界面響應(yīng)之間的沖突,采用LabWindows/CVI實(shí)現(xiàn)Modbus協(xié)議,可充分利用多線程編程技術(shù)解決此問題,從而避免產(chǎn)生沖突時(shí)造成控制系統(tǒng)的故障。

1 Modbus協(xié)議描述

1.1 Modbus幀描述

Modbus協(xié)議是一種應(yīng)用層報(bào)文傳輸協(xié)議,是一種請(qǐng)求/應(yīng)答協(xié)議,依照功能碼定義提供相應(yīng)的服務(wù),協(xié)議定義了一個(gè)與通信層無關(guān)的通用信息幀,幀格式如圖1所示,首先由主站依據(jù)相應(yīng)的請(qǐng)求消息格式建立發(fā)送幀發(fā)起通訊,從站接收主站請(qǐng)求信息后作出響應(yīng),一個(gè)請(qǐng)求/響應(yīng)周期如圖2所示,包含了1個(gè)主站請(qǐng)求幀與從站回復(fù)幀。Modbus協(xié)議有3種不同的通信類型,分別是主站請(qǐng)求通信,由主站發(fā)起;從站正常響應(yīng),對(duì)主站的請(qǐng)求作出處理后無差錯(cuò)的回復(fù)幀;異常響應(yīng),從站發(fā)生異常情況后對(duì)主站請(qǐng)求的異?;貜?fù)。

1.2 Modbus傳輸模式

Modbus協(xié)議定義了兩種串行傳輸模式,分別是ASCII模式和RTU模式。兩種模式使用不同的方法對(duì)幀起始和傳輸做出定義。在同樣的波特率下,相比于ASCII模式,RTU模式具有更高的吞吐率,故工業(yè)現(xiàn)場控制的智能儀器儀表大多選用RTU模式。同樣,自動(dòng)卷煙機(jī)Modbus網(wǎng)絡(luò)傳輸使用的是RTU模式。RTU模式以傳輸相鄰字符的間隔時(shí)間作為報(bào)文起始和結(jié)束標(biāo)志,兩報(bào)文間必須有大于發(fā)送3.5個(gè)字符的時(shí)間,同一個(gè)報(bào)文傳輸中,相鄰字符之間間隔必須小于發(fā)送1.5個(gè)字符的時(shí)間。實(shí)際應(yīng)用中,需要根據(jù)網(wǎng)絡(luò)采用的波特率來確定標(biāo)識(shí)幀起始和結(jié)束時(shí)間,以波特率9 600 bit·s-1為例,1個(gè)字符用8 Byte表示,則發(fā)送1個(gè)字符的時(shí)間為ts=8/9 600≈0.83 ms。1.5個(gè)字符對(duì)應(yīng)的時(shí)間約為1.25 ms,3.5個(gè)字符對(duì)應(yīng)的時(shí)問為3 ms,計(jì)算出的時(shí)間作為幀起始與結(jié)束的依據(jù)。

2 多線程技術(shù)的應(yīng)用

LabWindows/CVI采用事件驅(qū)動(dòng)與回調(diào)函數(shù)的編程方式,對(duì)于傳統(tǒng)的順序過程控制,無需使用多線程。當(dāng)系統(tǒng)任務(wù)實(shí)時(shí)性要求較高時(shí),CPU如果一直執(zhí)行實(shí)時(shí)性任務(wù),則不能響應(yīng)界面的其它事件。引入多線程技術(shù)可以較好地解決這個(gè)問題,操作系統(tǒng)中,線程是進(jìn)程的一個(gè)執(zhí)行單元,是可以由系統(tǒng)調(diào)度的最簡單的代碼單元。對(duì)于單核系統(tǒng),多線程技術(shù)充分應(yīng)用了CPU的空閑時(shí)間片,利用空閑時(shí)間片在主線程與次線程之間進(jìn)行切換,由于系統(tǒng)切換速度快,所以兩個(gè)程序可視為同時(shí)運(yùn)行。

多線程技術(shù)主要是線程池技術(shù)與異步定時(shí)器,線程池技術(shù)利用線程池對(duì)多個(gè)線程進(jìn)行分配,適用于不定時(shí)事件。異步定時(shí)器使用的是Windows多媒體定時(shí)器,適用于定時(shí)循環(huán)事件,當(dāng)有多個(gè)異步事件執(zhí)行時(shí),優(yōu)先采用線程池技術(shù)。

3 Modbus協(xié)議實(shí)現(xiàn)

3.1 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)

自動(dòng)卷煙控制系統(tǒng)包含5個(gè)站點(diǎn),上位機(jī)作為主站點(diǎn),4個(gè)從站對(duì)應(yīng)4個(gè)執(zhí)行機(jī)構(gòu),其網(wǎng)絡(luò)拓?fù)淙鐖D3所示,主站需要實(shí)現(xiàn)的功能主要有3個(gè)方面:(1)輪詢功能。實(shí)時(shí)查詢子站的轉(zhuǎn)速信息,位置信息以及極限位置信息。(2)獨(dú)立控制功能。單獨(dú)控制從站執(zhí)行機(jī)構(gòu)動(dòng)作,例如啟動(dòng),停止。(3)參數(shù)刷新功能。刷新參數(shù)信息,如轉(zhuǎn)速,運(yùn)動(dòng)位置等。

3.2 線程分配

輪詢功能及參數(shù)刷新功能在系統(tǒng)運(yùn)行過程中持續(xù)執(zhí)行,如果在主線程中完成,會(huì)使CPU一直處于忙狀態(tài),無法響應(yīng)界面對(duì)從站的單獨(dú)操作,造成界面響應(yīng)與實(shí)時(shí)性任務(wù)存在沖突。解決辦法是開辟新的線程,將輪詢功能以及參數(shù)刷新功能放到次線程中完成,這樣既能保證系統(tǒng)能及時(shí)響應(yīng),又保證實(shí)時(shí)任務(wù)順利執(zhí)行。程序初始化時(shí),新建線程池,調(diào)用線程池分配函數(shù)CmtScheduleThreadPoolFunetionAdv()新建輪詢線程PollThread(),發(fā)送線程SendRTUThread()以及接收線程ReceiveRTUThread()。輪詢線程實(shí)現(xiàn)輪詢功能,通過通訊操作獲取從站的實(shí)時(shí)信息,發(fā)送線程和接收線程針對(duì)用戶的界面操作,分別完成從站的獨(dú)立控制功能。

3.3 Modbus協(xié)議實(shí)現(xiàn)

3.3.1 線程安全變量定義

通信過程中,多個(gè)線程訪問的全局變量有兩種,分別是發(fā)送和接收信息幀。各從站的速度和位置等信息,由于變量較多且類型不一,如果全部定義線程安全變量,可能會(huì)造成線程發(fā)生阻塞,故將集中訪問的變量定義為結(jié)構(gòu)體變量,再調(diào)用DefineThreadSafeVar。(VarType,VarName)將結(jié)構(gòu)體變量聲明為線程安全變量。每次訪問這些變量之前,都需要調(diào)用函數(shù)GetPointerToVarName(void)獲取對(duì)應(yīng)線程安全變量的指針,訪問完后,調(diào)用ReleasePointerVarName(void)函數(shù)及時(shí)釋放指針。

主程序中定義了Modhus RTU幀的結(jié)構(gòu)類型,如下

typedef struct

{

int ByteLength;//幀內(nèi)字節(jié)數(shù)

unsigned char message[256];//幀信息數(shù)組

}Message;

幀變量用來存放發(fā)送幀或是接收幀的全部信息,針對(duì)每個(gè)從站定義了結(jié)構(gòu)變量類型,表征從站的特征信息,如下

typedef struct

{

int velocity;//速度信息

int codevalue;//編碼器信息

int startplace;//起始位置

int endplace;//終止位置

int slavestate;//子站在線狀態(tài)

int errorstate;//子站錯(cuò)誤狀態(tài),用于異常響應(yīng)

}Slave;

3.3.2 應(yīng)用層協(xié)議實(shí)現(xiàn)

輪詢線程周期性地查詢各個(gè)子站,發(fā)送線程完成主站對(duì)從站的單獨(dú)控制功能并及時(shí)響應(yīng)界面事件。其次,新建一個(gè)異步定時(shí)器,完成參數(shù)的定時(shí)刷新。為保證界面響應(yīng)的實(shí)時(shí)性,對(duì)3個(gè)線程的優(yōu)先級(jí)進(jìn)行規(guī)定,優(yōu)先級(jí)從高到低為發(fā)送線程,接收線程,輪詢線程,異步定時(shí)器。

每個(gè)線程都需完成主站與從站之間的通信,將Modbus主站的一次通信分解為3個(gè)流程,分別是發(fā)送,接收和幀解析,完成3個(gè)流程則表明主站與從站完成了一次完整的通信。定義發(fā)送函數(shù)SendMessage()、接收函數(shù)ReceiveMessage()與幀分析FrameAnalyze()完成上述流程,以方便各個(gè)線程調(diào)用,程序流程圖如圖4所示,發(fā)送程序內(nèi)的幀間字符延時(shí)通過函數(shù)SyncWait()實(shí)現(xiàn),要求>3.5個(gè)字符時(shí)間。

每個(gè)線程都為主程序預(yù)留了標(biāo)志位,主線程通過置位while循環(huán)標(biāo)志位來完成對(duì)線程的控制。輪詢線程在程序運(yùn)行過程中循環(huán)執(zhí)行,并且由異步定時(shí)器實(shí)時(shí)獲取最新的參數(shù)信息實(shí)時(shí)刷新界面;發(fā)送線程完成主站請(qǐng)求功能,接收線程獲取從站的響應(yīng)信息,解析從站接收是否正常并做出規(guī)定動(dòng)作。發(fā)送和接收線程僅在響應(yīng)界面事件時(shí)執(zhí)行一次。

串口作為公共硬件資源,存在多個(gè)線程占用的問題,LabWindows/CVI為訪問串口提供了一系列的接口訪問函數(shù)。為避免各線程造成訪問沖突,采用類似線程鎖的機(jī)制來處理,將串口視為一個(gè)全局變量,為每個(gè)串口分配一個(gè)線程鎖對(duì)象,任何時(shí)候訪問串口之前都必須獲取線程鎖,訪問完畢之后及時(shí)釋放。

4 實(shí)驗(yàn)驗(yàn)證

軟件運(yùn)行界面圖5所示。卷煙控制系統(tǒng)對(duì)完成空煙管填充的要求為卷煙時(shí)間<1.5 min,成煙重量為6.500±0.010 g。點(diǎn)擊開始操作之后系統(tǒng)自動(dòng)運(yùn)行完成卷煙動(dòng)作,在系統(tǒng)運(yùn)行過程中,需不斷發(fā)送查詢指令輪詢各從站轉(zhuǎn)速及位置信息,由異步定時(shí)器進(jìn)行刷新,每個(gè)從站都能單獨(dú)控制啟動(dòng)、停止和復(fù)位功能,卷煙過程中不會(huì)發(fā)生死鎖現(xiàn)象。以10支空煙管為例,記錄完成每支煙管卷煙完成的時(shí)間以及重量,試驗(yàn)結(jié)果如表1所示。

5 結(jié)束語

利用LabWindows/CVI實(shí)現(xiàn)Modbus通信,充分發(fā)揮了虛擬儀器開發(fā)的便捷功能,完成了實(shí)時(shí)性控制工作。相比于使用組態(tài)王等軟件,其功能更為豐富,并且可以充分利用多線程技術(shù),合理分配多個(gè)實(shí)時(shí)性任務(wù),保證多個(gè)并發(fā)任務(wù)順利執(zhí)行。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在數(shù)字化時(shí)代,網(wǎng)絡(luò)已成為我們生活和工作中不可或缺的一部分。然而,隨著網(wǎng)絡(luò)的普及和依賴程度的加深,網(wǎng)絡(luò)安全威脅也日益嚴(yán)峻。保護(hù)個(gè)人和企業(yè)的網(wǎng)絡(luò)安全,不僅關(guān)乎隱私和財(cái)產(chǎn)安全,更是維護(hù)社會(huì)穩(wěn)定和國家安全的重要一環(huán)。本文旨在介紹...

關(guān)鍵字: 網(wǎng)絡(luò)安全 數(shù)據(jù)保護(hù)

在數(shù)字化時(shí)代,數(shù)據(jù)的價(jià)值無可估量,它不僅是企業(yè)運(yùn)營的核心資產(chǎn),也是個(gè)人生活的重要記錄。因此,確保數(shù)據(jù)的完整性和安全性,防止數(shù)據(jù)丟失或損壞,成為存儲(chǔ)器設(shè)計(jì)中的重要考量。本文將探討一系列數(shù)據(jù)保護(hù)策略,旨在幫助設(shè)計(jì)師在存儲(chǔ)器設(shè)...

關(guān)鍵字: 數(shù)據(jù)保護(hù) 存儲(chǔ)器設(shè)計(jì)

線程切換能夠在一個(gè) CPU 周期內(nèi)完成(實(shí)際上可以沒有開銷,上個(gè)周期在運(yùn)行線程A,下個(gè)周期就已在運(yùn)行線程B)。這樣子看起來像是每個(gè)線程是獨(dú)自運(yùn)行的,沒有其他線程與目前共享硬件資源。

關(guān)鍵字: 線程 多線程

在現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)中,CPU緩存(Cache)作為CPU與內(nèi)存之間的關(guān)鍵橋梁,對(duì)于提升程序性能,尤其是多線程程序的性能,起著至關(guān)重要的作用。隨著多核處理器成為主流,如何在多線程環(huán)境中高效利用CPU緩存成為了一個(gè)重要的研...

關(guān)鍵字: 多線程 CPU緩存

在Linux多線程編程中,同步機(jī)制是確保多個(gè)線程之間能夠有序、協(xié)調(diào)地訪問共享資源的關(guān)鍵。其中,條件變量(Condition Variable)作為一種重要的同步工具,廣泛應(yīng)用于多種復(fù)雜的多線程場景,如生產(chǎn)者-消費(fèi)者問題、...

關(guān)鍵字: Linux 多線程 條件變量

485通訊協(xié)議的特點(diǎn)有:RS-485的數(shù)據(jù)最高傳輸速率為10Mbps;RS-485接口強(qiáng),即抗噪聲干擾性好。

關(guān)鍵字: modbus 通訊協(xié)議 485通信

Modbus通信協(xié)議的歷史可以追溯到1979年,當(dāng)時(shí)Modicon公司(現(xiàn)在的施耐德電氣Schneider Electric)發(fā)明了這種通信協(xié)議,目的是為工業(yè)現(xiàn)場提供一種通用的通信標(biāo)準(zhǔn),以實(shí)現(xiàn)不同設(shè)備之間的數(shù)據(jù)交換和控制...

關(guān)鍵字: modbus 工業(yè)控制

北京——2023年6月7日 全球云安全領(lǐng)域的行業(yè)盛會(huì)亞馬遜云科技re:Inforce 2023全球大會(huì)將于當(dāng)?shù)貢r(shí)間6月13日至14日在美國加利福尼亞州正式開啟。亞馬遜云科技將在re:Inforce 2023上,圍繞六大云...

關(guān)鍵字: 云安全 數(shù)據(jù)保護(hù) 云上系統(tǒng)

我們手里每天基本都有多個(gè)事情要做,很多人為了在短時(shí)間內(nèi)完成任務(wù),于是,開啟了“多線程”工作模式。比如:一邊寫代碼,一邊寫工作總結(jié),同時(shí)還在回復(fù)著工作群里的消息。

關(guān)鍵字: 多線程 工作阻力 代碼

摘要:針對(duì)計(jì)算機(jī)端口掃描技術(shù)的優(yōu)缺點(diǎn),采用多線程技術(shù),結(jié)合TCP全連接掃描,實(shí)現(xiàn)了基于C語言編程的網(wǎng)絡(luò)端口掃描及危險(xiǎn)端口關(guān)閉程序,旨在使端口關(guān)閉操作簡單化。

關(guān)鍵字: 多線程 危險(xiǎn)端口 簡單化
關(guān)閉