我們先回顧一下之前l(fā)og文件的處理方法,相信大家都會(huì)注意到,離線(xiàn)回放和csv文件的生成這兩個(gè)動(dòng)作彼此是相互獨(dú)立的,也就是說(shuō)離線(xiàn)回放的時(shí)候不能運(yùn)行小程序,而小程序離線(xiàn)處理log文件的時(shí)候又無(wú)法在圖形窗口進(jìn)行繪圖。而今天要介紹的就是TSMaster新增的后處理功能。
它使得小程序可以在回放的全程實(shí)時(shí)起作用,不但能使用用戶(hù)自己的邏輯來(lái)處理每一幀報(bào)文,還能夠在需要的時(shí)候向任意的圖形界面繪制曲線(xiàn)。
增加后處理算法
Add a post-processing algorithm /
> 我們切換到總線(xiàn)回放頁(yè)面,可以看到在文件的列表下方增加了一個(gè)回放的后處理函數(shù)表,在表中點(diǎn)右鍵,選擇第一個(gè)選項(xiàng),選擇后處理函數(shù),點(diǎn)擊后,TSMaster就會(huì)在當(dāng)前的工程自動(dòng)安裝后處理函數(shù)的示例程序,并且彈出一個(gè)函數(shù)選擇框。
> 默認(rèn)有三個(gè)函數(shù),針對(duì)的都是0x50這個(gè)ID,那么第一個(gè)是統(tǒng)計(jì)幀的總數(shù);第二個(gè)是統(tǒng)計(jì)幀與幀之間的最大最小間隔;第三個(gè)是從大的logo file里面過(guò)濾出0x50這個(gè)ID的報(bào)文,并且將這個(gè)報(bào)文另存成一份blf文件,從而起到數(shù)據(jù)篩選的作用。
> 我們將這3個(gè)函數(shù)逐一添加到我們的后處理列表中,添加后就可以看到列表里面有這3個(gè)函數(shù)。如果此時(shí)開(kāi)始回放,就意味著每一幀報(bào)文都會(huì)按順序觸發(fā)這3個(gè)函數(shù)的執(zhí)行。我們看一下剛才的回放記錄,確實(shí)里面并沒(méi)有0x50,而是只有0x64和0xC945,那么這就需要改寫(xiě)一下當(dāng)前的函數(shù)庫(kù)。將0x50這個(gè)ID替換成0x64,可以點(diǎn)中任何一個(gè)函數(shù)點(diǎn)右鍵,選擇編輯按鈕,這樣就打開(kāi)了這個(gè)函數(shù)的實(shí)現(xiàn)。
> 我們找到底下這個(gè)函數(shù),一共有三個(gè)函數(shù),并且把0x50的地方都用0x64進(jìn)行替換,修改后直接按ctrl加F9,重新編譯一下小程序算法庫(kù),那么就相當(dāng)于算法已經(jīng)在系統(tǒng)中更新過(guò)。接下來(lái)我們只要雙擊這個(gè)文件名進(jìn)行回放,或者點(diǎn)擊回放按鈕都可以進(jìn)行回放,那么回放結(jié)束之后就可以看到第一個(gè)函數(shù)統(tǒng)計(jì)出了幀的總數(shù)為327幀,以及0x64的這個(gè)報(bào)文。那么第二個(gè)函數(shù)統(tǒng)計(jì)出了0x64這個(gè)報(bào)文,幀與幀之間的最大和最小的周期。第三個(gè)函數(shù)是個(gè)轉(zhuǎn)存后的blf文件的輸出,它僅僅含有0x64這個(gè)ID。
> 我們可以打開(kāi)工程目錄,就可以看到這個(gè)文件。打開(kāi)記錄文件的轉(zhuǎn)換器,將這個(gè)文件拖入之后點(diǎn)擊convert進(jìn)行轉(zhuǎn)換,就得到一個(gè)轉(zhuǎn)換后的asc文件。打開(kāi)之后就可以看到這個(gè)文件里面就全是0x64這個(gè)ID的報(bào)文。說(shuō)明我們的過(guò)濾是生效的。這樣就可以把一個(gè)很大的log文件進(jìn)行有效的提取。提取出我們所需要的ID再進(jìn)行二次的處理。
監(jiān)控回放信號(hào)
Monitoring playback signal /
倘若我們需要對(duì)回放過(guò)程中的信號(hào)進(jìn)行監(jiān)控,比如說(shuō)需要在曲線(xiàn)中繪制兩個(gè)信號(hào)的乘積,該怎么做呢?
> 首先新建一個(gè)系統(tǒng)變量,起名為v,類(lèi)型設(shè)成double,然后我們可以打開(kāi)一個(gè)新的圖形窗口,拖入我們的這個(gè)變量,再拖入剛才trace里面的其他的信號(hào),比如說(shuō)我們就取gear和engpower這兩個(gè)信號(hào),那么我們希望圖形窗口的這個(gè)v信號(hào)顯示的是gear和engpower的乘積。
> 我們回到離線(xiàn)回放的窗口,將之前的3個(gè)函數(shù)全部刪除,新建一個(gè)函數(shù)?,F(xiàn)在是可以從仿真的c代碼編輯器有一個(gè)postproc函數(shù),再找回我們剛才的3個(gè)函數(shù),點(diǎn)右鍵新增一個(gè)自定義函數(shù),起名為multiply。然后他的參數(shù)可以從前面的任何一個(gè)函數(shù)里面copy,因?yàn)橹挥羞@樣的參數(shù)才能夠被系統(tǒng)自動(dòng)識(shí)別,被識(shí)別成后處理的函數(shù)參數(shù)。
> 函數(shù)體也可以通過(guò)其他的函數(shù)來(lái)復(fù)制,比如說(shuō)我們就選取這個(gè)frame_count復(fù)制到這里來(lái),然后我們可以進(jìn)行一般修改,可以看到這個(gè)函數(shù)有3個(gè)狀態(tài)。分別是回放的起始、回放過(guò)程以及回放的終止。
> 我們只需要在回放過(guò)程里面對(duì)信號(hào)進(jìn)行處理,那么我們操作的報(bào)文是這個(gè)EngineData,點(diǎn)右鍵插入到腳本中,然后可以刪掉沒(méi)用的行,保留這個(gè)EngineData_1。那么將參數(shù)ACANFD復(fù)制到這個(gè)報(bào)文變量中,我們就得到了這個(gè)報(bào)文,包含信號(hào)的報(bào)文的內(nèi)容。
> 然后我們只需要寫(xiě)下一行代碼app.set系統(tǒng)變量,變量名稱(chēng)就是我們剛才的新建的變量,那么它的值就是gear和engpower的乘積,也就是這個(gè).gear乘上engpower,這樣就寫(xiě)好了我們的后處理程序。
> 然后按ctrl加F9進(jìn)行編譯,最后關(guān)閉這個(gè)小程序,注意不是刪除,關(guān)閉就是讓他不可見(jiàn),隨后我們回到總線(xiàn)回放的窗口,點(diǎn)擊右鍵,選擇我們剛才新加的這個(gè)函數(shù)multiply,選擇之后可以看到后處理函數(shù)表就是一個(gè)函數(shù)。
> 然后我們雙擊進(jìn)行回放,回放之后幾乎是一瞬間,我們就得到了兩個(gè)信號(hào)的乘積曲線(xiàn),我們可以通過(guò)Y軸的顯示模式看的更清晰一點(diǎn),就是上面這個(gè)紅色的v信號(hào)。它們是由下方的這個(gè)綠色的信號(hào)以及藍(lán)色的信號(hào)的乘積得到的,那么通過(guò)這個(gè)后處理功能我們就可以實(shí)現(xiàn)幾乎任何可能的后處理的任務(wù)。
以上就是我們本章節(jié)為大家演示的TSMaster的回放后處理功能,讓我么一起期待TSMaster更多的新功能。(其他關(guān)于TSMaster新功能教程視頻可以到B站進(jìn)行觀看哦?。?/strong>
-
后處理系統(tǒng)
+關(guān)注
關(guān)注
0文章
11瀏覽量
2922
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論