文中設計的現場總線通信網關提供了對CANBUS和MODBUS的支持,實現了CANBUS與MODBUS數據的透明傳輸,為2種總線的兼容提供了可行方案。
1 網關模型分析
本文設計的現場總線通信網關具備MODBUS主站及MODBUS從站的功能,以下以兩種典型的應用場景為例分析網關的工作方式。圖1所示的應用場景網關工作在MODBUS主站模式,圖2所示的應用場景網關工作在MODBUS從站模式。
1.1 網關的MODBUS主站模式
網關工作于MODBUS主站模式時,當CANBUS上的監控主機發出一幀數據時,網關作為CANBUS上的設備接收到該數據,根據驗收碼和屏蔽碼判斷是否處理該數據。若驗證成功,則解析收到的CAN數據幀,得到CAN數據幀中的數據;將數據按照MODBUS協議逐層打包生成MODBUS幀,網關作為MODBUS主站向MODBUS上的從站發送這一幀數據,完成了一次CANBUS到MODBUS的單向數據傳輸。協議轉換示意圖如圖3所示。
1.2 網關的MODBUS從站模式
網關工作于MODBUS從站模式時,當由MODBUS上的監控主機發出一幀信息時,網關收到該MODBUS幀,檢查地址碼與功能碼,若與自身地址相符且功能碼為發送,按MODBUS協議逐層解析,得到其數據;網關將數據按照CANBUS協議打包形成CAN的數據幀,向CANBUS發送該幀,并向MODBUS主站發送回應幀,完成了一次MODBUS到CANBUS的單向數據傳輸。
2 硬件設計
本文設計的嵌入式現場總線通信網關包括主控制器(STM32F207),CANBUS接口單元,MODBUS接口單元用于接入MODBUS,以及3.2英寸LCD觸摸屏模塊。硬件系統框圖如圖4所示。
2.1 STM32F207微控制器
本文選用STM32F207構建整個系統,STM32F207是一款基于ARM Correx-M3內核的32位微處理器,工作頻率120 MHz.STM32F207提供了豐富的接口,支持2路CAN 2.0協議的CANBUS接口,3路USART接口,2路UART接口,6路定時器,FSMC+SPI接口(16BITFSMc+SPI)用于接入LCD觸摸屏模塊,支持2種調試接口:串行接口和JTAG調試接口。
2.2 CANBUS接口單元
由于STM32F207內置有bxCAN控制器,該控制器是一種在標準CAN總線基礎上擴展的總線接口,支持CAN總線協議2.0 A和2.0 B.能以最小的CPU負荷來高效處理收到的大量報文。它也支持報文發送的優先級要求(優先級特性可軟件配置)。為了滿足CAN總線協議中的標識符硬件過濾需求,bxCAN控制器提供了位寬可變的、可配置的過濾器組,用來完成只接收軟件需要的報文功能。CAN接口電路選擇SN65HVD230CANBUS收發器。SN65HVD230是一種專用于帶CAN控制器設備的CANBUS收發器,可應用于ISO 11898標準的CANBUS串行通信的物理層中。SN65HVD230CAN BUS收發器可以向總線和CAN控制器提供不同的數據傳輸速度,最高速度為1 Mb/S.
2.3 MODBUS接口單元
MODBUS接口單元使用RS 485串行接口,接口芯片為MAX485.MAX485是用于RS 485與RS 422通信的低功耗收發器,每個器件中都具有一個驅動器和一個接收器。驅動器具有短路電流限制,并可以通過熱關斷電路將驅動器輸出置為高阻狀態,防止過度的功率損耗。接收器輸入具有失效保護特性,當輸入開路時,可以確保邏輯高電平輸出。MAX485的驅動器擺率不受限制,可以實現最高2.5 Mb/s的傳輸速率。
3 軟件設計
3.1 CANBUS的應用層定義
本文設計的現場總線通信網關定義了CANBUS的應用層協議。
(1)規定網關收到的CAN數據幀中的第1個字節為CANBUS的功能碼,該功能碼為0x0F時,與MODBUS進行通信。
(2)規定CAN數據幀中的第2個字節的高4位為該幀的標號位,低4位為該幀中包含的數據字節數,該字節數為MODBUS協議中數據域的字節數。
(3)規定CAN數據幀中的第3,第4個字節分別為MODBUS的地址碼和功能碼。
(4)規定從CAN數據幀的第5個字節開始為MODBUS的數據域,由于MODBUS的數據域一般為4個字節,此時CAN數據幀的數據段恰好為8個字節。
(5)當MODBUS數據長度大于4字節時,需要從2個或者多個連續發送的標號相同的CAN數據幀中獲得完整的MODBUS數據。當獲得的數據位數與幀中給出的位數不同時丟棄該幀。
定義一個數據緩沖區A,一個數據緩沖區B,分別用于臨時存放CANBUS到MODBUS的數據和MODBUS到CANBUS的數據。
3.2 CANBUS的收發程序設計
該部分包括CAN初始化,CAN發送程序,CAN接收程序。CAN的初始化包括以下內容:配置嵌套向量中斷控制器(NVIC),設置CAN的Rx0和TX中斷的響應優先級和搶占優先級,RX0和TX中斷使能。根據硬件連接配置GPIO,本文中RX使用GPIOD0,TX使用GPIOD2.設置波特率及過濾器配置。
CANBUS數據的接收是通過接收郵箱(FIFO)中斷進行處理的,當FIFO接收到一個新的報文時,過濾器根據預設的值判斷報文的標示符是否匹配,若不匹配,直接丟棄該報文;若該報文的標示符與預設值匹配則中斷處理程序將接收郵箱中的數據拷貝到數據緩沖區A,該數據將作為MODBUS主站發往MODBUS從站的數據。CANBUS數據接收程序流程如圖5所示。
CANBUS的數據發送同樣使用郵箱機制,網關從數據緩沖區B中獲得從MODBUS接收的數據,設置標示符和數據長度,選擇一個發送郵箱,使能發送郵箱空中斷。因此當該郵箱為空時產生一個中斷,中斷處理程序將數據從緩沖區拷貝到發送郵箱,該郵箱狀態變為預定發送狀態。
當CAN總線進入空閑狀態,預定發送郵箱中的報文就馬上被發送,進入發送狀態。郵箱中的報文被成功發送后,它馬上變為空郵箱。CAN BUS數據發送程序如圖6所示。
3.3 MODBUS主站、從站的收發程序設計
網關作為MODBUS從站時的主要工作是初始化串口,初始化定時器,配置嵌套向量中斷控制器(NVIC),分別對串口接收數據中斷和定時器中斷設置響應優先級和搶占優先級。從數據緩沖區A中獲得數據,對獲得的數據生成CRC校驗碼,組成MODBUS幀從串口按照時序發送這一幀數據。
串口初始化如下:
MODBUS協議規定了2種傳輸模式:ASCII模式和RTU模式。本文設計的網關使用RTU模式傳輸,在此模式下報文中每個8位字節含有2個4位16進制字符它的優點是較高的數據密度,在相同的波特率下比ASCII模式有更高的吞吐率。命令幀由地址碼、功能碼、數據語和CRC校驗碼構成。在RTU模式下,幀與幀之間必須由時長至少為3.5個字符時間的空閑間隔區分。整個幀必須以連續的字符流發送,如果兩個字符之間的空閑間隔大于1.5個字符時間,則該幀被認為不完整的幀而被丟棄,接收設備假定下一字節是一個新消息的地址域。
MODBUS主站程序需要使用3個定時器,其中TIM2用于控制發送的3.5個字符的幀間隔。TIM3用于控制接收MODBUS從站的回應幀的3.5個字符的幀間隔。TIM4用于接收時確保字符間的間隔小于1.5個字符時間。初始化TIM2與TIM3,定時時間為定時3.645 8 ms(波特率為9 600 b/s時的3.5字符時間):
網關作MODBUS主站的工作流程如圖7所示。
網關工作在MODBUS主站模式時對從站響應幀的接收使用中斷處理的方式。在第一個字節傳輸結束后啟動TIM4定時器,定時時間為1.5個字符時間,在后續的字節傳輸結束時清零計數器,保證一個幀中的字符間隔不超過1.5個字符時間。接收完成后啟動定時器TIM3,定時3.5個字符時間,在此時間內的接收的任何數據都將丟棄。
網關作為MODBUS從站時對化串口和定時器的初始化與MODBUS主站相同,將數據組成CAN的幀,發送該幀,并向MODBUS主站發送響應幀。網關作為MODBUS從站的工作流程如圖8所示。
3.4 主程序
主程序中初始化FSMC,初始化LCD,初始化觸摸屏,校正觸摸屏,顯示工作模式選擇界面、參數配置界面及當前工作模式界面。根據選擇進入相應工作模式。
4 測試結果
在PC機上使用串口助手和USB-CAN軟件模擬CANBUS與MODBUS的收發。MODBUS到CANBUS的通信模擬:由PC機向網關發送一幀數據00 01 02 03 0405 06 07,網關設置幀ID為0x321并發出數據,通過CANUSB軟件接收該數據為00 01 02 03 04 05 06 07.如圖9所示。CANBUS到MODBUS的通信模擬:使用CAN-USB軟件發送一幀0f 14 0f 05 00 01 02 03,網關解析其中數據00 01 02 03,并作為MODBUS主站發送數據,將數據輸出到串口助手為00 01 02 03.如圖10所示。
5 結語
本文設計實現了一種在CANBUS和MODBUS間進行透明的數據傳輸的嵌入式現場總線通信網關,軟硬件設計簡單,通信參數可現場配置,能夠很好地實現CANBUS與MODBUS間的通信。該網關解決了異類現場總線間通信的問題,使系統的兼容性、互聯性、可擴充性都得到了極大的提高,具有良好的應用前景。
評論