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

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

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

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

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

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

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

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

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

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

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

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