李勇,黃健
(中山職業(yè)技術(shù)學(xué)院,中山528404)
Modbus協(xié)議是OSI模型第7層上的應(yīng)用層報(bào)文傳輸協(xié)議,它在連接至不同類(lèi)型總線或網(wǎng)絡(luò)的設(shè)備之間提供客戶機(jī)/服務(wù)器通信。Modbus通信棧模型如圖1所示[1]。物理層協(xié)議以EIA/TIA-232、EIA/TIA-485串行鏈路協(xié)議和以太網(wǎng)II/802.3協(xié)議為代表。Modbus協(xié)議定義了一個(gè)與基礎(chǔ)通信層無(wú)關(guān)的簡(jiǎn)單協(xié)議數(shù)據(jù)單元PDU,PDU中的功能碼向服務(wù)器指示將執(zhí)行哪種操作,如對(duì)線圈、寄存器的讀寫(xiě)操作。特定總線或網(wǎng)絡(luò)上的Modbus協(xié)議映射能夠在應(yīng)用數(shù)據(jù)單元ADU上引入一些附加域。
圖1 Modbus通信棧模型
串行鏈路上的Modbus幀數(shù)據(jù)結(jié)構(gòu)如圖2所示。其中,地址域即為附加域,占用一個(gè)字節(jié),按編碼形式可分為ASCII和RTU兩種。
圖2 Modbus串行鏈路數(shù)據(jù)單元
Modbus/TCP協(xié)議的數(shù)據(jù)幀格式如圖3所示。其中,MBAP報(bào)文頭占7個(gè)字節(jié),這種報(bào)文頭提供一些與串行鏈路上使用的Modbus RTU應(yīng)用數(shù)據(jù)單元的差別:
圖3 Modbus TCP/IP數(shù)據(jù)單元
①用MBAP報(bào)文頭中的單個(gè)字節(jié)單元標(biāo)識(shí)符取代Modbus串行鏈路上通常使用的Modbus從地址域。這個(gè)單元標(biāo)識(shí)符用于設(shè)備的通信,這些設(shè)備使用單個(gè)IP地址支持多個(gè)獨(dú)立Modbus終端單元(例如網(wǎng)橋、路由器和網(wǎng)關(guān))。
②用接收者可以驗(yàn)證完成報(bào)文的方式設(shè)計(jì)所有Modbus請(qǐng)求和響應(yīng)。對(duì)于Modbus PDU有固定長(zhǎng)度的功能碼來(lái)說(shuō),僅功能碼就足夠了。對(duì)于在請(qǐng)求或響應(yīng)中攜帶一個(gè)可變數(shù)據(jù)的功能碼來(lái)說(shuō),數(shù)據(jù)域包括字節(jié)數(shù)。
③當(dāng)在TCP上攜帶Modbus時(shí),即使將報(bào)文分成多個(gè)信息包來(lái)傳輸,也需在MBAP報(bào)文頭上攜帶附加長(zhǎng)度信息,以便接收者能識(shí)別報(bào)文邊界。顯式和隱式長(zhǎng)度規(guī)則的存在以及CRC-32差錯(cuò)校驗(yàn)碼的使用(在以太網(wǎng)上)將對(duì)請(qǐng)求或響應(yīng)報(bào)文產(chǎn)生極小的未檢出干擾。
MBAP報(bào)文頭包括下列域:事務(wù)元標(biāo)識(shí)符,2個(gè)字節(jié),作為Modbus請(qǐng)求/響應(yīng)事務(wù)處理的識(shí)別碼;協(xié)議標(biāo)識(shí)符,2個(gè)字節(jié),約定為0;長(zhǎng)度域,2個(gè)字節(jié),指示接下來(lái)字節(jié)的數(shù)量;單元標(biāo)識(shí)符,1個(gè)字節(jié),串行鏈路或其他總線上連接的遠(yuǎn)程從站的識(shí)別碼。要實(shí)現(xiàn)Modbus/TCP轉(zhuǎn)換器,進(jìn)行Modbus TCP ADU與ASCII ADU之間,Modbus TCP ADU與RTU ADU之間的轉(zhuǎn)換是核心內(nèi)容。
PIC18F67J60系列單片機(jī)具有嵌入式以太網(wǎng)控制器模塊。它是一個(gè)完整的連接解決方案,完全實(shí)現(xiàn)介質(zhì)訪問(wèn)控制和物理層收發(fā)器模塊,只需使用2個(gè)脈沖變壓器和一些無(wú)源器件即可將單片機(jī)直接與以太網(wǎng)相連。以太網(wǎng)模塊包含以下5個(gè)主要功能模塊:
①PHY收發(fā)器模塊。對(duì)傳輸雙絞線接口上的模擬數(shù)據(jù)進(jìn)行編碼和解碼,并通過(guò)網(wǎng)絡(luò)發(fā)送和接收。
②MAC模塊。實(shí)現(xiàn)了符合IEEE802.3規(guī)范的MAC邏輯,并提供用以控制PHY的MIIM(Media Independent Interface Management)。
③獨(dú)立的8 KB RAM緩沖區(qū)。用于存儲(chǔ)已經(jīng)接收和將要發(fā)送的數(shù)據(jù)包。
④判優(yōu)器。在單片機(jī)內(nèi)核、DMA、發(fā)送和接收模塊發(fā)出請(qǐng)求時(shí),控制對(duì)RAM緩沖區(qū)的訪問(wèn)。
⑤寄存器接口。作為以太網(wǎng)模塊和單片機(jī)特殊功能寄存器(SFR)之間的命令和內(nèi)部狀態(tài)信號(hào)譯碼器[2]。
PIC18F67J60的以太網(wǎng)模塊符合IEEE802.3中所有關(guān)于雙絞線網(wǎng)絡(luò)10-Base T連接的規(guī)定。其內(nèi)部實(shí)現(xiàn)了一些數(shù)據(jù)包過(guò)濾機(jī)制,用于限制傳入的數(shù)據(jù)包;同時(shí),還提供了1個(gè)用于實(shí)現(xiàn)快速數(shù)據(jù)吞吐的內(nèi)置DMA模塊、硬件IP的校驗(yàn)和計(jì)算,以及2個(gè)用于指示鏈路和網(wǎng)絡(luò)活動(dòng)的LED輸出。
PIC18F67J60還提供了2個(gè)增強(qiáng)型USART(支持RS232和RS485)、5個(gè)定時(shí)器、27個(gè)中斷源、128 KB的代碼存儲(chǔ)空間、接近4 KB的RAM空間,為T(mén)CP/IP協(xié)議棧和Modbus協(xié)議轉(zhuǎn)換提供了硬件支持。
Microchip公司提供免費(fèi)的TCP/IP軟件棧,它服務(wù)于標(biāo)準(zhǔn)的、基于TCP/IP的應(yīng)用程序,或者使用在定制的、基于TCP/IP的應(yīng)用程序中。本應(yīng)用系統(tǒng)使用的是該協(xié)議棧的4.02版本。類(lèi)似于TCP/IP參考模型,Microchip TCP/IP協(xié)議棧將TCP/IP協(xié)議棧分為多層,如圖4所示。每層的實(shí)現(xiàn)代碼駐留在一個(gè)獨(dú)立的源文件中,而服務(wù)和應(yīng)用程序編程接口(API)是通過(guò)頭文件或包含文件定義的。
圖4 Microchip TCP/IP協(xié)議棧結(jié)構(gòu)
與TCP/IP參考模型不同的是,Microchip TCP/IP協(xié)議棧中的許多層可以直接訪問(wèn)在它下面的一層或多層。關(guān)于一個(gè)層是否繞過(guò)相鄰模塊來(lái)獲得所需的服務(wù),主要根據(jù)開(kāi)銷(xiāo)的大小,以及服務(wù)是否需要智能處理后才能傳遞到下一層來(lái)決定[3]。與傳統(tǒng)TCP/IP協(xié)議棧實(shí)現(xiàn)方法的不同之處是,添加了2個(gè)新模塊——Stack Task和ARPTask。Stack Task管理協(xié)議棧及其所有模塊的操作,而ARPTask管理地址解析協(xié)議(Address Resolution Protocol,ARP)層的服務(wù)。
Microchip TCP/IP協(xié)議棧使用了協(xié)同式多任務(wù)處理技術(shù)。在協(xié)同式多任務(wù)處理系統(tǒng)中同時(shí)存在多個(gè)任務(wù),每個(gè)任務(wù)執(zhí)行自己的作業(yè)然后交回控制權(quán),這樣下一個(gè)任務(wù)才能夠執(zhí)行作業(yè)。Stack Task和ARPTask都是協(xié)同式任務(wù)。通常,協(xié)同式多任務(wù)處理(或任何其他類(lèi)型的多任務(wù)處理)是由操作系統(tǒng)或主應(yīng)用程序自身來(lái)實(shí)現(xiàn)的。Microchip TCP/IP協(xié)議棧被設(shè)計(jì)為獨(dú)立于任何操作系統(tǒng),可實(shí)現(xiàn)它自己的協(xié)同式多任務(wù)處理系統(tǒng)。因此,它可以被應(yīng)用在任何系統(tǒng)中,而不論該系統(tǒng)是否為多任務(wù)操作系統(tǒng)。但是,使用Microchip TCP/IP協(xié)議棧的應(yīng)用程序自身必須使用協(xié)同式多任務(wù)處理方法。
本轉(zhuǎn)換器需要實(shí)現(xiàn)以下4種工作模式:
①TCP從站轉(zhuǎn)RTU從站。在本工作模式下把和轉(zhuǎn)換器相連的Modbus/RTU從站轉(zhuǎn)化為Modbus/TCP從站,這樣Modbus/TCP主站就可以通過(guò)以太網(wǎng)訪問(wèn)Modbus/RTU從站。
②TCP從站轉(zhuǎn)ASCII從站。在本工作模式下把和轉(zhuǎn)換器相連的Modbus/ASCII從站轉(zhuǎn)化為Modbus/TCP從站,這樣Modbus/TCP主站就可以通過(guò)以太網(wǎng)訪問(wèn)Modbus/ASCII從站。
③ASCII主站轉(zhuǎn)TCP主站。在本工作模式下把和轉(zhuǎn)換器相連的Modbus/ASCII主站轉(zhuǎn)化為Modbus/TCP主站,這樣Modbus/TCP從站就可以通過(guò)以太網(wǎng)訪問(wèn)Modbus/ASCII主站。
④RTU主站轉(zhuǎn)TCP主站。在本工作模式下把和轉(zhuǎn)換器相連的Modbus/RTU主站轉(zhuǎn)化為Modbus/TCP主站,這樣Modbus/TCP從站就可以通過(guò)以太網(wǎng)訪問(wèn)Modbus/RTU主站。
轉(zhuǎn)換器軟件系統(tǒng)框架如圖5所示。RS232/485傳輸管理模塊中的“參數(shù)控制”部分管理通信波特率的設(shè)置,Modbus串行鏈路協(xié)議中要求整條鏈路上的Modbus設(shè)備設(shè)置為同樣的波特率;“超時(shí)管理”中根據(jù)設(shè)置的波特率啟動(dòng)兩個(gè)定時(shí),分別記錄Modbus定義的報(bào)文間超時(shí)和字符間超時(shí)。協(xié)議轉(zhuǎn)換模塊根據(jù)本機(jī)設(shè)置,在TCP ADU和ASCII/RTU ADU之間進(jìn)行用戶數(shù)據(jù)包格式轉(zhuǎn)換。TCP管理層中“連接管理”負(fù)責(zé)管理報(bào)文的傳輸連接。系統(tǒng)設(shè)置為用戶提供各種參數(shù)設(shè)置和工作模式設(shè)置的接口。
圖5 轉(zhuǎn)換器軟件系統(tǒng)框架
PIC18F67J60豐富的片上資源為本文實(shí)現(xiàn)的轉(zhuǎn)換器提供了單片的、低成本的實(shí)現(xiàn)方案,免費(fèi)并且開(kāi)源的Microchip TCP/IP協(xié)議棧能輕松地支持Microchip 8位單片機(jī),很大程度上節(jié)約了開(kāi)發(fā)時(shí)間,同時(shí)也保證系統(tǒng)運(yùn)行穩(wěn)定。本套系統(tǒng)相對(duì)市面上其他同類(lèi)轉(zhuǎn)換器,具有成本低、體積小、便于安裝等特點(diǎn),具有一定市場(chǎng)價(jià)值。
[1]Microchip Technology Inc.Modbus協(xié)議中文版,2006.
[2]Microchip Technology Inc.PIC18F67J60 datasheet,2008.
[3]Microchip Technology Inc.Microchip TCP/IP協(xié)議棧,2006.