摘 要: 介紹一種基于STM32芯片的Modbus-Modbus TCP/IP網(wǎng)關(guān)系統(tǒng),,系統(tǒng)采用μCOSII嵌入式實(shí)時(shí)操作系統(tǒng),,實(shí)現(xiàn)Modbus串行鏈路到以太網(wǎng)的協(xié)議轉(zhuǎn)換,利用多線程與存儲(chǔ)池技術(shù)解決速率不匹配問題,,最后對(duì)系統(tǒng)的通信質(zhì)量進(jìn)行相關(guān)測(cè)試。實(shí)驗(yàn)結(jié)果表明,,系統(tǒng)方案能夠在低廉的成本下,,有效、準(zhǔn)確地進(jìn)行Modbus串行鏈路與以太網(wǎng)的相互通信,。
關(guān)鍵詞: Modbus協(xié)議,;移植;協(xié)議轉(zhuǎn)換,;多線程與存儲(chǔ)池
“十二五”規(guī)劃綱要將“智能電網(wǎng)”正式納入國家發(fā)展戰(zhàn)略,,特別提出“現(xiàn)代電網(wǎng)體系要適應(yīng)大規(guī)模跨區(qū)輸電和新能源發(fā)電并網(wǎng)的要求,。進(jìn)一步擴(kuò)大輸電規(guī)模,,完善主干電網(wǎng),依托信息,、控制和儲(chǔ)能等先進(jìn)技術(shù),,推進(jìn)智能電網(wǎng)建設(shè)。”電網(wǎng)主要包含了發(fā)電,、輸電,、變電、配電,、用電和其他輔助部分[1],。低壓的配電和用電端是智能電網(wǎng)的末端,是電能最主要的消耗部分,,大約占到80%,。因此智能電網(wǎng)的建設(shè)要求配電和用電所需要的低壓電器必須具備數(shù)據(jù)通信與采集等智能化特性[2]。
當(dāng)前,,國內(nèi)外許多大型低壓電器設(shè)備廠的產(chǎn)品都支持Modbus總線標(biāo)準(zhǔn)。但是,,智能電網(wǎng)的信息化建設(shè)利用的是以太網(wǎng)等方式,,而非現(xiàn)場(chǎng)總線技術(shù)[3]。這就要求數(shù)據(jù)能在以太網(wǎng)與現(xiàn)場(chǎng)總線之間進(jìn)行交互,。
國外的幾大電器也都有相應(yīng)的網(wǎng)關(guān)設(shè)備,,但是價(jià)格昂貴。國內(nèi)目前也有些類似的產(chǎn)品出現(xiàn),,相對(duì)于國外的產(chǎn)品,,雖然在價(jià)格上有極大的優(yōu)勢(shì),但是通信速度較慢,,只能簡單地實(shí)現(xiàn)單鏈路的連接,,功能并不完善,。
開發(fā)一款價(jià)格低廉、性能優(yōu)越的網(wǎng)關(guān)設(shè)備是智能電網(wǎng)建設(shè)過程中一個(gè)必要的需求,。因此提出了一個(gè)在STM32F107芯片上實(shí)現(xiàn)Modbus-Modbus TCP/IP協(xié)議轉(zhuǎn)化的解決方案,,能在成本上和性能上同時(shí)滿足需求。
1 Modbus協(xié)議
Modbus是Modicon(現(xiàn)為施耐德電氣公司的一個(gè)品牌)在1979年開發(fā)的一項(xiàng)在OSI模型第7層的應(yīng)用層報(bào)文傳輸協(xié)議,,在過去幾十年已被大量地應(yīng)用于工業(yè)控制領(lǐng)域的開放的,、標(biāo)準(zhǔn)的、免費(fèi)的網(wǎng)絡(luò)通信協(xié)議[4],。它在連接至不同類型總線或網(wǎng)絡(luò)的設(shè)備之間提供客戶機(jī)/服務(wù)器通信:在串行鏈路上取決于TIA/EIA標(biāo)準(zhǔn)(232-F和485-A),,在TCP/IP上取決于 IETF標(biāo)準(zhǔn)(RFC793和RFC791)。
1.1 串行鏈路的通信
Modbus在串行鏈路采用主/從方式的通信協(xié)議,,即Modbus通信由主站發(fā)起,,從站在未收到主站請(qǐng)求時(shí),不能主動(dòng)發(fā)起數(shù)據(jù),。Modbus在串行鏈路上的通信幀包括地址域,、功能域、數(shù)據(jù)域和校驗(yàn)域,。
Modbus在串行鏈路上的通信幀分為RTU和ASCII兩種模式[5],,其中RTU模式通信幀中的8 bit數(shù)據(jù)包括2個(gè)4 bit十六進(jìn)制字符,相對(duì)于ASCII模式,,在表達(dá)相同的數(shù)據(jù)信息時(shí)RTU需要的位數(shù)較少,,在相同的傳輸速率下RTU有更高的數(shù)據(jù)吞吐量。
在RTU傳輸模式中,,用3.5個(gè)字符的時(shí)間間隔將報(bào)文幀區(qū)分開,,幀內(nèi)兩個(gè)字符之間的間隔必須小于1.5個(gè)字符時(shí)間,當(dāng)傳輸速率大于19 200 b/s時(shí),,可以采用1.750 ms的固定值替代3.5個(gè)字符時(shí)間作為幀間的延遲時(shí)間,,用750 ?滋s替代1.5個(gè)字符時(shí)間作為字符超時(shí)時(shí)間。
1.2 Modbus TCP/IP應(yīng)用數(shù)據(jù)單元
在基于TCP/IP的Modbus中,,每個(gè)應(yīng)用數(shù)據(jù)單元的結(jié)構(gòu)包含Modbus應(yīng)用報(bào)文頭,、功能碼域和數(shù)據(jù)域。其中MBAP(Modbus Application Protocol Header)的報(bào)文頭長度為7 B,,該報(bào)文的字段如表1所示,。
1.3 Modbus串行鏈路和Modbus TCP/IP轉(zhuǎn)換
要使在串行鏈路傳輸?shù)腗odbus數(shù)據(jù)包能在以太網(wǎng)進(jìn)行無阻礙、準(zhǔn)確的傳輸,,必須對(duì)串行鏈路上的數(shù)據(jù)包或以太網(wǎng)數(shù)據(jù)包進(jìn)行處理,、轉(zhuǎn)化。一般的辦法是以TCP/IP協(xié)議為基礎(chǔ),將數(shù)據(jù)量較小的串行鏈路上的數(shù)據(jù)包封裝在TCP/IP幀中,。由于Modbus在串行鏈路中的幀格式不同于在TCP/IP中傳輸?shù)膸袷?,因此在進(jìn)行TCP/IP封裝前必須將Modbus在串行鏈路中的幀格式轉(zhuǎn)換成Modbus TCP/IP應(yīng)用數(shù)據(jù)單元結(jié)構(gòu)。同樣地,,對(duì)于在以太網(wǎng)上輸出的Modbus數(shù)據(jù)包,,必須先對(duì)TCP/IP數(shù)據(jù)包進(jìn)行拆包,之后再對(duì)數(shù)據(jù)內(nèi)容進(jìn)行幀格式轉(zhuǎn)換,,將Modbus TCP/IP的ADU轉(zhuǎn)換成串行鏈路上的ADU,,最后才能在串行鏈路上進(jìn)行通信。
2 系統(tǒng)硬件電路
STM32系列芯片是意法半導(dǎo)體專為要求高性能,、低成本,、低功耗的嵌入式應(yīng)用設(shè)計(jì)的ARM Cortex-M3內(nèi)核芯片。其中STM32F107互連型系列微控制器內(nèi)部集成高性能以太網(wǎng)模塊,,支持通過以太網(wǎng)進(jìn)行數(shù)據(jù)的收發(fā),。基于STM32F107的硬件電路如圖1所示,。
整個(gè)系統(tǒng)電路包含STM32F107最小單元,、以太網(wǎng)接口電路、電平轉(zhuǎn)換電路和電源電路四部分,。
STM32F107最小系統(tǒng)單元包括復(fù)位電路,、晶振電路和程序下載電路。晶振電路中,,選用25 MHz的無源器件作為系統(tǒng)時(shí)鐘源,,同時(shí)通過配置芯片的相關(guān)寄存器使系統(tǒng)工作在最高的72 MHz。
在以太網(wǎng)接口電路中由于STM32F107內(nèi)部已經(jīng)集成了以太網(wǎng)模塊,,因此只需要增加一個(gè)DP83848物理層芯片并通過RMII連接方式,,再接上標(biāo)準(zhǔn)的RJ45接口,就能形成10/100 M以太網(wǎng)電路,。
Modbus在串行鏈路中一般采用RS485通信接口,,它是一種差動(dòng)半雙工的通信方式,而STM32F107自帶的是USART異步串行通信接口,,因此通過SP3485電平轉(zhuǎn)換芯片將STM32F107芯片的USART接口轉(zhuǎn)換成RS485接口,,才能與工業(yè)設(shè)備進(jìn)行信息通信。
STM32F107等芯片需要的工作電源一般都在3.3 V,,而電源變壓器輸出的電壓為5 V,這就需要將輸入的5 V電源電壓轉(zhuǎn)成3.3 V,,用來提供給芯片工作,。
3 系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)部分的關(guān)鍵主要在于μCOSII移植、兩個(gè)事務(wù)處理任務(wù)和多線程與緩沖區(qū)設(shè)計(jì)。
3.1 μCOSII移植
μCOSII是一種專門為嵌入式設(shè)備設(shè)計(jì)的源代碼公開,、可移植,、可固化、可裁減,、搶占式的實(shí)時(shí)多任務(wù)操作系統(tǒng),,自1992年發(fā)布以來就獲得廣泛的使用。在將μCOSII移植到STM32的固件平臺(tái)時(shí),,必須對(duì)其進(jìn)行修改,、編寫。其中主要的內(nèi)容有:(1)基本配置和定義,。包括與編譯器相關(guān)的數(shù)據(jù)類型和定義棧的增長方向,。(2)編寫與處理器相關(guān)的函數(shù)。包括運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù)函數(shù)OSStartHighRdy(),、任務(wù)優(yōu)先級(jí)切換函數(shù)OSCtxSw(),、中斷級(jí)的任務(wù)切換函數(shù)OSInitCtxSw()和時(shí)鐘節(jié)拍中斷服務(wù)函數(shù)OSTickISR()。(3)編寫與操作系統(tǒng)相關(guān)的函數(shù),。
在μCOSII中的OS_CPU_C.C的文件中包含6個(gè)與CPU相關(guān)的函數(shù),,其中在移植中必不可少的任務(wù)是堆棧初始化函數(shù)OSTaskStkInit()。
3.2 事務(wù)處理任務(wù)
μCOSII是一個(gè)多任務(wù)的實(shí)時(shí)操作系統(tǒng),,最多可以管理64個(gè)任務(wù),,根據(jù)實(shí)際需求創(chuàng)建兩個(gè)任務(wù):
與以太網(wǎng)通信的TaskModbusTCP任務(wù)一:系統(tǒng)開始運(yùn)行后,任務(wù)一處于空閑狀態(tài),,同時(shí)監(jiān)聽以太網(wǎng)的502端口,,此端口是Modbus TCP/IP的默認(rèn)端口;當(dāng)端口接收到有效數(shù)據(jù)時(shí),,程序?qū)ζ溥M(jìn)行拆包分析后,,再經(jīng)過μCOS的郵箱機(jī)制將數(shù)據(jù)發(fā)送給任務(wù)二,之后任務(wù)一進(jìn)入等待響應(yīng)狀態(tài),,同時(shí)開啟超時(shí)響應(yīng)定時(shí)器,;當(dāng)在超時(shí)響應(yīng)時(shí)間內(nèi)接收到郵箱中來自任務(wù)二的響應(yīng)數(shù)據(jù)時(shí),任務(wù)一進(jìn)入到處理應(yīng)答狀態(tài),,對(duì)其數(shù)據(jù)進(jìn)行打包封裝等處理后送至502端口,,然后重新進(jìn)入到空閑狀態(tài)。至此完成一次正確的Modbus TCP/IP的通信過程,。其任務(wù)的狀態(tài)流圖如圖2所示,。
與從站通信的TaskMastertask任務(wù)二:系統(tǒng)開始運(yùn)行后,任務(wù)二進(jìn)入空閑狀態(tài),;當(dāng)μCOS的郵箱收到數(shù)據(jù)后,,任務(wù)二提取郵箱中的數(shù)據(jù),首先進(jìn)行數(shù)據(jù)有效性分析,然后再對(duì)數(shù)據(jù)添加CRC校驗(yàn),,使數(shù)據(jù)符合Modbus在串行鏈路上的通信幀,,接著通過RS485接口將數(shù)據(jù)發(fā)送到總線上,同時(shí)超時(shí)響應(yīng)定時(shí)器開啟,,任務(wù)二進(jìn)入等待響應(yīng)狀態(tài),;若在超時(shí)響應(yīng)時(shí)間內(nèi)接收到從站的響應(yīng),則進(jìn)入應(yīng)答處理,,并對(duì)數(shù)據(jù)進(jìn)行處理分析,。如果數(shù)據(jù)正確且有效,則通過郵箱發(fā)送給任務(wù)一,,然后進(jìn)入空閑狀態(tài)中等待下一次的郵箱數(shù)據(jù),。其任務(wù)的狀態(tài)流圖如圖3所示。
3.3 多線程與緩沖區(qū)
由于工業(yè)控制系統(tǒng)的通信速率普遍較低,,當(dāng)數(shù)據(jù)在現(xiàn)場(chǎng)總線與以太網(wǎng)進(jìn)行交互時(shí),,通信速率受限于工業(yè)控制端的速率,采用多線程與存儲(chǔ)池相結(jié)合的技術(shù)來匹配現(xiàn)場(chǎng)總線和以太網(wǎng)的傳輸速率,。即當(dāng)多線程的類似指令連接時(shí),,網(wǎng)關(guān)的現(xiàn)場(chǎng)總線端只發(fā)送一次指令,將得到的數(shù)據(jù)放到存儲(chǔ)池中,,然后再解析給各個(gè)線程,。
4 測(cè)試結(jié)果
測(cè)試中,采用環(huán)宇集團(tuán)的HUM8D-400型和HUM8D-225型塑料外殼智能斷路器作為Modbus的從站設(shè)備,,利用第三方軟件Modbus Poll模擬主站設(shè)備如圖4所示,。
對(duì)于以太網(wǎng)通信的可靠性的重要參數(shù)有:IP包傳輸延時(shí)、IP包的誤碼率,、IP包的丟失率等[6],。然而現(xiàn)場(chǎng)總線的網(wǎng)絡(luò)性能與以太網(wǎng)有很大的不同,其主要指標(biāo)包含傳輸距離,、傳輸速率,、丟包率等,同時(shí)這些指標(biāo)隨著負(fù)載的變化而變化,,因此本文對(duì)于以太網(wǎng)到現(xiàn)場(chǎng)總線的通信性能從不同的負(fù)載和傳輸速率方面對(duì)IP包的響應(yīng)時(shí)間,、誤碼率和丟失率進(jìn)行測(cè)試。其中數(shù)據(jù)接收準(zhǔn)確性測(cè)試參數(shù)為500 000次數(shù)據(jù)指令,,RS485接口通信距離100 m,;響應(yīng)時(shí)間為以太網(wǎng)數(shù)據(jù)包從發(fā)送到接收到響應(yīng)數(shù)據(jù)包的整體時(shí)間,包括設(shè)備的響應(yīng)時(shí)間和數(shù)據(jù)包在線路的傳輸時(shí)間,。單線程測(cè)試結(jié)果整理后如表2所示,。多線程存儲(chǔ)池結(jié)果整理后如表3所示,。
表2與表3的測(cè)試結(jié)果說明,網(wǎng)關(guān)能夠很好地保證數(shù)據(jù)通信的準(zhǔn)確性和可靠性,。同時(shí)響應(yīng)時(shí)間受網(wǎng)關(guān)波特率的制約,提高波特率能有效地提高響應(yīng)時(shí)間,。同時(shí)利用多線程與存儲(chǔ)池技術(shù),,可以大大減少單線程情況下運(yùn)行多指令所消耗的時(shí)間。
利用STM32所設(shè)計(jì)的網(wǎng)關(guān)不僅能夠有效地進(jìn)行通信,,同時(shí)對(duì)比于目前市場(chǎng)上售價(jià)高達(dá)數(shù)千元的類似設(shè)備,,僅需要不到百元的成本,大大提高了其推廣的可能性,。
當(dāng)前的工業(yè)現(xiàn)場(chǎng)設(shè)備在通信中基本都能夠支持Modbus,,通過網(wǎng)關(guān)進(jìn)行數(shù)據(jù)交互,為遠(yuǎn)程的遙信提供有力的支持,。
參考文獻(xiàn)
[1] 國網(wǎng)能源研究院.2012國內(nèi)外智能電網(wǎng)發(fā)展分析報(bào)告[M].北京:中國電力出版社,,2012.
[2] 尹天文.智能電網(wǎng)用戶端[J].低壓電器,2012(5):59-64.
[3] 何瑞華.我國新一代低壓電器發(fā)展與展望[J].低壓電器,,2012(1):1-6.
[4] 華镕.從Modbus到透明就緒:施耐德電氣工業(yè)網(wǎng)絡(luò)的協(xié)議,、設(shè)計(jì)、安裝[M].北京:機(jī)械工業(yè)出版社,,2009.
[5] Modicon Inc.Modicon Modbus protocol reference guide[EB/OL].[2002-7].www.schneider-electric.com.
[6] 李揚(yáng)繼,,范寶峰,楊洋.網(wǎng)絡(luò)性能測(cè)量技術(shù)分析[J].網(wǎng)絡(luò)與信息技術(shù),,2006,,25(10):34-35.