李勇,黃健
(中山職業技術學院,中山528404)
Modbus協議是OSI模型第7層上的應用層報文傳輸協議,它在連接至不同類型總線或網絡的設備之間提供客戶機/服務器通信。Modbus通信棧模型如圖1所示[1]。物理層協議以EIA/TIA-232、EIA/TIA-485串行鏈路協議和以太網II/802.3協議為代表。Modbus協議定義了一個與基礎通信層無關的簡單協議數據單元PDU,PDU中的功能碼向服務器指示將執行哪種操作,如對線圈、寄存器的讀寫操作。特定總線或網絡上的Modbus協議映射能夠在應用數據單元ADU上引入一些附加域。

圖1 Modbus通信棧模型
串行鏈路上的Modbus幀數據結構如圖2所示。其中,地址域即為附加域,占用一個字節,按編碼形式可分為ASCII和RTU兩種。

圖2 Modbus串行鏈路數據單元
Modbus/TCP協議的數據幀格式如圖3所示。其中,MBAP報文頭占7個字節,這種報文頭提供一些與串行鏈路上使用的Modbus RTU應用數據單元的差別:

圖3 Modbus TCP/IP數據單元
①用MBAP報文頭中的單個字節單元標識符取代Modbus串行鏈路上通常使用的Modbus從地址域。這個單元標識符用于設備的通信,這些設備使用單個IP地址支持多個獨立Modbus終端單元(例如網橋、路由器和網關)。
②用接收者可以驗證完成報文的方式設計所有Modbus請求和響應。對于Modbus PDU有固定長度的功能碼來說,僅功能碼就足夠了。對于在請求或響應中攜帶一個可變數據的功能碼來說,數據域包括字節數。
③當在TCP上攜帶Modbus時,即使將報文分成多個信息包來傳輸,也需在MBAP報文頭上攜帶附加長度信息,以便接收者能識別報文邊界。顯式和隱式長度規則的存在以及CRC-32差錯校驗碼的使用(在以太網上)將對請求或響應報文產生極小的未檢出干擾。
MBAP報文頭包括下列域:事務元標識符,2個字節,作為Modbus請求/響應事務處理的識別碼;協議標識符,2個字節,約定為0;長度域,2個字節,指示接下來字節的數量;單元標識符,1個字節,串行鏈路或其他總線上連接的遠程從站的識別碼。要實現Modbus/TCP轉換器,進行Modbus TCP ADU與ASCII ADU之間,Modbus TCP ADU與RTU ADU之間的轉換是核心內容。
PIC18F67J60系列單片機具有嵌入式以太網控制器模塊。它是一個完整的連接解決方案,完全實現介質訪問控制和物理層收發器模塊,只需使用2個脈沖變壓器和一些無源器件即可將單片機直接與以太網相連。以太網模塊包含以下5個主要功能模塊:
①PHY收發器模塊。對傳輸雙絞線接口上的模擬數據進行編碼和解碼,并通過網絡發送和接收。
②MAC模塊。實現了符合IEEE802.3規范的MAC邏輯,并提供用以控制PHY的MIIM(Media Independent Interface Management)。
③獨立的8 KB RAM緩沖區。用于存儲已經接收和將要發送的數據包。
④判優器。在單片機內核、DMA、發送和接收模塊發出請求時,控制對RAM緩沖區的訪問。
⑤寄存器接口。作為以太網模塊和單片機特殊功能寄存器(SFR)之間的命令和內部狀態信號譯碼器[2]。
PIC18F67J60的以太網模塊符合IEEE802.3中所有關于雙絞線網絡10-Base T連接的規定。其內部實現了一些數據包過濾機制,用于限制傳入的數據包;同時,還提供了1個用于實現快速數據吞吐的內置DMA模塊、硬件IP的校驗和計算,以及2個用于指示鏈路和網絡活動的LED輸出。
PIC18F67J60還提供了2個增強型USART(支持RS232和RS485)、5個定時器、27個中斷源、128 KB的代碼存儲空間、接近4 KB的RAM空間,為TCP/IP協議棧和Modbus協議轉換提供了硬件支持。
Microchip公司提供免費的TCP/IP軟件棧,它服務于標準的、基于TCP/IP的應用程序,或者使用在定制的、基于TCP/IP的應用程序中。本應用系統使用的是該協議棧的4.02版本。類似于TCP/IP參考模型,Microchip TCP/IP協議棧將TCP/IP協議棧分為多層,如圖4所示。每層的實現代碼駐留在一個獨立的源文件中,而服務和應用程序編程接口(API)是通過頭文件或包含文件定義的。

圖4 Microchip TCP/IP協議棧結構
與TCP/IP參考模型不同的是,Microchip TCP/IP協議棧中的許多層可以直接訪問在它下面的一層或多層。關于一個層是否繞過相鄰模塊來獲得所需的服務,主要根據開銷的大小,以及服務是否需要智能處理后才能傳遞到下一層來決定[3]。與傳統TCP/IP協議棧實現方法的不同之處是,添加了2個新模塊——Stack Task和ARPTask。Stack Task管理協議棧及其所有模塊的操作,而ARPTask管理地址解析協議(Address Resolution Protocol,ARP)層的服務。
Microchip TCP/IP協議棧使用了協同式多任務處理技術。在協同式多任務處理系統中同時存在多個任務,每個任務執行自己的作業然后交回控制權,這樣下一個任務才能夠執行作業。Stack Task和ARPTask都是協同式任務。通常,協同式多任務處理(或任何其他類型的多任務處理)是由操作系統或主應用程序自身來實現的。Microchip TCP/IP協議棧被設計為獨立于任何操作系統,可實現它自己的協同式多任務處理系統。因此,它可以被應用在任何系統中,而不論該系統是否為多任務操作系統。但是,使用Microchip TCP/IP協議棧的應用程序自身必須使用協同式多任務處理方法。
本轉換器需要實現以下4種工作模式:
①TCP從站轉RTU從站。在本工作模式下把和轉換器相連的Modbus/RTU從站轉化為Modbus/TCP從站,這樣Modbus/TCP主站就可以通過以太網訪問Modbus/RTU從站。
②TCP從站轉ASCII從站。在本工作模式下把和轉換器相連的Modbus/ASCII從站轉化為Modbus/TCP從站,這樣Modbus/TCP主站就可以通過以太網訪問Modbus/ASCII從站。
③ASCII主站轉TCP主站。在本工作模式下把和轉換器相連的Modbus/ASCII主站轉化為Modbus/TCP主站,這樣Modbus/TCP從站就可以通過以太網訪問Modbus/ASCII主站。
④RTU主站轉TCP主站。在本工作模式下把和轉換器相連的Modbus/RTU主站轉化為Modbus/TCP主站,這樣Modbus/TCP從站就可以通過以太網訪問Modbus/RTU主站。
轉換器軟件系統框架如圖5所示。RS232/485傳輸管理模塊中的“參數控制”部分管理通信波特率的設置,Modbus串行鏈路協議中要求整條鏈路上的Modbus設備設置為同樣的波特率;“超時管理”中根據設置的波特率啟動兩個定時,分別記錄Modbus定義的報文間超時和字符間超時。協議轉換模塊根據本機設置,在TCP ADU和ASCII/RTU ADU之間進行用戶數據包格式轉換。TCP管理層中“連接管理”負責管理報文的傳輸連接。系統設置為用戶提供各種參數設置和工作模式設置的接口。

圖5 轉換器軟件系統框架
PIC18F67J60豐富的片上資源為本文實現的轉換器提供了單片的、低成本的實現方案,免費并且開源的Microchip TCP/IP協議棧能輕松地支持Microchip 8位單片機,很大程度上節約了開發時間,同時也保證系統運行穩定。本套系統相對市面上其他同類轉換器,具有成本低、體積小、便于安裝等特點,具有一定市場價值。
[1]Microchip Technology Inc.Modbus協議中文版,2006.
[2]Microchip Technology Inc.PIC18F67J60 datasheet,2008.
[3]Microchip Technology Inc.Microchip TCP/IP協議棧,2006.