隨著車內(nèi)網(wǎng)絡(luò)的復(fù)雜化對(duì)速度,尤其是對(duì)故障容錯(cuò)與實(shí)時(shí)性的需求不斷增加,F(xiàn)lexRay總線的高速度、確定性、容錯(cuò)性等特點(diǎn)引起廣大學(xué)者和廠商的關(guān)注。 FlexRay支持分布式控制系統(tǒng),具有全面協(xié)同工作的能力,其信息傳輸?shù)拇_定性離不開其內(nèi)部的時(shí)鐘同步機(jī)制的支持。時(shí)鐘同步機(jī)制可根據(jù)該節(jié)點(diǎn)啟動(dòng)的不同工作階段,定義成不同的工作狀態(tài),如初始化、等待接收同步幀等。考慮到傳統(tǒng)的FSM方法建立模型存在代碼難以復(fù)用、維護(hù)困難等問題,本文基于量子框架的角度,采用有限狀態(tài)機(jī)的方法對(duì)FlexRay時(shí)鐘同步機(jī)制進(jìn)行研究。
1 量子框架
量子框架是基于事件驅(qū)動(dòng)并發(fā)狀態(tài)機(jī)的一種應(yīng)用框架,適用于嵌入式的可重用的基礎(chǔ)結(jié)構(gòu),它為外圍的應(yīng)用系統(tǒng)提供了硬件框架。量子框架在應(yīng)用系統(tǒng)中的地位如圖 1所示。
量子框架理論將應(yīng)用系統(tǒng)按照功能模塊分解成相互獨(dú)立的活動(dòng)對(duì)象,它們之間通過量子框架提供的軟總線和可識(shí)別的事件實(shí)例來實(shí)現(xiàn)彼此間的通信,活動(dòng)對(duì)象彼此間沒有任何的通信。事件隊(duì)列是為活動(dòng)對(duì)象提供的一個(gè)外部通信接口,能夠使活動(dòng)對(duì)象接收事件實(shí)例;還提供了保護(hù)內(nèi)部狀態(tài)圖的緩沖空間,以防止事件的生產(chǎn)爆發(fā)帶來的破壞,保證了活動(dòng)對(duì)象在運(yùn)行過程中的完整性。
2 FlexRay時(shí)鐘同步機(jī)制
2.1 FlexRay內(nèi)部結(jié)構(gòu)
FlexRay按照其功能可以分成3個(gè)層次:通信接口及控制層、內(nèi)部時(shí)鐘控制層和外部接口控制層,如圖2所示。
通信接口及控制層主要包括控制主機(jī)接口(CHI)和協(xié)議運(yùn)行控制器(POC)。CHI主要負(fù)責(zé)內(nèi)核和主機(jī)通信接口,POC是內(nèi)核的控制單元。
內(nèi)部時(shí)鐘控制層包括時(shí)鐘同步啟動(dòng)模塊(CSS)、時(shí)鐘同步處理模塊(CSP)和時(shí)鐘發(fā)生器(MTG)。系統(tǒng)中各個(gè)節(jié)點(diǎn)的時(shí)鐘同步就是主要依靠這個(gè)層來實(shí)現(xiàn)的。
外部接口控制層包括多路訪問控制模塊(MAC)、數(shù)據(jù)幀與符號(hào)處理模塊(FSP)和編碼解碼處理模塊(CO—DEC)三個(gè)部分,可實(shí)現(xiàn)對(duì)接收發(fā)送數(shù)據(jù)信息的處理和對(duì)總線讀/寫操作的編碼解碼功能。
2.2 時(shí)鐘周期結(jié)構(gòu)
每一個(gè)通信周期內(nèi)包括最小時(shí)間節(jié)拍層 (Microtick)、最大時(shí)間節(jié)拍層(Macrotick)、仲裁網(wǎng)格層(Arbitration—grid)和通信周期層4個(gè)時(shí)間等級(jí)。每個(gè)通信周期分成4個(gè)部分:靜態(tài)段、動(dòng)態(tài)段、符號(hào)窗口和空閑網(wǎng)絡(luò)段。在靜態(tài)段中,基于時(shí)分復(fù)用(TDMA)技術(shù)將固定時(shí)槽分配給與各個(gè)節(jié)點(diǎn)匹配的ID,并允許節(jié)點(diǎn)傳輸數(shù)據(jù)。時(shí)槽大小相同,并且是從1開始向上編號(hào)。將一個(gè)或一個(gè)以上的時(shí)槽固定分配給每個(gè)節(jié)點(diǎn)。在運(yùn)行期間,該時(shí)槽的分配不能修改,如圖3所示。
2.3 內(nèi)部時(shí)鐘同步機(jī)制
節(jié)點(diǎn)的時(shí)鐘同步功能主要是由內(nèi)部時(shí)鐘控制層實(shí)現(xiàn)的。其內(nèi)部的MTG模塊控制周期計(jì)數(shù)器和最大時(shí)鐘節(jié)拍的計(jì)數(shù)器,并對(duì)其進(jìn)行修正;CSP模塊主要完成一個(gè)通信周期開始的初始化,測(cè)量并存儲(chǔ)時(shí)間偏差值,計(jì)算頻率與相位的修正值;CSS模塊負(fù)責(zé)在集群啟動(dòng),或者在作為冷啟動(dòng)節(jié)點(diǎn)時(shí)發(fā)出時(shí)鐘啟動(dòng)信號(hào)。
當(dāng)節(jié)點(diǎn)被喚醒并完成初始化后,就能在發(fā)出相應(yīng)的主機(jī)命令后進(jìn)入啟動(dòng)流程。節(jié)點(diǎn)開始監(jiān)控總線,如果沒有其他節(jié)點(diǎn)在發(fā)送數(shù)據(jù),則自身發(fā)送數(shù)據(jù),從而成為啟動(dòng)集群的主冷啟動(dòng)節(jié)點(diǎn)。在傳輸符號(hào)通知其他節(jié)點(diǎn)后,啟動(dòng)自身時(shí)鐘,開始第一個(gè)通信循環(huán),并根據(jù)預(yù)定義機(jī)制,主啟動(dòng)節(jié)點(diǎn)將在其分配的時(shí)槽中傳輸。與其他所有節(jié)點(diǎn)一樣,它將只在一個(gè)時(shí)槽的啟動(dòng)階段傳輸。
當(dāng)節(jié)點(diǎn)在接收到消息識(shí)別碼(ID)和時(shí)槽編號(hào)相同時(shí),
節(jié)點(diǎn)接收屬于自己的第1條消息。當(dāng)接收到第2條消息時(shí),后續(xù)的冷啟動(dòng)節(jié)點(diǎn)啟動(dòng)自身時(shí)鐘,并通過當(dāng)前獲得通信循環(huán)周期號(hào)和消息的時(shí)槽編號(hào)進(jìn)行初始化。兩條消息的時(shí)間差理論上應(yīng)該與主冷啟動(dòng)的通信周期相對(duì)應(yīng),接收節(jié)點(diǎn)要比較它們的可能的偏差,并通過糾正機(jī)制計(jì)算出修正值,從而通過修改內(nèi)部時(shí)鐘發(fā)生器的時(shí)基頻率,使其盡可能地與主冷啟動(dòng)周期值相對(duì)應(yīng)。
FlexRay內(nèi)部的時(shí)鐘同步機(jī)制同時(shí)采用頻率修正與相位修正兩種方法對(duì)時(shí)鐘進(jìn)行修正。
2.3.1 頻率修正
在CSP模塊中,頻率偏差的測(cè)量在每個(gè)通信周期的靜態(tài)段中進(jìn)行,通過內(nèi)部算法在奇數(shù)周期的靜態(tài)段之后計(jì)算偏差修正值。如圖4所示,偏差的結(jié)果在 Cycle(2n+1)中計(jì)算得到,在Cycle(2n+2)和Cycle(2n+3)兩個(gè)周期內(nèi)MTG模塊利用此偏差值進(jìn)行頻率修正,而在 Cycle(2n+3)中得到的新的偏差值在接下來的2個(gè)周期中得到應(yīng)用。
2.3.2 相位修正
在CSP模塊中,相位修正值的計(jì)算是在每個(gè)通信周期中都進(jìn)行采集(靜態(tài)段)和計(jì)算(在開始進(jìn)行相位修正之前完成)的;應(yīng)用于MTG模塊的奇數(shù)周期內(nèi)的NIT段,從 gOffsetCorrectionStart時(shí)刻開始到下一個(gè)周期開始之前,完成相位的修正過程。
值得注意的是,MTG模塊每個(gè)周期都要進(jìn)行頻率修正。為了保證兩種修正方式的正確性,頻率偏差值的更新周期和相位修正周期是分開的。圖4中,在 Cycle(2n+1)周期中MTG同時(shí)進(jìn)行頻率和相位的修正,但沒有進(jìn)行頻率修正值的更新;而在Cycle(2n+2)周期,接收到CSP模塊發(fā)送的新頻率偏差值vRateCorrection,更新頻率偏差值,進(jìn)行頻率修正,但沒有進(jìn)行相位修正。也就是說,在沒有更新頻率偏差值的周期內(nèi),兩種修正同時(shí)進(jìn)行;在頻率更新的周期內(nèi),不進(jìn)行相位修正。另外,每個(gè)奇數(shù)周期內(nèi),CSP在靜態(tài)段之后進(jìn)行相位和頻率修正值的計(jì)算。理論上這兩個(gè)計(jì)算過程沒有時(shí)間上的先后,只要確保相位修正值在應(yīng)用前(gOffsetCorrectionStart)得到,而頻率偏差值在下一個(gè)周期到來之前得到。
3 基于量子框架的行為建模
3.1 有限狀態(tài)機(jī)的設(shè)計(jì)
有限狀態(tài)機(jī)是對(duì)描述對(duì)象的抽象描述,它把對(duì)象模型分解成一些能夠進(jìn)行讀/寫操作或者等待外部事件的狀態(tài),并且能夠由外部事件引起對(duì)象狀態(tài)的轉(zhuǎn)換,即在當(dāng)前狀態(tài)下,由外部事件的發(fā)生并在滿足某些條件的情況下,進(jìn)入第2個(gè)狀態(tài)。
3.2 對(duì)象分析
根據(jù)節(jié)點(diǎn)配置的不同功能,F(xiàn)lexRay內(nèi)部的各個(gè)模塊表現(xiàn)為不同的狀態(tài)變化。在一個(gè)系統(tǒng)的眾多節(jié)點(diǎn)中,包括數(shù)量有限的冷啟動(dòng)節(jié)點(diǎn)(cold start node)和普通節(jié)點(diǎn)。冷啟動(dòng)的節(jié)點(diǎn)分成2種:一種是啟動(dòng)整個(gè)集群的主冷啟動(dòng)節(jié)點(diǎn)(1eading cold start node);另一種是根據(jù)其他冷啟動(dòng)節(jié)點(diǎn)的參數(shù)來完成啟動(dòng)的從冷啟動(dòng)節(jié)點(diǎn)(following coldstart node)。這里只討論節(jié)點(diǎn)作為從冷啟動(dòng)節(jié)點(diǎn)的情況。
3.3 活動(dòng)對(duì)象建模
如上所述,每個(gè)活動(dòng)對(duì)象都是作為一個(gè)相對(duì)獨(dú)立的任務(wù)來處理的。量子框架起到了軟件總線的作用,系統(tǒng)的功能擴(kuò)展、分解、集成比較容易,可以方便地進(jìn)行升級(jí)、裁剪。將FlexRay系統(tǒng)按功能模塊分解成3個(gè)活動(dòng)對(duì)象,如圖5所示。
3.3.1 通信接口及控制活動(dòng)對(duì)象
這個(gè)活動(dòng)對(duì)象包括CHI和POC兩個(gè)模塊。CHI是主機(jī)和FlexRay內(nèi)核通信接口。在實(shí)現(xiàn)時(shí)鐘同步過程中,該模塊主要是接收MTG的內(nèi)部時(shí)鐘和CSP 發(fā)送的當(dāng)前接收同步幀的溢出信號(hào),以及向CSP發(fā)送外部頻率/相位修正值。POC是FlexRay內(nèi)核非常重要的控制模塊,負(fù)責(zé)協(xié)調(diào)節(jié)點(diǎn)內(nèi)各個(gè)功能模塊有效地運(yùn)行。根據(jù)節(jié)點(diǎn)時(shí)鐘同步流程,建立有限狀態(tài)模型,如圖6所示。
如圖6所示,節(jié)點(diǎn)首先對(duì)兩個(gè)模塊進(jìn)行初始化;當(dāng)接收到主機(jī)配置指令后,進(jìn)行內(nèi)部功能配置;完成后進(jìn)入節(jié)點(diǎn)啟動(dòng)狀態(tài),最后轉(zhuǎn)換到運(yùn)行狀態(tài)。如果在運(yùn)行狀態(tài)接收到主機(jī)的外部修正值時(shí),則活動(dòng)對(duì)象發(fā)送vExternRate—control和vExternOffsetControl兩個(gè)變量到CSP模塊,用于節(jié)點(diǎn)內(nèi)部時(shí)鐘修正。
3.3.2 內(nèi)部時(shí)鐘控制活動(dòng)對(duì)象
此活動(dòng)對(duì)象包含CSS、CSP和MTG三個(gè)功能模塊,是時(shí)鐘同步機(jī)制的主要組成部分。這里考慮作為從冷啟動(dòng)節(jié)點(diǎn)的時(shí)鐘同步過程,所以采取使用其他主冷啟動(dòng)節(jié)點(diǎn)的同步化參數(shù)參來啟動(dòng),調(diào)整內(nèi)部時(shí)鐘,從而實(shí)現(xiàn)系統(tǒng)中各個(gè)節(jié)點(diǎn)間的時(shí)鐘同步,如圖7所示。
上電后,活動(dòng)對(duì)象處于默認(rèn)狀態(tài)。當(dāng)接收到主機(jī)集群啟動(dòng)指令后,進(jìn)入等待啟動(dòng)狀態(tài)并建立CSS實(shí)例和對(duì)測(cè)量偏差的變量初始化;在接收兩個(gè)啟動(dòng)幀后,節(jié)點(diǎn)啟動(dòng)內(nèi)部時(shí)鐘。當(dāng)接收到其他冷啟動(dòng)節(jié)點(diǎn)的時(shí)鐘信息同步幀后,采集節(jié)點(diǎn)間時(shí)間偏差,采用容錯(cuò)算法計(jì)算出頻率和相位的修正值并發(fā)送給MTG模塊,從而完成與主冷啟動(dòng)節(jié)點(diǎn)的時(shí)鐘同步。
3.3.3 總線接口控制活動(dòng)對(duì)象
此活動(dòng)對(duì)象是FlexRay內(nèi)核與外部總線的接口,完成對(duì)發(fā)送數(shù)據(jù)信息的編碼發(fā)送和對(duì)接收數(shù)據(jù)的解碼及識(shí)別。考慮到靜態(tài)段采用TMDA方式進(jìn)行傳輸,且時(shí)鐘同步采用接收數(shù)據(jù)幀的方式,這里只根據(jù)數(shù)據(jù)幀的接收及解碼過程建立有限狀態(tài)模型,如圖8所示。
圖8中,活動(dòng)對(duì)象在接收到相應(yīng)信號(hào)的空閑標(biāo)志信號(hào)cE Start后,開始對(duì)數(shù)據(jù)幀進(jìn)行解碼,依次對(duì)數(shù)據(jù)幀的起始標(biāo)志和幀頭段進(jìn)行解碼;然后是靜態(tài)段以及周期內(nèi)其他部分的解碼。通過檢查數(shù)據(jù)幀、符號(hào)時(shí)序和語法來判斷當(dāng)前接收數(shù)據(jù)的有效性。
3.4 活動(dòng)對(duì)象交互
在節(jié)點(diǎn)集群啟動(dòng)過程中,分解的活動(dòng)對(duì)象彼此之間要發(fā)生信息交互,如圖9所示。
節(jié)點(diǎn)通過通信接口控制對(duì)象啟動(dòng)內(nèi)部模塊,并發(fā)出集群啟動(dòng)的指令(attempt integration),等待接收主冷啟動(dòng)節(jié)點(diǎn)發(fā)出的啟動(dòng)幀。首先,總線接口控制對(duì)象接收到第一個(gè)有效偶數(shù)啟動(dòng)幀(valid even startup frame)后,通知內(nèi)部時(shí)鐘控制對(duì)象集群啟動(dòng);當(dāng)接收下一個(gè)有效奇數(shù)啟動(dòng)幀(valid odd startup frame),并把當(dāng)前啟動(dòng)的狀態(tài)信息發(fā)送給其他的兩個(gè)對(duì)象,在兩通道完成同步幀的接收后,內(nèi)部時(shí)鐘模塊調(diào)用內(nèi)部宏單元計(jì)算頻率和相位偏差,修正內(nèi)部時(shí)鐘使之和主冷啟動(dòng)節(jié)點(diǎn)同步,從而實(shí)現(xiàn)時(shí)鐘同步,并把結(jié)果SyncCalcResult發(fā)送到協(xié)議控制器,后者根據(jù)結(jié)果來決定當(dāng)前節(jié)點(diǎn)的工作狀態(tài)。
4 軟件結(jié)構(gòu)
應(yīng)用量子框架編寫應(yīng)用程序主要有3步:聲明觸發(fā)信號(hào)和事件;定義活動(dòng)對(duì)象(任務(wù));初始化量子框架并開始運(yùn)行活動(dòng)對(duì)象。基本結(jié)構(gòu)如下:
5 結(jié)論
FlexRay是一種支持多種網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),高速可靠,尤其適用于汽車環(huán)境下的總線。其協(xié)議旨在應(yīng)用于需要高通信帶寬和決定性容錯(cuò)數(shù)據(jù)傳輸能力的底盤控制、車身和動(dòng)力總成等場(chǎng)合,有很好的發(fā)展前景;而量子框架則提供了基于有限狀態(tài)機(jī)的實(shí)現(xiàn)技術(shù),能方便地將狀態(tài)圖轉(zhuǎn)化成系統(tǒng)的程序代碼。
責(zé)任編輯:gt
-
嵌入式
+關(guān)注
關(guān)注
5082文章
19104瀏覽量
304815 -
控制系統(tǒng)
+關(guān)注
關(guān)注
41文章
6604瀏覽量
110576 -
總線
+關(guān)注
關(guān)注
10文章
2878瀏覽量
88052
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論