999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于μC/OS-Ⅱ上Modbus協(xié)議主站的簡易式系統(tǒng)設(shè)計

2014-01-21 00:53:22陳家林
電子設(shè)計工程 2014年22期
關(guān)鍵詞:服務(wù)系統(tǒng)

陳家林,賈 濤

(武漢工程大學(xué) 電 氣信息學(xué)院,湖北 武 漢 4 30000)

Modbus協(xié)議是由Modicon公司在1978年發(fā)明的,這是一個跨時代的、里程式的網(wǎng)絡(luò)協(xié)議,正式為工業(yè)網(wǎng)絡(luò)從此拉開了序幕。Modbus協(xié)議是全球第一個真正用于工業(yè)現(xiàn)場的總線協(xié)議。

本文主要是研究在μC/OS-Ⅱ?qū)崟r操作系統(tǒng)內(nèi)核上的Modbus協(xié)議主站的具體實(shí)現(xiàn),充分使用μC/OS-Ⅱ上所提供的實(shí)時性資源以及通過硬件上單片機(jī)和RS485接口實(shí)現(xiàn)與串行連接的從站設(shè)備進(jìn)行數(shù)據(jù)傳輸和交換。然而,目前市面上已經(jīng)存在的一些主站設(shè)備由于功耗、體積和通信實(shí)時性等原因限制了發(fā)展。特別是實(shí)時性要求,如果被測量的對象實(shí)時性要求很高,而測量的實(shí)時性又無法達(dá)到要求,會導(dǎo)致數(shù)據(jù)的精確度和準(zhǔn)確性大打折扣。可見,實(shí)時性要求對儀器儀表的測量是非常重要的。為了實(shí)現(xiàn)準(zhǔn)確檢測這個要求,本文特此提出了一個具有實(shí)時性要求的Modbus主站協(xié)議系統(tǒng)的設(shè)計方案[1-7]。

1 Modbus協(xié)議介紹

Modbus標(biāo)準(zhǔn)定義了 OSI模型第7層上的應(yīng)用層報文傳輸協(xié)議,它在連接至不同類型總線或網(wǎng)絡(luò)的設(shè)備之間提供客戶機(jī)/服務(wù)器通信。

1.1 Modbus串行鏈路協(xié)議

本文主要描述的是Modbus串行鏈路協(xié)議。Modbus串行鏈路協(xié)議是一個主/從協(xié)議。該協(xié)議位于OSI模型的第二層。在物理層,Modbus串行鏈路系統(tǒng)可以使用不同的物理接口(RS485、RS232)。在Modbus串行鏈路上客戶機(jī)的功能由主站提供而服務(wù)器功能由從站實(shí)現(xiàn)。Modbus串行鏈路協(xié)議是一個主/從協(xié)議。在同一時刻,只有一個主站連接于總線,一個或多個從站(最大編號為247)連接于同一個串行總線。

1.2 Modbus主站工作原理

當(dāng)電源上電后,主站的初始狀態(tài)為空閑狀態(tài)。主站只有在空閑狀態(tài)下才能發(fā)送請求。發(fā)送一個請求后,主站離開空閑狀態(tài),而且不能同時發(fā)送第二個請求。

當(dāng)單播請求發(fā)送出去后,主站將進(jìn)入等待應(yīng)答狀態(tài),同時一個臨界超時定時啟動。這個超時稱為"響應(yīng)超時"。它避免主站永遠(yuǎn)處于等待應(yīng)答狀態(tài)。當(dāng)收到一個應(yīng)答時,主站在處理數(shù)據(jù)之前檢驗(yàn)應(yīng)答。在某些情況下,檢驗(yàn)的結(jié)果可能為錯誤。當(dāng)未收到應(yīng)答響應(yīng)超時,也產(chǎn)生一個錯誤。產(chǎn)生錯誤后,主站進(jìn)入空閑狀態(tài)并準(zhǔn)備重發(fā)。若沒有錯誤產(chǎn)生,則正常處理數(shù)據(jù)并進(jìn)入空閑狀態(tài)。

當(dāng)廣播請求發(fā)送出時,是沒有從站會發(fā)出響應(yīng)的。這時主站需要進(jìn)行一個轉(zhuǎn)換延時以便從站能夠有足夠時間處理這次廣播請求。主站需要等待轉(zhuǎn)換延時結(jié)束后才可進(jìn)入到空閑狀態(tài)。

2 主站系統(tǒng)總體設(shè)計

考慮到Modbus主站與從站不同,其性質(zhì)是一個主動性的處理過程,而實(shí)際應(yīng)用中主站每一次發(fā)送出去的數(shù)據(jù)幀在請求時間周期、數(shù)據(jù)幀內(nèi)容以及處理要求上都不太一致。為了解決這些問題本設(shè)計在μC/OS-Ⅱ所提供的系統(tǒng)服務(wù)功能下,將主站系統(tǒng)分為3個部分:請求主站服務(wù)的用戶任務(wù)、主站服務(wù)管理任務(wù)、串口底層驅(qū)動函數(shù)。如圖1所示的主站系統(tǒng)邏輯結(jié)構(gòu)。

圖1 主站系統(tǒng)邏輯結(jié)構(gòu)圖Fig.1 Structure diagram of the simple master station system on Modbus protocol

請求主站服務(wù)的用戶任務(wù)是指的是那些用戶任務(wù)中有調(diào)用主站服務(wù)的需求,這類任務(wù)中包括了一個主站服務(wù)調(diào)用函數(shù),在本系統(tǒng)內(nèi)可以將它們看作是應(yīng)用層。主站系統(tǒng)中的主站管理任務(wù)是負(fù)責(zé)專門管理來自各個請求主站服務(wù)的任務(wù)的具體請求,同樣可以將它們看作是應(yīng)用層。串口底層的中斷處理實(shí)現(xiàn)了具體的數(shù)據(jù)發(fā)送與接收,可以將它們看作是數(shù)據(jù)鏈路層。這樣設(shè)計保證各個請求主站服務(wù)的任務(wù)按照CPU對任務(wù)調(diào)度執(zhí)行的順序依次循環(huán)調(diào)用主站服務(wù)和處理數(shù)據(jù)幀,都有平等的機(jī)會去請求主站服務(wù)。同時每個請求任務(wù)在發(fā)送出請求后可以繼續(xù)執(zhí)行任務(wù)代碼而不是處于等待狀態(tài),也保證了系統(tǒng)整體實(shí)時性的要求。

3 主站系統(tǒng)的具體實(shí)現(xiàn)

1)系統(tǒng)的主要硬件介紹

主站系統(tǒng)基于STM32L152RBT6為控制器的硬件環(huán)境而設(shè)計。STM32L152RBT6是屬于由ST公司的STM32L152系列微控制器,該系列屬于是超低功耗,高數(shù)據(jù)安全性,高效能的ARM Cortex-M3微控制器芯片。低功耗運(yùn)行模式電流為10.4 μA,工作電壓為 1.8~3.6 V。 能夠滿足實(shí)際的工業(yè)應(yīng)用中低功耗穩(wěn)定的需求。

主站系統(tǒng)的通信模塊采用的是SP3072EEN接口芯片。SP3072EEN是由Sipex公司設(shè)計生產(chǎn)的RS-485/RS422收發(fā)器,其工作電源電壓為 3.3 V,電源電流為 800 μA。SP3072EEN采用半雙工通訊方式,與單片機(jī)引腳連接簡單。它完成將TTL電平轉(zhuǎn)換為RS485電平的功能。

圖2 RS485轉(zhuǎn)換接口原理圖Fig.2 Principle diagram of RS485 conversion interface

2)μC/OS-Ⅱ環(huán)境的移植

μC/OS-Ⅱ移植工作主要是處理與處理器相關(guān)的源文件,即 os_cpu_c.c,os_cpu_a.s,os_cpu.h。 其中 os_cpu.h 主要包含編譯器相關(guān)的數(shù)據(jù)類型的定義、堆棧類型的定義以及幾個宏定義和函數(shù)說明,為了便于移植,須重新定義數(shù)據(jù)類型,因?yàn)椴煌木幾g器所提供的同一數(shù)據(jù)類型的數(shù)據(jù)長度并不相同。os_cpu_c.c文件中主要實(shí)現(xiàn)任務(wù)堆棧的初始化函數(shù)OSTaskStkInit(),任務(wù)創(chuàng)建函數(shù)通過調(diào)用函數(shù)OSTaskStkInit()初始化任務(wù)堆棧結(jié)構(gòu)。在os_cpu_a.s文件中需要根據(jù)具體的硬件處理器實(shí)現(xiàn)幾個匯編函 數(shù) OSstartHighRdy()、OSCtxSw()、OSIntetxsw 以 及臨 界處理函數(shù) OS_CPU_SR_Save,OS_CPU_SR_Restore。尤其需要注意的是,由于STM32是 cortex M3內(nèi)核,所以 OSCtxSw()、OSIntetxsw函數(shù)都是通過PendSV中斷來完成,它實(shí)際負(fù)責(zé)μC/OS-Ⅱ的所有上下文切換。

3)Modbus主站應(yīng)用層設(shè)計

圖3 主站系統(tǒng)軟件結(jié)構(gòu)圖Fig.3 Software structure diagram of master station system

主站應(yīng)用層設(shè)計時使用到μC/OS-Ⅱ所提供的3個系統(tǒng)服務(wù)功能:消息郵箱、消息隊列以及內(nèi)存管理功能。首先通過OSQCreate()、OSMboxCreate()函數(shù)進(jìn)行初始化,分別建立Buffaddress_Queue消息隊列和Rev_Msg郵箱。然后,為了滿足Modbus協(xié)議規(guī)定的每數(shù)據(jù)幀大小不超過256字節(jié),使用OSMemCreate()函數(shù)建立對應(yīng)的一個數(shù)據(jù)幀緩沖區(qū)塊,塊內(nèi)每個緩沖區(qū)大小設(shè)置為260字節(jié)。其中前256字節(jié)為實(shí)際Modbus緩沖區(qū)大小,后4字節(jié)用來存放各個請求的處理標(biāo)志和底層收發(fā)信息包括底層接收字節(jié)數(shù)Rx和發(fā)送字節(jié)數(shù)Tx以及處理標(biāo)志handle,none預(yù)留。緩沖區(qū)格式如圖4所示。

圖4 緩沖區(qū)格式圖Fig.4 Structure diagram of the buffer

消息隊列Buffaddress_Queue作為連接用戶請求任務(wù)和主站調(diào)用任務(wù)的橋梁,其作用是將用戶申請作為自身任務(wù)數(shù)據(jù)幀的內(nèi)存塊地址作為消息內(nèi)容傳遞給主站管理任務(wù)。消息郵箱Rev_Msg作為主站管理任務(wù)與底層驅(qū)動函數(shù)之間的同步信號,并啟用超時機(jī)制,實(shí)現(xiàn)Modbus上響應(yīng)超時和轉(zhuǎn)換延時功能。最后,內(nèi)存管理為各個請求任務(wù)分配獨(dú)立的數(shù)據(jù)幀空間,并統(tǒng)一交予主站管理任務(wù)處理。

Host_admin_task()主站管理任務(wù)的具體執(zhí)行過程如圖5所示。主站管理任務(wù)得優(yōu)先級比所有請求主站服務(wù)任務(wù)都要低,以便最后接收到所有的請求并依次處理。調(diào)用OSQPend()等待消息隊列Buffaddress_Queue中的具體消息,一旦得到消息內(nèi)容,就將該內(nèi)容作為緩沖區(qū)首地址,并預(yù)先處理該緩沖區(qū)的后4字節(jié)內(nèi)容,將handle初始化為0,將Rx和Tx導(dǎo)入底層函數(shù)。隨后調(diào)用底層函數(shù)完成具體發(fā)送和接收。然后調(diào)用OSMboxPend()等待接收郵箱Rev_Msg,等待時間設(shè)置為1s,由于轉(zhuǎn)換延時時間小于響應(yīng)超時,這里統(tǒng)一設(shè)為一種超時計時方式。最后,如果正常接收Rx個字節(jié),對應(yīng)修改緩沖區(qū)中的handle標(biāo)志為1(已接收),若出現(xiàn)超時或者發(fā)送命令錯誤則統(tǒng)一修改緩沖區(qū)中的標(biāo)志為2(超時)。

圖5 主站管理任務(wù)流程圖Fig.5 Flow chart of the host_admin_task()

Service_call()主站服務(wù)請求函數(shù)的具體執(zhí)行過程如圖6所示。首先調(diào)用OSMemGet()申請一個緩沖區(qū)作為任務(wù)的數(shù)據(jù)幀空間。若申請成功則填充數(shù)據(jù)幀,填充數(shù)據(jù)幀不要超過256字節(jié)大小。最后發(fā)送緩沖區(qū)地址給消息隊列Buffaddress_Queue。若填充溢出或者發(fā)送隊列失敗則需要及時調(diào)用OSMemPut()釋放掉申請的緩沖區(qū)。

圖6 主站服務(wù)請求函數(shù)流程圖Fig.6 Flow chart of the service_call()

Host_apply()主站調(diào)用函數(shù)具體執(zhí)行過程如圖7所示。主站調(diào)用函數(shù)是基于state請求狀態(tài)的處理。state請求狀態(tài)作為任務(wù)里的靜態(tài)變量,與任務(wù)里的每一個請求任都相對應(yīng),表示當(dāng)前請求任務(wù)在主站系統(tǒng)中的狀態(tài)信息,state有4種狀態(tài):0空閑可用;1已回復(fù);2回復(fù)超時;3已請求。主站調(diào)用函數(shù)根據(jù)state狀態(tài)完成具體的請求和處理工作。當(dāng)state為1時,進(jìn)行數(shù)據(jù)幀校驗(yàn)和上層應(yīng)用處理。當(dāng)state為2時,進(jìn)行釋放緩沖區(qū),準(zhǔn)備重新請求。當(dāng)state為0時,請求主站服務(wù)Service_call()。當(dāng)state為3時,讀取緩沖區(qū)處理標(biāo)志handle,檢測是否接收或者超時。

圖7 主站調(diào)用函數(shù)流程圖Fig.7 Flow chart of the host_apply()

4)Modbus主站底層驅(qū)動設(shè)計

串口底層驅(qū)動是由STM32中的usart外設(shè)中斷服務(wù)函

數(shù)完成。Usart外設(shè)的中斷處理服務(wù)函數(shù)完成對

usart_low_output()底層發(fā)送函數(shù)和usart_low_input()底層接收

函數(shù)的調(diào)用。在底層接收函數(shù)usart_low_input()中,判斷了是

否正確接收規(guī)定的字節(jié)數(shù),若接收字節(jié)小于或者未接收都認(rèn)

為超時錯誤。

底層接收函數(shù)的部分代碼:

Void usart_low_output(uint8_t*Datas)//參數(shù)為將要發(fā)送的數(shù)據(jù)

{

if(TxBytes!=0)

{

USART_SendData(USART,*Datas);//STM32串口驅(qū)動發(fā)送函數(shù)

Datas++;

TxBytes--;//全局變量TxBytes當(dāng)前主站需發(fā)送的字節(jié)數(shù)

}

else

{

USART_ITConfig(USART,USART_IT_RXNE,ENABLE);//啟動接收中斷

RxBytes=Datas[257];//當(dāng)前主站需接收的字節(jié)數(shù)

}

}

底層發(fā)送函數(shù)的部分代碼:

Void usart_low_input(uint8_t*Buff)//參數(shù)為將要接收數(shù)據(jù)的緩沖區(qū)地址

{

if(RxBytes!=0)

{

Buff++;

RxBytes--;

}

else//接收完畢

{

USART_ITConfig(USART,USART_IT_RXNE,DISABLE);//關(guān)閉接收中斷

OSMboxPost(Rev_Msg,&RxBytes);

}

}

4 主站系統(tǒng)應(yīng)用測試

系統(tǒng)測試通過將單片機(jī)通過RS485轉(zhuǎn)串口與電腦串口連接并使用modbus slave軟件作為通信的從設(shè)備。建立了5個從設(shè)備連接到主站系統(tǒng)中,從設(shè)備ID號為1~5,每個從設(shè)備都帶有10個寄存器,測試主站的0x03讀取輸入寄存器功能。同時,在主站系統(tǒng)中建立了5個請求主站任務(wù),每個任務(wù)都周期性500 ms調(diào)度一次,按照任務(wù)自身優(yōu)先級順序進(jìn)行主站請求發(fā)送,發(fā)送命令為03,寄存器個數(shù)為10。測試結(jié)果表明slave中每個從設(shè)備都周期性的獲取到主站服務(wù)并成功完成了接收和發(fā)送。

5 結(jié)論

簡易式主站系統(tǒng)通過使用μC/OS-Ⅱ?qū)崟r操作系統(tǒng)內(nèi)核帶來的一些系統(tǒng)服務(wù)功能使得整個主站系統(tǒng)變得穩(wěn)定和具有實(shí)時性。該主站系統(tǒng)能夠完成一些主要的命令單播的發(fā)送與接收,并能簡單的處理從設(shè)備超時重發(fā)和廣播轉(zhuǎn)換延時等問題,保證了整體系統(tǒng)實(shí)時性和穩(wěn)定性,并能與上位機(jī)軟件進(jìn)行正常通信,達(dá)到了主站系統(tǒng)的設(shè)計要求,同時簡易式主站系統(tǒng)也提供了移植到其他嵌入式環(huán)境的可能。

[1]方羽,梁廣瑞,羅覃東.基于uCOS_Ⅱ的MODBUS協(xié)議的實(shí)現(xiàn)[J].裝備制造技術(shù),2009(1):83-84.FANG Yu,LIANG Guang-rui,LUO Qin-dong.The Implementation of Modbus Protocol Based on uCOS_II[J].Equipment Manufacturing Technology,2009(1):83-84.

[2]李振東.Modbus協(xié)議的工業(yè)PLC監(jiān)控儀表設(shè)計[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012(4):5-8.LI Zhen -dong.Modbus Protocol Monitoring Instrument for Industrial PLC [J].Microcontrollers&Embedded Systems.2012(4):5-8.

[3]余杰,李鐵輝.基于MODBUS協(xié)議的串口控件的實(shí)現(xiàn)[J].微計算機(jī)信息,2008(21):79-81.YU Jie,LI Tie -h(huán)ui.The Realization of Serial Port ActiveX Control Based on Modbus Protocol[J].Microcomputer Information,2008(21):79-81.

[4]邵貝貝.嵌入式實(shí)時操作系統(tǒng)μC/OS-II[M].2版.北京:北京航空航天大學(xué)出版社,2003.

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

[6]華镕.從Modbus到透明就緒[M].北京:機(jī)械工業(yè)出版社,2009.

[7]張利平,劉寧,董樹泉.基于Modbus協(xié)議CP341與BENTLY3500之間的通訊[J].工業(yè)儀表與自動化裝置,2011(2):86-87.ZHANG Li-ping,LIU Ning,DONG Shu-quan.The communication between CP341 and BENTLY3500 based on Modbus protocol [J].Industrial Instrumentation&Automation,2011(2):86-87.

猜你喜歡
服務(wù)系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
半沸制皂系統(tǒng)(下)
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
主站蜘蛛池模板: 精久久久久无码区中文字幕| 内射人妻无套中出无码| 9999在线视频| 日韩国产黄色网站| 天天躁夜夜躁狠狠躁图片| 亚洲va在线∨a天堂va欧美va| 色综合激情网| 欧美一级视频免费| 亚洲欧美日韩中文字幕一区二区三区| 国产波多野结衣中文在线播放| 亚洲中文字幕无码爆乳| 成人国产精品视频频| yjizz国产在线视频网| 日本成人不卡视频| 久久综合婷婷| 波多野结衣在线se| 欧美19综合中文字幕| 欧美不卡二区| 国产本道久久一区二区三区| 国产黄色视频综合| 在线观看91精品国产剧情免费| 日韩av高清无码一区二区三区| 色婷婷视频在线| 色精品视频| 国产精品亚洲欧美日韩久久| 白浆免费视频国产精品视频| 免费啪啪网址| h网址在线观看| 人妻丰满熟妇av五码区| 乱人伦视频中文字幕在线| 老司国产精品视频| 中文字幕资源站| 国产高清在线观看| 强奷白丝美女在线观看| 国产91在线|中文| 亚洲日韩欧美在线观看| 久久亚洲AⅤ无码精品午夜麻豆| 亚州AV秘 一区二区三区| 综合久久五月天| 任我操在线视频| 麻豆国产精品一二三在线观看| 久久婷婷五月综合97色| 国产夜色视频| 萌白酱国产一区二区| 狠狠色香婷婷久久亚洲精品| 久久久噜噜噜久久中文字幕色伊伊 | 欧美亚洲一区二区三区在线| 91免费观看视频| 国产成人三级| 性69交片免费看| 中文字幕不卡免费高清视频| 亚洲第一黄色网址| 国产一区二区三区在线精品专区| 凹凸国产熟女精品视频| 无码又爽又刺激的高潮视频| 无码福利日韩神码福利片| 精品一区二区三区自慰喷水| 色妞永久免费视频| 91福利一区二区三区| 国产幂在线无码精品| 亚洲中文无码h在线观看| 一级毛片无毒不卡直接观看| 四虎影视库国产精品一区| 欧美一级视频免费| av大片在线无码免费| 亚洲最大在线观看| 亚州AV秘 一区二区三区| 久久99国产综合精品女同| 国产女人爽到高潮的免费视频| 色综合天天综合| 免费毛片a| 久久精品电影| 91国内视频在线观看| 亚洲精品在线影院| 亚洲成人黄色在线观看| 草逼视频国产| 欧美另类视频一区二区三区| a毛片在线播放| 久热精品免费| 欧美激情第一区| 色哟哟精品无码网站在线播放视频| 久久9966精品国产免费|