孫萬峰,李維波*,2,李齊,鄒振杰,盧月
1 武漢理工大學(xué) 自動化學(xué)院,湖北 武漢 430070
2 西藏大學(xué) 供氧研究院,西藏 拉薩 850012
艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng)通常由艦船底層控制器、主控制器和組態(tài)模塊等組成[1-3]。由于艦船并網(wǎng)控制系統(tǒng)中的監(jiān)控模塊需要監(jiān)控數(shù)量龐大的底層電氣設(shè)備(如發(fā)電機(jī)、逆變器和斬波器等)的健康狀態(tài)量,因此,主控制器需要處理龐雜的數(shù)據(jù)量并上傳給組態(tài)模塊, 并將組態(tài)模塊處理后的結(jié)果下達(dá)給主控制器。為適應(yīng)這些情況,對艦船并網(wǎng)控制系統(tǒng)中監(jiān)控模塊的串口通信有了更高的技術(shù)要求。并且由于龐雜的交互數(shù)據(jù)實(shí)時變化,極易造成數(shù)據(jù)長度超過緩沖器閾值,致使控制器無法正常通信,進(jìn)而產(chǎn)生數(shù)據(jù)丟失,造成艦船并網(wǎng)控制系統(tǒng)中監(jiān)控模塊不能實(shí)時讀取底層電氣設(shè)備的健康狀態(tài)、下達(dá)來自主控制器的控制指令和回傳指令給主控制器。因此,實(shí)現(xiàn)數(shù)據(jù)的變長收發(fā),對于艦船并網(wǎng)控制系統(tǒng)中監(jiān)控模塊的串口通信就顯得尤為重要。
目前串口通信技術(shù)有許多種[4-6],如查詢法、中斷法和直接存儲器訪問法(DMA)等,如何解決大容量的變字節(jié)長度的數(shù)據(jù)通信仍然是串口通信技術(shù)領(lǐng)域中的一個難點(diǎn)問題。傳統(tǒng)的串口通信方法對于查詢法而言,利用代碼來識別相關(guān)寄存器標(biāo)志位的狀態(tài),再依據(jù)該狀態(tài)執(zhí)行對應(yīng)操作,該方法適用于循環(huán)數(shù)據(jù)收發(fā),且耗費(fèi)大量CPU 資源,極大降低了CPU 性能?;谥袛喾ǖ拇谕ㄐ?,是外設(shè)發(fā)送數(shù)據(jù)后產(chǎn)生中斷,通知CPU 讀取數(shù)據(jù)。對比研究中斷法和查詢法得知,中斷法效率更高,不過中斷法需要進(jìn)行保存斷點(diǎn)和恢復(fù)斷點(diǎn)的操作,如果發(fā)送數(shù)據(jù)所需的時間比保存斷點(diǎn)和恢復(fù)斷點(diǎn)總共花費(fèi)的時間少,那么通信過程中可能會出現(xiàn)數(shù)據(jù)丟失的問題。所以中斷法應(yīng)用于多字節(jié)數(shù)據(jù)收發(fā)通信有其局限性,中斷法一般用在數(shù)據(jù)定長的收發(fā)場合。借助DMA 法的串口通信,在不需要CPU 的干預(yù)下,利用DMA 控制器和外圍設(shè)備之間構(gòu)成數(shù)據(jù)傳輸通道,并且數(shù)據(jù)可以借助DMA 控制器寫入指定存儲器中。在數(shù)據(jù)傳輸完成后,通知CPU 撤銷該數(shù)據(jù)傳輸通道。理論研究與運(yùn)行實(shí)踐表明,如果單獨(dú)使用DMA 法,并不能解決數(shù)據(jù)實(shí)時變長收發(fā)的技術(shù)難題。
針對艦船并網(wǎng)控制系統(tǒng)中監(jiān)控模塊的大容量、變字節(jié)長度的數(shù)據(jù)實(shí)時通信技術(shù)難題,本文將提出一種基于DMA 和中斷兩種方式結(jié)合使用的串口通信方法,采用DMA 發(fā)送中斷和串口接收中斷進(jìn)行數(shù)據(jù)變長收發(fā),實(shí)現(xiàn)艦船并網(wǎng)控制系統(tǒng)中監(jiān)控模塊的龐雜數(shù)據(jù)實(shí)時交互的功能,最終實(shí)現(xiàn)底層控制器與上位機(jī)之間健康、可靠、實(shí)時的串口通信。
艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng),簡稱為組態(tài)監(jiān)控系統(tǒng)。圖1 為組態(tài)監(jiān)控系統(tǒng)的整體架構(gòu),組態(tài)監(jiān)控系統(tǒng)由組態(tài)監(jiān)控界面、主控制器和底層控制器3 大關(guān)鍵部件組成。組態(tài)監(jiān)控界面的功能是實(shí)時顯示艦船狀態(tài)量以及當(dāng)前風(fēng)險等級。通過監(jiān)視組態(tài)監(jiān)控界面,以確保底層控制器的正常運(yùn)行。其中底層控制器包括電站控制器、逆變控制器以及斬波器等。本文以電站控制器為例,組態(tài)監(jiān)控界面顯示變量主要為發(fā)電機(jī)電壓、頻率、功率和逆變器電壓、頻率、功率以及該系統(tǒng)電壓風(fēng)險指標(biāo)、頻率風(fēng)險指標(biāo)和功率風(fēng)險指標(biāo)等。為適應(yīng)艦船組態(tài)監(jiān)控系統(tǒng)的底層控制器存在種類多、數(shù)量多、通信模式復(fù)雜的特點(diǎn),艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng)通過CAN 總線將底層控制器數(shù)據(jù)量轉(zhuǎn)換為信息流傳送給主控制器。
圖1 艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng)的通信網(wǎng)絡(luò)架構(gòu)圖Fig. 1 Communication network architecture of monitoring system in ship grid-connected control device
在艦船并網(wǎng)控制裝置的監(jiān)控系統(tǒng)中,主控制器不僅要處理來自底層控制器的數(shù)據(jù),還要將處理后的數(shù)據(jù)上傳給上位機(jī)。為確保數(shù)據(jù)采集的實(shí)時性以及數(shù)據(jù)傳輸?shù)目煽啃?,采用DMA 與中斷控制方式來協(xié)調(diào)CPU 工作,減少了CPU 工作量,使得交互數(shù)據(jù)的速度和精度得到提高。本文主要從主控制器和艦船監(jiān)控系統(tǒng)之間通信握手流程和DMA 控制器傳輸數(shù)據(jù)兩個方面進(jìn)行分析。
組態(tài)監(jiān)控軟件可用于復(fù)雜的圖形界面和支持多種接口,因此被廣泛用作監(jiān)控系統(tǒng)。組態(tài)軟件與單片機(jī)的通信方式有以下3 種[7]:
1) 通過動態(tài)數(shù)據(jù)交換(DDE)進(jìn)行通信。該通信方式對普通開發(fā)者不夠友好,開發(fā)難度大,且數(shù)據(jù)開銷多,導(dǎo)致組態(tài)通信系統(tǒng)不能實(shí)時通信,會降低通信系統(tǒng)的可靠性。
2) 組態(tài)軟件自帶驅(qū)動程序包,開發(fā)人員根據(jù)項(xiàng)目需求來開發(fā)驅(qū)動程序。該方法對開發(fā)人員的技術(shù)要求更高,需要透徹了解驅(qū)動模塊,才能編寫驅(qū)動程序,因而會拉長開發(fā)周期并增加研發(fā)成本。
3) 組態(tài)提供的單片機(jī)(如ARM,MCS51,F(xiàn)PGA等)借助通信協(xié)議進(jìn)行通信。該方法相較方式1 和方式2 難度低,便于操作,通信實(shí)時性滿足工程的實(shí)際需求,適用普通開發(fā)者。
本文采用基于ARM 微控制器的通用通信協(xié)議進(jìn)行容錯通信的方法。組態(tài)模塊的單片機(jī)通用協(xié)議常用的為2 種,分別為HEX 型協(xié)議和ASCII型協(xié)議。它們均可直接由串口和單片機(jī)通信。ASCII 型通信協(xié)議比HEX 型協(xié)議的設(shè)計更簡單,開發(fā)者編程更方便,所以本艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng)采用ASCII 型通信協(xié)議進(jìn)行數(shù)據(jù)交互。常用的通信方式有RS232,RS422 和RS485,其中,RS485 總線在網(wǎng)絡(luò)連接上簡單,且傳輸距離遠(yuǎn),抗干擾能力強(qiáng),所以選擇RS485 通信方式用于主控制器與上位機(jī)的通信。
主控制器與上位機(jī)的通信握手本質(zhì)上是雙方按照約定的通信協(xié)議進(jìn)行通信。約定的通信協(xié)議即本文的數(shù)據(jù)幀協(xié)議,并且數(shù)據(jù)幀中特定位置的數(shù)據(jù)具有特定的意義。本文傳輸數(shù)據(jù)最小單元為一幀數(shù)據(jù),且每幀數(shù)據(jù)長度實(shí)時變化。
為構(gòu)建艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng),其主控制器的數(shù)據(jù)幀協(xié)議包括組態(tài)發(fā)送數(shù)據(jù)幀的定義(數(shù)據(jù)幀各個參數(shù))和主控制器根據(jù)組態(tài)發(fā)送讀寫命令做出的不同應(yīng)答等內(nèi)容。如:組態(tài)發(fā)送(寫命令)格式、控制器應(yīng)答(寫命令正確)格式、控制器應(yīng)答(寫命令錯誤)格式、組態(tài)發(fā)送(讀命令)格式、主控制器應(yīng)答(讀命令正確)格式以及主控制器應(yīng)答(讀命令錯誤)格式的構(gòu)建。
根據(jù)組態(tài)與主控制器的讀寫協(xié)議,可以設(shè)計出相應(yīng)的握手流程。由于組態(tài)發(fā)送寫命令流程與發(fā)送讀命令數(shù)據(jù)幀的長度不同,因此主控制器響應(yīng)的數(shù)據(jù)幀也不同。它們之間的握手流程如圖2所示,圖2 數(shù)據(jù)幀中的STX(start of text)表示數(shù)據(jù)文本起始,DLE(disseminated link entity)表示數(shù)據(jù)鏈路實(shí)體。
圖2 組態(tài)與主控制器之間的握手流程圖Fig. 2 Flowchart of handshake between configuration and main controller
組態(tài)與主控制器之間的握手流程為:首先,當(dāng)組態(tài)處于發(fā)送寫命令工作模式下,主控制器會根據(jù)寫命令下的數(shù)據(jù)幀長度判斷主控制器所處的工作模式,應(yīng)答“寫”命令或者“讀”命令;其次,校驗(yàn)組態(tài)發(fā)送的一幀數(shù)據(jù)中的字頭和CR 位,若校驗(yàn)成功,則主控制器響應(yīng)輸出“寫”成功,表示兩者間握手成功;同理,當(dāng)組態(tài)處于“讀”命令工作模式下,主控制器校驗(yàn)“讀”命令的數(shù)據(jù)幀,若校驗(yàn)成功,則表示“讀”命令成功,否則“讀”命令失敗。
艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng)通信技術(shù)有2 個重點(diǎn)問題:一是組態(tài)監(jiān)控界面和主控制器通信通道雙方如何實(shí)現(xiàn)可靠握手;二是在實(shí)現(xiàn)可靠握手后,如何實(shí)現(xiàn)數(shù)據(jù)流在傳輸過程中實(shí)時變長度發(fā)送和接收。本節(jié)從DMA 控制器的結(jié)構(gòu)、基于DMA 與中斷的通信流程以及DMA 與中斷的通信時序幾個部分,闡述數(shù)據(jù)流變長傳輸?shù)幕痉椒ㄅc處理技術(shù)。
本文主控制器是以STM32F417 芯片為CPU且有多路外設(shè)的電路板卡。DMA 控制器在主控制器中所處的位置,如圖3 所示。
圖3 DMA 在主控制器中的位置示意圖Fig. 3 Schematic diagram of DMA position in the main controller
STM32F417 芯片是一個典型的基于AHB(advanced high performance bus)總線協(xié)議架構(gòu)的片上系統(tǒng)芯片[8]。其中,AHB 總線通常搭載高性能設(shè)備,如CPU,DMA,USB 等,而APB (advanced peripheral bus)總線通常掛載低速設(shè)備,如串口USART,CAN和普通GPIO等。DMA與串口USART間的橋接物理通道是基于AHB 總線和APB 總線協(xié)議進(jìn)行聯(lián)接。首先,CPU 通過在軟件上對DMA內(nèi)部寄存器進(jìn)行配置,使得DMA 控制器完成初始化;其次,DMA 通過AHB MASTER 接口基于AHB 總線信道鏈接到AHB/APB1 橋接轉(zhuǎn)換器,最后AHB/APB1 橋接轉(zhuǎn)換器通過APB 總線信道鏈接到串口USART 上,從而創(chuàng)建DMA 與串口數(shù)據(jù)交互的橋接信道。
基于中斷模式的DMA 通信工作流程如圖4所示。DMA 通信流程為:首先,源端存儲設(shè)備向DMA 控制器(DMAC)發(fā)出任務(wù)請求,由于主控制器從底層控制器采集的數(shù)據(jù),直接通過數(shù)據(jù)緩沖器存儲于主控制器內(nèi)部集成的存儲器中,不需要通過硬件握手模塊。在預(yù)處理過程中,DMA 控制器利用內(nèi)部邏輯來解讀CPU 傳輸過來的信息。并且CPU 根據(jù)它當(dāng)前所處工作狀態(tài)來確認(rèn)是否釋放AHB 總線權(quán)限。其次數(shù)據(jù)傳輸過程為從源端設(shè)備讀取或者向目的設(shè)備寫入。讀操作階段時必須先保證源端設(shè)備已經(jīng)準(zhǔn)備好數(shù)據(jù),讀取數(shù)據(jù)大小由CPU 配置、數(shù)據(jù)總線寬度、地址總線寬度等因素決定。最后,當(dāng)DMA 控制器內(nèi)部計數(shù)器計數(shù)到達(dá)設(shè)定值,則完成DMA 數(shù)據(jù)傳輸過程,退出中斷程序,DMA 釋放AHB 總線控制權(quán)限,等待下一次數(shù)據(jù)傳輸預(yù)處理。
圖4 基于中斷的DMA 控制器工作流程圖Fig. 4 Working process of DMA controller based on interrupt
基于中斷的DMA 控制器的通信時序圖如圖5所示。
圖5 基于中斷的DMA 控制器的通信時序圖Fig. 5 Communication sequence diagram of DMA controller based on interrupt
中斷的DMA 控制通信時序?yàn)椋?/p>
1) 復(fù)位后,主控器處于空閑模式,等待DMA請求指令。當(dāng)主控制器得到DMA 請求指令后,初始化DMA 控制器內(nèi)部的讀寫通道,并選取合適的數(shù)據(jù)通道,等待控制AHB 總線指令,若總線被占用,則需繼續(xù)等待總線指令。在得到總線控制指令后,數(shù)據(jù)開始傳輸。
2)根據(jù)STM32F417 芯片的內(nèi)部結(jié)構(gòu),本文組態(tài)監(jiān)控系統(tǒng)主控制器擁有2 個DMA 控制器。每個DMA 控制器具有8 個數(shù)據(jù)流,每個數(shù)據(jù)流均可用作數(shù)據(jù)搬運(yùn),此外每個數(shù)據(jù)流通常含有8 個通道。DMA 控制器可以處理存儲設(shè)備訪問請求信號,并且能處理DMA 請求通道間優(yōu)先級的選取。
3) DMA 在初始化配置過程中,將對相關(guān)重要的寄存器進(jìn)行配置。比如DMA_NDTR,USART_IDLE,USART_DR,USART_SR 寄 存 器。DMA_NDTR 寄存器在每發(fā)送一幀數(shù)據(jù)后會重新刷新發(fā)送數(shù)據(jù)的長度,從而實(shí)時刷新發(fā)送數(shù)據(jù)幀的長度。具體通過USART_DR 寄存器完成變長字節(jié)數(shù)據(jù)收發(fā),當(dāng)向該寄存器寫數(shù)據(jù)時串口將發(fā)送數(shù)據(jù);當(dāng)向該寄存器讀數(shù)據(jù)時該寄存器將存儲接收數(shù)據(jù)。USART_SR 寄存器為串口狀態(tài)寄存器,通過對USART_SR 寄存器([31:0])中的bit5 和bit6置位來判斷數(shù)據(jù)是被接收還是數(shù)據(jù)已發(fā)送完成。其 中USART_SR bit5 為RXEN,bit6 為TC。bit5置1 表示串口狀態(tài)為接收,bit6 置1 表示串口數(shù)據(jù)已發(fā)送完成。USART_IDLE 寄存器為串口空閑狀態(tài)寄存器,通過操作USART_IDLE 寄存器來檢測總線空閑狀態(tài)。
4) 本文主控制器主要執(zhí)行串口接收中斷和串口發(fā)送DMA 中斷2 種中斷程序模塊。其中,主控制器中斷程序的配置包括搶占優(yōu)先級配置和響應(yīng)優(yōu)先級配置。
表1 為DMA 控制器時序的中斷優(yōu)先級。
表1 DMA 控制器時序的中斷優(yōu)先級Table 1 Interrupt priority of DMA controller timing
本文采用STM32F417 的TIM4 定時器作為主控制器的主循環(huán)時鐘,時鐘周期設(shè)置為5 ms。串口1 用于組態(tài)寫命令給主控制器,串口2 用于組態(tài)讀命令。程序設(shè)計內(nèi)容包括:主循環(huán)流程、串口應(yīng)答流程(包括串口1 和串口2)、中斷流程(包括DMA 發(fā)送中斷流程和串口接收中斷響應(yīng)流程),如圖6~圖8 所示。
圖6 中,主循環(huán)流程內(nèi)容為初始化相關(guān)標(biāo)志位、數(shù)據(jù)區(qū)以及串口1、串口2 接收數(shù)據(jù)并按照既定算法處理數(shù)據(jù)。分析主循環(huán)流程,串口1 和串口2 之間存在響應(yīng)沖突和應(yīng)答沖突的矛盾,所以本文設(shè)定串口1 中斷優(yōu)先級高于串口2。將串口1 搶占優(yōu)先級和響應(yīng)優(yōu)先級均設(shè)置為1,串口2 搶占優(yōu)先級和響應(yīng)優(yōu)先級均設(shè)置為2。圖7 表示串口應(yīng)答流程,它包括串口1 應(yīng)答流程(圖7(a))和串口2 應(yīng)答流程(圖7(b))。圖7(a)中,串口1 應(yīng)答流程內(nèi)容為組態(tài)向主控制器寫命令,對底層控制器的電壓、電流、功率和溫度等模擬量進(jìn)行賦值,并計算風(fēng)險指標(biāo)。圖7(b)中,串口2 應(yīng)答流程內(nèi)容為主控制器讀命令,上傳風(fēng)險指標(biāo)給組態(tài)界面。
圖6 主循環(huán)流程圖Fig. 6 Main cycle flowchart
圖7 串口應(yīng)答流程圖Fig. 7 Serial response flowchart
圖8 為中斷流程圖,包括DMA 發(fā)送中斷流程(圖8(a))和串口接收中斷響應(yīng)流程(圖8(b))。圖8(a)中,DMA 發(fā)送中斷流程內(nèi)容為對DMA 控制器和DMA 發(fā)送中斷進(jìn)行初始化,并根據(jù)是否存在DMA 發(fā)送中斷請求標(biāo)志來判斷數(shù)據(jù)幀發(fā)送情況。圖8(b)中,串口接收中斷響應(yīng)流程為初始化串口及串口中斷配置,根據(jù)串口接收中斷請求標(biāo)志來查閱數(shù)據(jù)幀的接收情況。
圖8 中斷流程圖Fig. 8 Interrupt flowchart
串口通信接口的硬件拓?fù)淙鐖D9 所示。它由主控制器、收發(fā)器ADM2587、組態(tài)接口組成。圖9中的隔離模塊ADM2587 采用ADI 公司的iCouple技術(shù),集成了三態(tài)差分線路驅(qū)動器、差分輸入接收器和DC/DC 轉(zhuǎn)換器,實(shí)現(xiàn)了內(nèi)部信號集成與電源隔離[9-10],同時減少了外部共模信號對數(shù)據(jù)傳輸?shù)母蓴_。該串口電路可為軟件程序編程以及數(shù)據(jù)的傳輸提供硬件支持。
圖9 串口通信接口的硬件拓?fù)鋱DFig. 9 Hardware topology of serial communication interface
以艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng)供電部分的可視化通信設(shè)計為例,驗(yàn)證基于DMA 與中斷融合技術(shù)在串口數(shù)據(jù)變長收發(fā)方面的有效性?,F(xiàn)場聯(lián)調(diào)測試裝置包括主控制器(圖10)、艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng)的前電站顯控模塊和后電站顯控模塊(圖11)等。其中,組態(tài)界面由1#機(jī)組參數(shù)欄(又稱主窗口)、2#機(jī)組參數(shù)欄、3#機(jī)組參數(shù)欄、4#機(jī)組參數(shù)欄、1#柴發(fā)參數(shù)欄、2#柴發(fā)參數(shù)欄以及報警記錄欄7 個窗口組成[11]。
圖10 主控制器實(shí)物圖Fig. 10 Photograph of main controller
圖11 艦船并網(wǎng)控制裝置中的監(jiān)控系統(tǒng)聯(lián)調(diào)實(shí)物圖Fig. 11 Photograph of joint commissioning of monitoring system in ship grid connected control device
在初始化串口時,合理配置波特率對艦船監(jiān)控系統(tǒng)中的主控制器和組態(tài)通信十分重要。主控制器與組態(tài)間握手成功的關(guān)鍵因素之一是雙方的波特率一致,并且波特率的大小影響通信數(shù)據(jù)的可靠性。若兩者的波特率過大,則會造成通信握手異常;若兩者設(shè)定的波特率過低,則會造成通信握手成功率低。在實(shí)驗(yàn)調(diào)試過程中,設(shè)定兩者波特率為9 600 bit/s 時,能夠較快實(shí)現(xiàn)兩者之間通信握手。
為驗(yàn)證變長傳輸及容錯性能,在串口硬件裝置上分別下載基于DMA 與中斷方式的串口通信程序和傳統(tǒng)定長收發(fā)測試程序,通過串口1 發(fā)送不同數(shù)據(jù)幀長度的數(shù)據(jù)包5 000 次,測試在2 種不同的通信方式下接收數(shù)據(jù)包的次數(shù)和未接收數(shù)據(jù)包的丟包率。具體測試結(jié)果如表2 所示。從表中可以看出,本文提出的DMA 與中斷方式的通信技術(shù)與傳統(tǒng)定長收發(fā)串口通信相比,具有較高的容錯度,并增加了數(shù)據(jù)傳輸容量。
表2 兩種通信方式測試結(jié)果Table 2 Results of two communication methods
組態(tài)界面窗口及其測試結(jié)果如圖12 所示。該裝置從2017 年至今一直能夠在某艦船現(xiàn)場健康、可靠運(yùn)行,充分檢驗(yàn)了基于DMA 與中斷融合技術(shù)在串口數(shù)據(jù)變長收發(fā)方面的有效性。
圖12 組態(tài)界面窗口及其測試結(jié)果Fig. 12 Configuration interface window and its test results
針對傳統(tǒng)通信方法不能解決數(shù)據(jù)變長收發(fā)的難題,本文提出了DMA 與中斷融合通信技術(shù)。構(gòu)建由組態(tài)與以STM32F417 為核心的主控制器串行通信系統(tǒng),由通信協(xié)議來設(shè)計通信握手和通過DMA 控制器來設(shè)計數(shù)據(jù)變字節(jié)長度傳輸。實(shí)現(xiàn)了艦船監(jiān)控系統(tǒng)的數(shù)據(jù)交互功能,并提高了串行通信數(shù)據(jù)傳輸容量和數(shù)據(jù)的容錯度,具有一定的應(yīng)用價值。但是組態(tài)與以STM32F417 為主控制器間數(shù)據(jù)長度閾值有限,因此還需做進(jìn)一步的研究。