王萌萌 曹 輝 林建寶 孫 澤
(大連海事大學輪機工程學院 遼寧 大連 116026)
隨著計算機技術和網絡技術在機艙中的廣泛應用,機艙自動化的水平逐漸提高,正向信息集中、信息共享、綜合管理方向發展[1]。然而,機艙中設備繁多,采用的組網方式不同,各設備間具有相互獨立性,這不利于機艙中各設備的互聯和信息共享[2]。因此有必要對機艙網關進行研究與設計,實現機艙各設備間信息傳遞和共享。
目前,國外具有代表性的KONGSBERG公司K-Chief500和CAE公司的IBSC系統,采用開放式的網絡,實現了異構網絡之間信息共享[3]。美國海軍提出ICAN艦載系統,支持多種協議轉換,簡化了系統的同時提高了效率[4]。國內的機艙設備供應商能夠提供船舶主推進系統、輔機系統、電站監控系統、機艙監視與報警系統、火災監控系統等自動化產品,但是它們之間配合性差,難以達到信息共享、綜合管理的狀態[5]。針對這一問題,本文開發了異構網絡綜合網關控制器,構建覆蓋了機艙的主要設備網絡通信,從而實現機艙各設備系統的信息共享。
機艙中的設備采用的通信方式主要有三種,分別是RS- 485串行通信總線、CAN總線、Ethernet網。其中:CAN總線因實時性好、抗干擾性強、成本低等優點,在機艙的現場應用最為廣泛[6];RS- 485串行通信總線出現的時間早、實現簡單且可靠,在機艙中也具有一定的應用;以太網組網方式簡單,具有能夠傳輸大容量數據等優點,一般用于在機艙的上層監控[7]。
綜合網關控制器作為機艙各設備系統的橋梁,其主要作用是實現TCP/IP協議、CAN總線協議、RS- 485串口協議兩兩之間相互轉換。綜合網關控制器總體結構如圖1所示,主要包括兩部分:硬件層和軟件層[8]。硬件層主要包含RS- 485串行通信接口、CAN總線接口、以太網接口和STM32F767IGT6微處理器等。軟件層主要由各通信接口驅動程序、μC/OS-III嵌入式操作系統、多協議轉換應用程序三部分組成。

圖1 綜合網關控制器總體結構
綜合網關控制器接口方案設計如圖2所示,主要包括Ethernet網接口電路、雙CAN冗余接口電路、RS- 485串行通信接口電路,各接口電路均采用隔離模塊作為保護措施。主控芯片選用基于ARM Cortex-M7架構的STM32F767IGT6微處理器作為邏輯控制單元,其內嵌了1 MB Flash和512 KB RAM足以滿足μC/OS-III嵌入式操作系統移植和搭建。另外,其內部還集成了豐富的外設,如3路CAN控制器、6路SPI總線、4路IIC總線、8路串口等,簡化了外圍電路的設計,并提高了硬件電路的抗干擾能力[9]。

圖2 綜合網關控制器接口方案設計圖
Ethernet網接口電路,采用微處理器+W5500+網絡變壓器+RJ45的連接形式。W5500是一款嵌入式以太網控制器,其內部不僅集成了固件TCP/IP協議棧,支持TCP、UDP等協議,而且還內嵌了10/100 Mbit/s以太網數據鏈路層(DL)和物理子層(PHY),這兩個子層構成介質訪問控制層(MAC),在設計中只需要通過帶有網絡變壓器的RJ45就可以和Ethernet網連接[10]。此外,W5500內嵌了16 KB發送和16 KB接收的緩存區用于存放以太網數據包。
微處理器和W5500連接如圖3所示,W5500支持串行SPI總線和微處理器連接,此連接方式只需要4個通用輸入輸出口(GPIO)引腳便可實現數據通信。這四個GPIO引腳分別為從機選擇SCS、時鐘SCLK、主機輸出從機輸入MOSI、主機輸入從機輸出MISO。另外,還配置了一個GPIO作為W5500的復位引腳,一個外部中斷引腳來響應W5000的中斷。在SPI總線通信中,微處理器作為主機,W5500為從機,時鐘SCLK提供主機與從機同步節拍,主機通過MISO引腳實現數據的輸入,通過MOSI引腳實現數據的輸出,從而完成數據的交換[11]。

圖3 微處理器和W5500連接圖
CAN接口電路,采用雙CAN總線冗余設計[12]。具體的方案是:采用兩套完全相同的微處理器內嵌的CAN控制器+數字隔離芯片AduM1201+CAN收發器TAJA1050。在正常工作時,兩個CAN通道的初始化設置相同,一路為工作通道,另一路為備用通道,當工作通道發生故障時,備用通道切換為工作通道,并對故障通道進行軟復位,使其恢復正常。
RS- 485接口采用了磁隔離技術,隔離電壓達到了2 500 V,具有非常強的抗干擾能力。選用ANALOGDEVICES公司生產的帶隔離增強型ADM2483BRW作為RS- 485的收發器。利用微處理器STM32F767IGT的通用輸入輸出口(GPIO)復用為異步串口功能,對RS- 485串口進行控制,具有簡單方便等優點。
以集成開發環境Keil5為軟件開發平臺,基于嵌入式操作系統μC/OS-III利用C語言編寫外設接口驅動程序和多協議轉換程序。μC/OS-III是一個可剝奪的多任務操作系統,能夠將多協議轉換程序分割成多個簡單任務,簡化了程序編寫,便于程序的維護[13]。
(1) Ethernet網通信接口驅動程序。由于W5500以太網通信芯片內嵌了全硬件TCP/IP協議棧,以太網幀的封裝和解析都是由硬件TCP/IP協議來完成,不需要對TCP/IP協議代碼編寫,只需要SPI總線對W5500的端口(Socket)簡單配置。考慮到綜合網關對數據的實時性要求高,選用UDP通信方式。UDP通信程序主要由UDP端口初始化程序、UDP數據發送程序和UDP數據接收程序組成。UDP初始化程序主要設置本地IP地址、目標IP地址、本地端口、目標端口、MAC地址、子網掩碼等。UDP數據收發流程如圖4所示,UDP數據收發處理機制是相同的,都是對W5500芯片的接收數據緩存區或者發送數據緩存區進行數據的讀寫操作。

圖4 UDP數據收發流程
(2) CAN通信接口驅動程序。在CAN通信程序設計中,首先對微處理器內置的CAN控制器初始化,主要完成波特率的設置、CAN工作模式的選擇、濾波器的配置和開啟CAN數據接收中斷。初始化完成后,CAN控制器會自動對CAN數據幀進行封裝和解包,在數據接收過程中,通過中斷服務來實現CAN數據接收寄存器的讀取操作,在發送時,將數據直接寫入發送寄存器實現數據的發送。由于采用了雙CAN冗余設計,發生故障時CAN通道需要切換,CAN通道切換機制如圖5所示。

圖5 CAN通道切換機制
步驟1CAN控制器初始化后,CAN通道處于正常工作狀態下。
步驟2CAN通道故障檢測。根據CAN控制器的接收或發送錯計數值判斷是否發生故障,當接收或錯誤計數值累加到大于96判定該通道發生故障[14]。
步驟3備用通道檢測。根據通道標志位來判定,1表示通道正常,0表示通道異常。當備用通道標記為1時,將備用通道設置為工作通道,當前通道設置為備用通道。
步驟4在新的工作通道發送切換幀,通知CAN總線上的其他設備節點進行通道切換,切換到備用CAN總線。
步驟5通道修復。通過CAN控制器軟復位,復位成功后將備用通道標記為正常。
(3) RS- 485串行通信接口驅動程序。RS- 485驅動程序實質上是微處理器的異步串口的驅動,主要由初始化程序和收發程序組成。初始化主要設置串口波特率、起始位、校驗位、數據位、停止位和開啟串口數據接收中斷。收發程序采用FIFO緩沖器來協調微處理的高速并行數據和低速串行數據,FIFO緩沖器設置為10個字節。在發送過程中,發送FIFO緩沖器被寫入將發送的數據,根據先進先出的原則,將FIFO數據存入移位寄存器,通過RS- 485數據線串行發送出去。在數據接收時,數據線上的串行數據經移位寄存器轉換為并行數據,存入接收FIFO并產生中斷,在中斷服務函數對數據進行讀取。
多協議轉換程序是整個綜合網關軟件的核心關鍵。本文的各接口驅動程序已經實現了各數據幀的收發,在多協議轉換程序主要完成把接收到的數據重新封裝并發送出去。多協議轉換程序流程見圖6,劃分為三個數據幀的封裝和發送任務,分別是CANData_Tx_Task、RS- 485Data_Tx_Task和UDPData_Tx_Task,這三個任務主要完成將接收的數據封裝為CAN報文、UDP數據幀、串口數據幀格式并發送出去,數據的接收均在各自通信接口的中斷服務程序中完成。此外,在任務設計時根據每個任務實時性要求確定任務的優先級,CANData_Tx_Task優先級為3,RS- 485Data_Tx_Task優先級為4,UDPData_Tx_Task優先級為5。開始任務的優先級為2,主要完成上述三個任務的創建和啟動以及開啟系統節拍,然后將自身掛起不再運行。

圖6 多協議轉換流程
多協議轉換程序設計時采用信號量實現中斷服務函數與各個任務函數之間的同步通信,中斷與任務之間同步機制如圖7所示,首先定義有效數據的第一個字節表示數據的流向,比如當接收到Ethernet網UDP數據包時,觸發以太網數據接收中斷,在中斷服務函數中把接收到的數據去除IP頭和UDP頭后獲得有效數據,然后根據有效數據的第一個字節來判定數據的流向,0XFE表示將數據發送到CAN總線,UDP有效數據被存入到CAN數據緩沖區,并調用OSQPost(&CANTx_sem)函數釋放CANTx_sem信號量。CANData_Tx_Task一直等待CANTx_sem信號量,當沒有獲得信號量時,此任務不會被執行,當獲得了信號量時,CANData_Tx_Task被喚醒,將CAN數據緩沖區中的數據重新封裝為CAN數據幀發送至CAN總線。當數據的第一字節為0XEF時,有效數據被存入到RS- 485串口緩沖區,并調用OSQPost(&RS- 485Tx_sem)函數釋放RS- 485Tx_sem信號量,RS- 485Data_Tx_Task任務被喚醒,把RS- 485串口緩沖區的數據以串口數據幀的形式發送出去。

圖7 中斷與任務之間同步機制
基于軟件應用層設計了機艙網絡綜合網關的通信協議,CAN、RS- 485和Ethernet均采用統一的協議格式[15]。CAN2.0A給出了11位標識符的標準報文格式,11位標識符添加上5位標識符正好是2個字節,再加上CAN標準報文的數據段的8字節正好是10字節。CAN、RS- 485和Ethernet的數據格式采用10字節有效數據形式,其中:第1字節代表數據傳遞到具體的網絡,0XFE傳遞到CAN總線、0XEF傳遞到RS- 485網、0XFF傳遞到Ethernet網;第2字節代表具體的設備或系統識別碼;3~10字節表示具體的數據字節。通信協議解析表見表1(表中空白處為根據需要制定數據)。

表1 通信協議解析表
綜合網關硬件和軟件設計只證明了在理論具有可行性,在設計完成后需要對相關的指標進行測試分析。本實驗主要測試兩兩協議之間相互轉換功能和協議轉換速率。
實驗的工具主要有:綜合網關電路板、USBCAN分析儀、USB轉RS- 485串口線、網線、PC機(含有串口調試助手、TCP/UDP調試工具、CAN測試工具)。綜合網關的各接口分別通過USBCAN分析儀、USB轉串口線、網線連接PC機,具體測試環境如圖8所示。

圖8 測試環境
首先設置好相關參數,然后通過TCP/UDP調試工具、串口調試助手、CAN測試工具三種調試工具自動每隔1 ms發送1幀數據,每幀10個字節,發往綜合網關控制器的各接口。綜合網關控制器根據應用層通信協議對數據進行解析,數據格式的轉換,重新封裝發送,然后被各調試工具接收。具體的數據轉換功能測試結果如表2所示。

表2 數據轉換功能測試結果
由表2可知,發送方和接收方的幀數一致,并未出現丟包現象,表明實現了TCP/IP協議、CAN總線協議、RS- 485串口協議兩兩之間相互轉換功能。
Ethernet網和RS- 485串口的通信速率均大于CAN總線的通信速率,因此本系統網關的協議轉換速率取決于CAN接口的收發速率。測試方法:通過逐漸增大Ethernet網端的發送速率來測試CAN端的接收速率,當CAN端開始出現丟包現象時,則認為CAN端的接收速率達到了最大。協議轉換速率測試數據見表3。

表3 協議轉換速率測試數據
由表3分析可知,綜合網關控制器在0~75 KB/s的通信速率下并未出現丟包現象,當通信速率大于75 KB/s時,CAN端接收到的數據和以太網發送的幀數不一致,出現了丟包現象,表明本網關的最大協議轉換速率為75 KB/s。
本文綜合網關控制器基于STM32F767IGT微處理器構建了包含CAN總線、RS- 485串口、Ethernet網接口的硬件平臺,在硬件設計中各接口均采用了隔離模塊,增強了綜合網關的可靠性和抗干擾能力。再通過在μC/OS-III嵌入式實時操作系統添加接口驅動程序和多協議轉換程序,具有較好的可移植性和通用性。模擬測試結果證明了能夠實現三種網絡互聯,可以滿足機艙各設備系統的數據傳遞和分享。