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