孟 遨,趙 敏,陳志逸
(南京航空航天大學(xué)自動(dòng)化學(xué)院,江蘇 南京 210000)
在采用ECU的發(fā)動(dòng)機(jī)監(jiān)控平臺(tái)中,數(shù)據(jù)是通過CAN總線進(jìn)行發(fā)送和接收的。控制器局域網(wǎng)絡(luò)CAN(Controller Area Network)屬于現(xiàn)場(chǎng)總線的范疇,但現(xiàn)場(chǎng)總線依然屬于“設(shè)備級(jí)層”,未能實(shí)現(xiàn)遠(yuǎn)程化的控制網(wǎng)絡(luò)。隨著現(xiàn)代智能儀表系統(tǒng)由集中控制向分布式控制系統(tǒng)發(fā)展,對(duì)儀表系統(tǒng)的遠(yuǎn)程化監(jiān)視也顯得尤為重要,即需要構(gòu)建“管理級(jí)層”網(wǎng)絡(luò)平臺(tái),而以太網(wǎng)恰恰具備遠(yuǎn)程控制的優(yōu)勢(shì)。因此,通過CAN總線和以太網(wǎng)的連接,不僅可以保證橫向設(shè)備間的相互通信,同時(shí)為數(shù)據(jù)信息的縱向傳遞提供通道,從而能夠?qū)崿F(xiàn)智能儀表系統(tǒng)的遠(yuǎn)程化集中監(jiān)控。
現(xiàn)在比較先進(jìn)的柴油機(jī)都帶有電子控制單元(ECU,Electronic Control Unit),采用CAN總線J1939規(guī)范進(jìn)行控制和數(shù)據(jù)發(fā)送。本文介紹的船用儀表系統(tǒng)通過CAN總線從船舶發(fā)動(dòng)機(jī)電子控制單元處獲取發(fā)動(dòng)機(jī)轉(zhuǎn)速、冷卻水溫度等船舶運(yùn)行參數(shù)以步進(jìn)電機(jī)指針式儀表和LCD液晶顯示屏式儀表這兩種方式實(shí)現(xiàn)船舶各種運(yùn)行工況的實(shí)時(shí)顯示,通過一個(gè)裁剪過的適合嵌入式系統(tǒng)應(yīng)用的TCP/IP協(xié)議棧,可通過上位機(jī)界面對(duì)船舶發(fā)動(dòng)機(jī)進(jìn)行實(shí)時(shí)監(jiān)控。本系統(tǒng)采用ARM系列處理器STM32F10x為核心處理單元,利用處理器自帶的CAN控制器實(shí)現(xiàn)CAN通訊,實(shí)現(xiàn)了信息的采集、處理和顯示。水溫、油溫、電瓶電壓、油壓以及發(fā)動(dòng)機(jī)轉(zhuǎn)速都是通過CAN總線從船舶發(fā)動(dòng)機(jī)控制單元處獲取,ARM處理器把這些信號(hào)處理后驅(qū)動(dòng)步進(jìn)電機(jī)模塊并通過串口發(fā)送給LCD液晶顯示模塊,系統(tǒng)還可以通過以太網(wǎng)發(fā)送給上位機(jī)??傇O(shè)計(jì)框圖如圖l所示,主要有CAN總線模塊、步進(jìn)電機(jī)與LCD液晶顯示模塊和以太網(wǎng)模塊。
CAN節(jié)點(diǎn)由微處理器、CAN控制器和CAN收發(fā)器組成。ARM處理器STM32F10x內(nèi)置CAN控制器,它與CAN收發(fā)器TJA1050相連,可直接接到CAN總線上,實(shí)現(xiàn)CAN總線的接口功能。本系統(tǒng)中,船舶ECU將發(fā)動(dòng)機(jī)轉(zhuǎn)速、油壓、油溫、水溫、電壓等信號(hào)以擴(kuò)展報(bào)文的形式通過CAN總線傳播到本節(jié)點(diǎn),由CAN收發(fā)器TJA1050接收后經(jīng)過信號(hào)轉(zhuǎn)換傳遞給STM32F107的內(nèi)置CAN控制器,STM32F107內(nèi)置CAN控制器實(shí)現(xiàn)報(bào)文過濾,以決定接收或放棄這一報(bào)文。對(duì)于接收到的報(bào)文,微處理器通過識(shí)別其ID以獲得主節(jié)點(diǎn)不同參數(shù)的情況,并相應(yīng)轉(zhuǎn)化為所需的數(shù)據(jù)。步進(jìn)電機(jī)部分采用的是ARM處理器STM32F103外接三態(tài)緩沖器74LVC244的方式來實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)的驅(qū)動(dòng)。步進(jìn)電機(jī)選用的MR1108型號(hào)步進(jìn)電機(jī),工作電壓5V,驅(qū)動(dòng)電流15mA左右,74LVC244最高輸出電流可達(dá)到24mA,完全可以達(dá)到該步進(jìn)電機(jī)對(duì)驅(qū)動(dòng)電流的要求。系統(tǒng)還采用了LCD液晶屏來輔助顯示各個(gè)參量值。LCD液晶顯示屏采用NH056ZN02-IV,LCD液晶屏主要是通過圖表的形式更直觀地顯示船舶的運(yùn)行參數(shù)。
圖1 儀表盤系統(tǒng)設(shè)計(jì)框圖
為了實(shí)現(xiàn)對(duì)船舶發(fā)動(dòng)機(jī)的遠(yuǎn)程化監(jiān)控,本系統(tǒng)采用以太網(wǎng)通過上位機(jī)進(jìn)行實(shí)時(shí)監(jiān)控,以太網(wǎng)基本模型結(jié)構(gòu)圖如圖2所示,系統(tǒng)采用的 ARM處理器之一STM32F107內(nèi)置以太網(wǎng)10/100 MAC模塊,對(duì)應(yīng)圖2中的數(shù)據(jù)鏈路層,只需外接PHY芯片DP83848,DP83848構(gòu)成網(wǎng)絡(luò)的物理層,當(dāng)有下層數(shù)據(jù),即下位機(jī)要通過以太網(wǎng)向上位機(jī)發(fā)送數(shù)據(jù)時(shí),由軟件將數(shù)據(jù)轉(zhuǎn)換成以太網(wǎng)格式的數(shù)據(jù)包,并按照要求發(fā)送給內(nèi)置以太網(wǎng)控制模塊,通過以太網(wǎng)接口部分配置網(wǎng)關(guān)的IP地址、MAC地址,加上以太網(wǎng)幀的首部和尾部信息等,從而將數(shù)據(jù)成功地傳送到以太網(wǎng)信息管理層。
圖2 以太網(wǎng)基本結(jié)構(gòu)模型
軟件系統(tǒng)按照模塊化的思想設(shè)計(jì),便于移植和維護(hù),避免代碼的重復(fù),從而節(jié)省數(shù)據(jù)的存儲(chǔ)空間。軟件模塊主要分CAN總線模塊、網(wǎng)絡(luò)通信模塊。
CAN總線模塊程序設(shè)計(jì)主要包括:CAN初始化、數(shù)據(jù)的接收和處理。初始化程序是對(duì)CAN控制器進(jìn)行必要的設(shè)置,主要包括CAN運(yùn)行模式的選擇、波特率的設(shè)置、報(bào)文過濾的設(shè)置,中斷允許設(shè)置等。程序設(shè)計(jì)流程如圖3所示。
圖3 CAN總線程序流程圖
2.1.1 報(bào)文過濾的設(shè)置
CAN協(xié)議的一個(gè)最大特點(diǎn)是廢除了傳統(tǒng)的站地址編碼,而代之以對(duì)通信報(bào)文進(jìn)行編碼。根據(jù)CAN總線技術(shù)規(guī)范,CAN總線有標(biāo)準(zhǔn)和擴(kuò)展兩種報(bào)文編碼格式,前者標(biāo)識(shí)符有19位,后者有29位,一個(gè)報(bào)文的內(nèi)容由其標(biāo)識(shí)符ID來命名。STM32F10x通過報(bào)文的ID來進(jìn)行報(bào)文過濾。以STM32F107為例,STM32F107共有28組過濾器,每組過濾器相互獨(dú)立,可以同時(shí)啟用任意組合的過濾器,只要能通過其中一組過濾器就能被處理器接收。每組過濾器包括了2個(gè)可配置的32位寄存器CAN-FxR0和CA N-FxR1,每組過濾器組有兩種工作模式:標(biāo)識(shí)符列表模式和標(biāo)識(shí)符屏蔽位模式。標(biāo)識(shí)符屏蔽位模式可過濾出一組標(biāo)識(shí)符。此時(shí)CAN-FxR0中保存的就是標(biāo)識(shí)符匹配值,CAN-FxR1中保存的是屏蔽碼,即 CAN-FxR1中如果某一位為 1,則 CAN-FxR0中相應(yīng)的位必須與收到的幀的標(biāo)志符中的相應(yīng)位吻合才能通過過濾器;CAN-FxR1中為0的位表示CAN-FxR0中的相應(yīng)位可不必與收到的幀進(jìn)行匹配。標(biāo)識(shí)符列表模式可過濾出某一個(gè)標(biāo)識(shí)符。此時(shí)CANFxR0和CAN-FxR1中都是要匹配的標(biāo)識(shí)符,收到的幀的標(biāo)識(shí)符必須與其中的一個(gè)吻合才能通過過濾。本系統(tǒng)只開啟了過濾器0,將其設(shè)置成標(biāo)識(shí)符屏蔽位模式,將CAN-FxR0和CAN-FxR1設(shè)置為0,表示收到的幀不需要與CAN-FxR0中任何一位進(jìn)行匹配,使任何ID的報(bào)文都能夠通過過濾器0被處理器接收。處理器讀取報(bào)文ID,不同ID的報(bào)文代表不同的參數(shù)。
2.1.2 中斷的設(shè)置
STM32共有兩個(gè)3級(jí)深度的FIFO可供選擇,分別為FIFO0和FIFO1,用來存放接收的報(bào)文,一次可保存三個(gè)完整的信息,F(xiàn)IFO完全由硬件來管理,從而節(jié)省了CPU的處理負(fù)荷,簡(jiǎn)化了軟件并保證了數(shù)據(jù)的一致性。應(yīng)用程序只需通過讀取FIFO輸出郵箱,來讀取FIFO中收到的報(bào)文。CAN-FilterFIFOAssignment的值設(shè)定了指向 FIFO0或者FIFO1,以 FIFO0為例。CAN中斷可選擇FIFO溢出中斷、FIFO接收?qǐng)?bào)文中斷、FIFO滿中斷等中斷方式,以FIFO接收?qǐng)?bào)文中斷為例,當(dāng)CAN總線上有數(shù)據(jù)通過CAN過濾器以后被存放于FIFO0中時(shí),即產(chǎn)生一個(gè)中斷,F(xiàn)IFO0接收?qǐng)?bào)文標(biāo)志位置位,進(jìn)入CAN中斷處理函數(shù),清除標(biāo)志位,從FIFO0中讀取本次報(bào)文,清空FIFO0,每個(gè)報(bào)文可傳輸0到8個(gè)字節(jié)的數(shù)據(jù),通過判斷報(bào)文ID識(shí)別此次報(bào)文為哪一個(gè)參數(shù),然后對(duì)數(shù)據(jù)進(jìn)行相應(yīng)轉(zhuǎn)換。
考慮到嵌入式本身的特點(diǎn)以及系統(tǒng)的需要,網(wǎng)絡(luò)通信在傳輸層采用了UDP協(xié)議,UDP協(xié)議是一個(gè)無連接協(xié)議,相對(duì)TCP,UDP的控制機(jī)制比較簡(jiǎn)單,且UDP在速度上比TCP更快,常用于數(shù)據(jù)量較少的數(shù)據(jù)傳輸,在少量數(shù)據(jù)傳輸時(shí),使用UDP協(xié)議傳輸信息流,可以減少TCP連接的過程,提高工作效率。程序流程如圖4所示。
在以太網(wǎng)程序設(shè)計(jì)中,對(duì)于以太網(wǎng)數(shù)據(jù)的接收和發(fā)送都使用了DMA(Direct Memory Access)方式,所謂DMA方式即利用STM32的DMA模塊進(jìn)行數(shù)據(jù)的傳送,不占用CPU資源,從而提高了CPU運(yùn)行效率。
在程序中數(shù)據(jù)的接收是通過中斷來觸發(fā)的,先打開以太網(wǎng)中斷,然后用udp-new()函數(shù)建立一個(gè)UDP類型的套接字,udp-bind()函數(shù)為此套接字綁定IP地址與端口,udp-recv()函數(shù)設(shè)置回調(diào)函數(shù)udp-servercallback(),當(dāng)接收到以太網(wǎng)底層數(shù)據(jù)時(shí),進(jìn)入名為L(zhǎng)wIP-Pkt-Handle()的中斷處理函數(shù),在中斷處理函數(shù)中調(diào)用ethernetif-input()函數(shù),ethernetif-input()函數(shù)將接收到的底層數(shù)據(jù)包按要求存入pbuf類型的結(jié)構(gòu)體中,此時(shí)調(diào)用回調(diào)函數(shù)udp-server-callback(),對(duì)接收到的數(shù)據(jù)進(jìn)行判斷后將待發(fā)送的船舶各運(yùn)行參數(shù)做相應(yīng)處理,通過udp-send()函數(shù)發(fā)送到上位機(jī)。
圖4 以太網(wǎng)程序流程圖
圖5為上位機(jī)顯示界面,上位機(jī)的顯示軟件采用NI公司的LABVIEW軟件進(jìn)行設(shè)計(jì),LABVIEW使用的是圖形化編輯語(yǔ)言G編寫程序,產(chǎn)生的程序是框圖的形式,開發(fā)周期短。本系統(tǒng)上位機(jī)顯示軟件可以曲線和數(shù)字兩種形式對(duì)船舶各參數(shù)進(jìn)行顯示,并能產(chǎn)生各種報(bào)警功能,工作人員可手動(dòng)設(shè)置報(bào)警參數(shù),以及生成歷史記錄。
圖5 上位機(jī)顯示界面
本系統(tǒng)以CAN總線為通信機(jī)制,通過步進(jìn)電機(jī)與LCD兩種形式進(jìn)行數(shù)據(jù)顯示,并通過以太網(wǎng)在上位機(jī)上進(jìn)行實(shí)時(shí)監(jiān)控。為了測(cè)試系統(tǒng)是否穩(wěn)定可靠,作者首先利用CANalyst分析儀模擬真實(shí)的CAN節(jié)點(diǎn)做了大量的實(shí)驗(yàn),并且多次去到現(xiàn)場(chǎng)在濰柴動(dòng)力藍(lán)擎國(guó)三電控發(fā)動(dòng)機(jī)上做實(shí)驗(yàn),能夠準(zhǔn)確接收發(fā)動(dòng)機(jī)的電子控制單元通過CAN總線發(fā)送的發(fā)動(dòng)機(jī)轉(zhuǎn)速、油溫、油壓、水溫、水壓等運(yùn)行參數(shù),通過步進(jìn)電機(jī)和LCD液晶顯示屏兩種方式實(shí)時(shí)顯示,并能夠通過以太網(wǎng)從上位機(jī)實(shí)現(xiàn)遠(yuǎn)程控制,實(shí)現(xiàn)對(duì)發(fā)動(dòng)機(jī)從啟動(dòng)到停止這一完整過程的監(jiān)控。經(jīng)過大量的實(shí)驗(yàn)測(cè)試與現(xiàn)場(chǎng)測(cè)試,本系統(tǒng)運(yùn)行穩(wěn)定,實(shí)時(shí)性好,具有廣闊的應(yīng)用前景。
[1]饒運(yùn)濤,鄒繼軍,鄭勇蕓.現(xiàn)場(chǎng)總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2003.
[2]李燕寧,鮑芳,邱雪瓊,等.CAN現(xiàn)場(chǎng)總線的嵌入式網(wǎng)關(guān)設(shè)計(jì)[J].儀表技術(shù)與傳感器,2006(11):27-29.
[3]莊松林,肖中漢.我國(guó)儀器儀表與測(cè)量控制科技的發(fā)展[J].自動(dòng)化儀表,2009.30(5):2-6.
[4]王永勝.智能儀表技術(shù)及工業(yè)自動(dòng)化應(yīng)用發(fā)展探討[J].自動(dòng)化博覽,2009(6):44-47.
[5]歐陽(yáng)琰,王貴槐,陳先橋,等.基于CAN總線的汽車儀表盤電控單元設(shè)計(jì)[J].武漢理工大學(xué)學(xué)報(bào),2009,31(1):79.81.