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

?

基于μC/OS—II和ModbusRTU協(xié)議的密集架控制軟件設(shè)計(jì)

2014-06-20 21:19:40張國(guó)宇鄒衛(wèi)軍
無線互聯(lián)科技 2014年2期

張國(guó)宇 鄒衛(wèi)軍

摘 要:本文提出了基于μC/OS-II和ModbusRTU協(xié)議的密集架控制軟件在Stm32F103R8T6平臺(tái)上的設(shè)計(jì)方法。重點(diǎn)闡述了μCOS-II操作系統(tǒng)的移植、ModbusRTU通信協(xié)議的實(shí)現(xiàn)方式和主要的應(yīng)用程序開發(fā)。

關(guān)鍵詞:Stm32;ModbusRTU;μCOS-II移植

密集架是自動(dòng)化倉(cāng)儲(chǔ)領(lǐng)域具有代表性的一類系統(tǒng)。它由一個(gè)固定列和多個(gè)移動(dòng)列組成,通常架體之間緊密排列,不預(yù)留任何通道;工作時(shí)通過PC機(jī)或固定列的人機(jī)交互界面打開指定的存取通道。這種“常態(tài)閉合,用時(shí)打開”的特點(diǎn),使得密集架系統(tǒng)能夠節(jié)省很大的倉(cāng)儲(chǔ)空間,同時(shí)具備較高的安全性。

密集架系統(tǒng)的核心是控制軟件及通信協(xié)議。由于系統(tǒng)中移動(dòng)列數(shù)目的不確定,使得固定列和移動(dòng)列之間的通信復(fù)雜度大幅提升,傳統(tǒng)的基于中斷響應(yīng)、前后臺(tái)架構(gòu)的控制軟件設(shè)計(jì)方式,已經(jīng)很難滿足系統(tǒng)在可靠性、擴(kuò)展性、開發(fā)效率以及模塊化結(jié)構(gòu)等方面的要求。引入嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)和高效的通訊協(xié)議,就成為提高密集架系統(tǒng)整體性能的關(guān)鍵因素。

本文提出了基于多任務(wù)實(shí)時(shí)操作系統(tǒng)μCOS-II和ModbusRTU協(xié)議的密集架控制軟件的設(shè)計(jì)方法。軟件采用基于ModBusRTU協(xié)議的“主從式”通信架構(gòu),并利用操作系統(tǒng)特性,將功能模塊劃分為多個(gè)任務(wù),由系統(tǒng)調(diào)度執(zhí)行。經(jīng)過實(shí)驗(yàn)測(cè)試,這種設(shè)計(jì)方法大大提升了密集架系統(tǒng)的穩(wěn)定性及程序的開發(fā)效率。

1 密集架系統(tǒng)工作原理

密集架系統(tǒng)通常由一個(gè)固定列和若干個(gè)移動(dòng)列組成,固定列和移動(dòng)列由嵌入式控制器控制,其結(jié)構(gòu)如圖1所示。

在密集架系統(tǒng)中,固定列作為核心,主要完成以下任務(wù):

⑴與PC上位機(jī)通信,處理下發(fā)的控制指令并反饋系統(tǒng)運(yùn)行狀態(tài)和傳感器信息;

⑵與本列的人機(jī)交互單元通信,處理下發(fā)的控制指令并反饋系統(tǒng)運(yùn)行狀態(tài)和傳感器信息;

⑶與所有的移動(dòng)列通信,實(shí)時(shí)查詢各個(gè)移動(dòng)列狀態(tài)并下發(fā)控制指令。

移動(dòng)列作為實(shí)際運(yùn)行的機(jī)構(gòu),需要處理以下任務(wù):

⑴與本列的人機(jī)交互單元通信,接收控制指令并反饋運(yùn)行狀態(tài);

⑵處理固定列下發(fā)的查詢指令和控制指令;執(zhí)行相應(yīng)控制動(dòng)作,反饋運(yùn)行狀態(tài)和傳感器信息。

由此可以看出,密集架系統(tǒng)控制軟件的核心,在于確保固定列和移動(dòng)列通信穩(wěn)定的基礎(chǔ)上,協(xié)調(diào)好來自上位機(jī)、人機(jī)交互單元和各個(gè)嵌入式控制器的控制指令和任務(wù),保證系統(tǒng)能夠及時(shí)高效的響應(yīng)控制動(dòng)作。

基于此,在密集架控制軟件的設(shè)計(jì)上,論文采用具有很強(qiáng)的實(shí)時(shí)性、較為完備的任務(wù)調(diào)度功能及穩(wěn)定的通信管理機(jī)制的μCOS-II實(shí)時(shí)操作系統(tǒng);并基于ModbusRTU協(xié)議構(gòu)建了軟件的通信框架。

2 μCOS-II操作系統(tǒng)移植

本文移植μCOS-II實(shí)時(shí)操作系統(tǒng)針對(duì)的是基于STM32F103R8T6 ARM芯片的硬件平臺(tái),需要完成與CPU相關(guān)和硬件相關(guān)的內(nèi)容的修改。

2.1 移植CPU相關(guān)內(nèi)容

和CPU相關(guān)內(nèi)容的移植,主要是利用CPU的定時(shí)器給操作系統(tǒng)提供時(shí)鐘。

μCOS-II為了處理任務(wù)延時(shí)和調(diào)度等一些時(shí)間相關(guān)任務(wù),需要由CPU的硬件定時(shí)器產(chǎn)生一個(gè)毫秒(ms)級(jí)的周期性中斷來提供一個(gè)系統(tǒng)時(shí)鐘。最小時(shí)鐘單位就是兩次中斷之間的時(shí)間,稱為時(shí)鐘節(jié)拍(Time Tick),考慮到CPU的執(zhí)行效率,本系統(tǒng)選擇10ms的時(shí)鐘節(jié)拍。

Stm32F103R8T6中,μCOS-II時(shí)鐘由“滴答時(shí)鐘”的中斷提供:

void SysTick_Handler(void)

{

OSIntEnter();//進(jìn)入中斷服務(wù)函數(shù)

OSTimeTick();//調(diào)用時(shí)鐘節(jié)拍服務(wù)函數(shù)

OSIntExit();//退出中斷服務(wù)函數(shù)

}

2.2 移植硬件相關(guān)內(nèi)容

(1)OS_CPU.C中的OSTaskInit(),它是任務(wù)的堆棧初始化代碼,在創(chuàng)建任務(wù)時(shí)必須成功調(diào)用這個(gè)函數(shù),否則會(huì)導(dǎo)致系統(tǒng)崩潰。

(2)OS_CPU.H中主要包含三個(gè)重要的函數(shù)定義,分別是:

·OS_ENTER_CRITICAL():進(jìn)入臨界區(qū)函數(shù),負(fù)責(zé)關(guān)中斷及保存全局中斷標(biāo)志位;

·OS_EXIT_CRITICAL():退出臨界區(qū)函數(shù),負(fù)責(zé)恢復(fù)全局中斷標(biāo)志位,和OS_ENTER_CRITICAL()函數(shù)成對(duì)使用,兩個(gè)函數(shù)之間的代碼稱為“臨界段”。進(jìn)入臨界保護(hù)函數(shù)時(shí)中斷關(guān)閉,臨界段在運(yùn)行期間不受中斷干擾,臨界段代碼執(zhí)行完畢,由OS_EXIT_CRITICAL()函數(shù)解除中斷屏蔽;

·OS_TASK_SW():任務(wù)級(jí)任務(wù)切換函數(shù),負(fù)責(zé)完成任務(wù)的正常切換,由任務(wù)級(jí)調(diào)度器OSSched()調(diào)用。

(3)OS_CPU_A.ASM是μCOS-II唯一的匯編文件,這個(gè)文件主要涉及到任務(wù)切換、啟動(dòng)優(yōu)先級(jí)最高的任務(wù)、中斷開關(guān)等函數(shù)。

·μCOS-II啟動(dòng)多任務(wù)的函數(shù)是OSStart(),用戶在調(diào)用該函數(shù)之前至少需要?jiǎng)?chuàng)建一個(gè)任務(wù)。在執(zhí)行OSStart()函數(shù)時(shí),將調(diào)用OSStartHighRdy()運(yùn)行多任啟動(dòng)前優(yōu)先級(jí)最高的任務(wù),使得系統(tǒng)整個(gè)得以運(yùn)轉(zhuǎn)。

·OSCtxSw()是任務(wù)級(jí)的上下文切換函數(shù),它被OS_CPU.H中的OS_TASK_SW()所調(diào)用;OSIntCtxSw()是中斷級(jí)的任務(wù)切換,它被OSIntExit()調(diào)用,在μCOS-II運(yùn)行完中斷服務(wù)程序之后完成中斷級(jí)任務(wù)調(diào)度。

·OS_CPU_SR_Save()、OS_CPU_SR_Restore()分別被OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()調(diào)用,主要負(fù)責(zé)屏蔽中斷和恢復(fù)中斷。

在移植過程中,根據(jù)用戶的實(shí)際需要,可以對(duì)配置文件OS_CFG.H進(jìn)行修改,從而實(shí)現(xiàn)μCOS-II內(nèi)核的剪裁。

3 基于μCOS-II和Modbus RTU協(xié)議的控制軟件設(shè)計(jì)

根據(jù)密集架控制軟件的設(shè)計(jì)架構(gòu),固定列控制軟件所面臨的數(shù)據(jù)通信處理的復(fù)雜程度遠(yuǎn)超移動(dòng)列,且固定列ModbusRTU協(xié)議實(shí)現(xiàn)機(jī)理和移動(dòng)列完全相同,主要的應(yīng)用程序也涵蓋了移動(dòng)列應(yīng)用程序的主要設(shè)計(jì)思想。因此,本文僅以固定列為樣例,來介紹基于μCOS-II和Modbus RTU協(xié)議的控制軟件設(shè)計(jì)。

3.1 Modbus RTU協(xié)議

在密集架系統(tǒng)中,使用“一主多從”的Modbus RTU通信模式,其中固定列作為主設(shè)備,移動(dòng)列作為擁有唯一地址的從設(shè)備。固定列和移動(dòng)列之間可以進(jìn)行通信,而移動(dòng)列之間則不能通信。通信的具體流程為:

⑴固定列以中斷方式接收本列人機(jī)交互界面和上位機(jī)發(fā)送的功能碼為06的控制幀;

⑵固定列以固定時(shí)間間隔依次向各移動(dòng)列發(fā)送功能碼為03的查詢幀;

⑶收到查詢幀的移動(dòng)列向固定列反饋當(dāng)前狀態(tài)信息,包括:本列運(yùn)行狀態(tài)、本列人機(jī)交互界面下發(fā)的控制指令、本列傳感器信息;

⑷固定列綜合系統(tǒng)當(dāng)前狀態(tài)和控制指令要求,確定控制邏輯,并向相應(yīng)移動(dòng)列發(fā)送功能碼為06的控制幀;

⑸收到控制幀的移動(dòng)列根據(jù)指令要求完成控制動(dòng)作。

3.2 基于μCOS-II的多任務(wù)機(jī)制設(shè)計(jì)

⑴用戶任務(wù):完成來自上位機(jī)、人機(jī)交互界面和移動(dòng)列各種通信數(shù)據(jù)的綜合解析工作,是控制指令得以正確實(shí)現(xiàn)的關(guān)鍵任務(wù)。

⑵RS232通信任務(wù):負(fù)責(zé)和本列人機(jī)交互界面的通信工作,任務(wù)初始化后始終保持等待信號(hào)量狀態(tài)。主芯片的串口中斷實(shí)時(shí)接收觸摸屏命令,當(dāng)接收到完整的數(shù)據(jù)幀后,調(diào)用OSSemPost()函數(shù)發(fā)送信號(hào)量,通知RS232通信任務(wù)激活ModbusRTU協(xié)議解析任務(wù),并根據(jù)解析出的控制指令反饋響應(yīng)信息或者保存按鍵命令。

⑶RS485通信任務(wù):和RS232通信任務(wù)類似,它由對(duì)應(yīng)的RS485接收函數(shù)調(diào)用OSSemPost()函數(shù)激活,負(fù)責(zé)和各個(gè)移動(dòng)列之間的信息交互,是密集架網(wǎng)絡(luò)穩(wěn)定運(yùn)行的核心任務(wù)。移動(dòng)列數(shù)目較多,通信非常復(fù)雜,為了保證控制指令的實(shí)時(shí)性,必須將RS485通信任務(wù)的優(yōu)先級(jí)設(shè)為所有任務(wù)的最高級(jí)。它的主要工作是:解析并保存“輪詢”到的移動(dòng)列狀態(tài)信息、傳感器信息、按鍵信息,等待用戶任務(wù)的使用。

⑷網(wǎng)絡(luò)通信任務(wù):由對(duì)應(yīng)的網(wǎng)絡(luò)接收函數(shù)調(diào)用OSSemPost()函數(shù)激活,主要負(fù)責(zé)和PC上位機(jī)之間的信息交互,使得用戶可以借助網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程控制密集架系統(tǒng)。

⑸ModbusRTU協(xié)議解析任務(wù):該任務(wù)由以上三個(gè)數(shù)據(jù)通信任務(wù)中的任意一個(gè)激活,它的主要工作是:根據(jù)ModbusRTU數(shù)據(jù)幀規(guī)范,解析及保存固定列和上位機(jī)、固定列和移動(dòng)列之間傳輸?shù)臄?shù)據(jù)幀。

ModbusRTU協(xié)議規(guī)定數(shù)據(jù)幀之間的間隔至少是3.5個(gè)字符,而Stm32F103R8T6的串口不具備超時(shí)中斷。因此,采用基于定時(shí)器中斷的串口數(shù)據(jù)接收方法以確定ModbusRTU數(shù)據(jù)幀是否傳輸完成。

ModbusRTU數(shù)據(jù)幀在串口傳輸過程中,字符與字符之間的數(shù)據(jù)間隔很短,如果串口接收數(shù)據(jù)過程,出現(xiàn)較長(zhǎng)時(shí)間接收不到數(shù)據(jù)的情況,則說明當(dāng)前ModbusRTU數(shù)據(jù)幀已經(jīng)傳輸完畢,后面再有新的數(shù)據(jù)接收,則作為下一幀ModbusRTU數(shù)據(jù)幀處理。本文正是利用ModbusRTU協(xié)議的這種特性,借助定時(shí)器中斷來實(shí)現(xiàn)ModbusRTU完整數(shù)據(jù)幀的判斷的,串口中斷接收到第一個(gè)字節(jié)的數(shù)據(jù)后,啟動(dòng)定時(shí)器,定時(shí)時(shí)間設(shè)為3.5個(gè)字符的串口傳輸時(shí)間(根據(jù)波特率進(jìn)行計(jì)算)。若在定時(shí)時(shí)間未到時(shí),收到下一字節(jié),則保存到同一數(shù)據(jù)幀;若定時(shí)時(shí)間已到,仍然沒有收到新的數(shù)據(jù),則觸發(fā)定時(shí)器中斷,通知對(duì)應(yīng)的通信處理任務(wù)已接收到完整數(shù)據(jù)幀,可以進(jìn)行相關(guān)數(shù)據(jù)處理。相關(guān)軟件流程見圖2:

μCOS-II是搶占式內(nèi)核,它按照任務(wù)優(yōu)先級(jí)的高低對(duì)任務(wù)進(jìn)行調(diào)度,因此任務(wù)優(yōu)先級(jí)的合理設(shè)置,對(duì)于密集架這種實(shí)時(shí)性要求較高的控制軟件來說尤為重要。在該軟件系統(tǒng)中,各任務(wù)的優(yōu)先級(jí)由高到低依次為:RS485通信任務(wù)、RS232通信任務(wù)、網(wǎng)絡(luò)通信任務(wù)、用戶任務(wù)。

綜合多任務(wù)機(jī)制的控制軟件主流程結(jié)構(gòu)圖如圖3所示。

4 結(jié)束語

本文探討了一種密集架控制軟件的設(shè)計(jì)方法,軟件基于ModbusRTU協(xié)議建立固定列和移動(dòng)列的通信,并利用了μCOS-II操作系統(tǒng)的多任務(wù)機(jī)制來合理安排密集架軟件各個(gè)功能模塊的執(zhí)行和協(xié)調(diào)。基于該架構(gòu)的控制軟件,已經(jīng)應(yīng)用于一套固定列+17列移動(dòng)列的復(fù)雜密集架系統(tǒng)。實(shí)踐表明,軟件運(yùn)行穩(wěn)定可靠,系統(tǒng)對(duì)控制指令響應(yīng)及時(shí),有效保證了密集架系統(tǒng)的穩(wěn)定性。

[參考文獻(xiàn)]

[1]任哲.嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II原理及應(yīng)用(第一版)[M].北京:北京航空航天大學(xué)出版社,2005年.

[2]意法半導(dǎo)體技術(shù)支持:STM32F103xxx參考手冊(cè).2010.

[3]意法半導(dǎo)體技術(shù)支持:Cotrex-M3權(quán)威指南.2007.

[4]李月恒,梁勝之,韓存武.基于STM32處理器的Modbus TCP/RTU網(wǎng)關(guān)設(shè)計(jì)[J].中國(guó)科技信息,2013,(9):76-77.

永春县| 望江县| 中卫市| 滦南县| 疏附县| 安多县| 舒兰市| 汉阴县| 桦南县| 泸水县| 广德县| 孟州市| 武冈市| 青河县| 乌拉特后旗| 库尔勒市| 邛崃市| 英超| 介休市| 桓台县| 静安区| 九台市| 塔河县| 唐山市| 凤山县| 福州市| 鹤庆县| 桦川县| 镇坪县| 阜南县| 泾川县| 九江县| 文山县| 榆树市| 武义县| 高州市| 霍城县| 沂源县| 涟水县| 沧州市| 柏乡县|