前言
TSMaster近日更新了五大模塊的新功能,主要包含網(wǎng)絡(luò)仿真中的checksum和rolling counter的本地化支持、J1939多幀報(bào)文收發(fā)、MATLAB自動(dòng)化控制模塊等等。小編接下來(lái)將在之后推文中給大家以圖文教程的形式一一講解。
今天介紹TSMaster的新功能—網(wǎng)絡(luò)仿真中的checksum和rolling counter的本地化支持,該功能可以輕松做到不寫(xiě)一行代碼就可以實(shí)現(xiàn)帶checksum和rc的網(wǎng)絡(luò)仿真。
舊版本 VS 新版本
Old VS New version /
舊版本
首先回顧一下舊的方法,也就是使用小程序?qū)γ總€(gè)信號(hào)進(jìn)行模擬,打開(kāi)這個(gè)示例隨后按F5啟動(dòng)仿真,就可以看到不斷遞增的rolling counter,也就是藍(lán)色的這個(gè)三角波。
我們展開(kāi)trace,從中把這個(gè)checksum拖到圖形窗口中,就可以觀察checksum的實(shí)時(shí)曲線。再看我們的小程序代碼,在pretx的回調(diào)函數(shù)中,需要寫(xiě)程序來(lái)直接控制checksum和rolling counter的信號(hào),倘若涉及到大型的網(wǎng)絡(luò)仿真,那么就需要花費(fèi)大量的時(shí)間,每個(gè)信號(hào)進(jìn)行逐個(gè)處理容易出錯(cuò),同時(shí)也會(huì)帶來(lái)效率的問(wèn)題。
新版本
新功能則不需要手動(dòng)處理每個(gè)信號(hào),我們來(lái)新建一個(gè)工程試一試。打開(kāi)工程-工程目錄,找到TSMaster的安裝包自帶的示例數(shù)據(jù)庫(kù)。例如powertrain,我們將它拖入,可以看到數(shù)據(jù)庫(kù)已經(jīng)載入。
我們選擇一幀報(bào)文,以ABS data為例,可以看到這個(gè)報(bào)文并沒(méi)有checksum和rc,我們需要修改數(shù)據(jù)庫(kù)給他加上這兩個(gè)信號(hào),點(diǎn)擊編輯按鈕,打開(kāi)數(shù)據(jù)庫(kù)編輯器,我們新建兩個(gè)信號(hào),分別命名為ABS checksum。checksum一般是8位的無(wú)符號(hào),然后還有一個(gè)是ABS。rc一般是4位無(wú)符號(hào),再將這兩個(gè)信號(hào)拖入ABS data這個(gè)報(bào)文里面,隨后我們打開(kāi)這個(gè)報(bào)文的配置窗口,將dlc改為8,切換到layout。
我們可以將我們新建的rc拖動(dòng)到合適的位置,接下去是設(shè)定checksum的位置,這是我們新增的checksum信號(hào),由于checksum是保護(hù)報(bào)文的數(shù)據(jù)內(nèi)容的,一般位于報(bào)文的第一個(gè)字節(jié)或者是最后一個(gè)字節(jié)。在這里我們把這個(gè)信號(hào)拖到最后一個(gè)字節(jié),這意味著保護(hù)的范圍是從0到6字節(jié),點(diǎn)擊確定,再點(diǎn)擊保存,再點(diǎn)擊關(guān)閉。可以看到TSMaster會(huì)自動(dòng)刷新所編輯的數(shù)據(jù)庫(kù)。
這時(shí)候我們展開(kāi)報(bào)文,選擇abs data,切換到布局窗口,我們就可以看到我們新增的兩個(gè)信號(hào),一個(gè)是rolling counter,在52-55位之間;另外一個(gè)是checksum,在56-63之間。新增的checksum和rc已經(jīng)按照我們的要求設(shè)置成功了。
checksum和rc的本地化支持
localization support for checksum & rc /
>關(guān)閉數(shù)據(jù)庫(kù)編輯器,切換到仿真,打開(kāi)rbs窗口,雙擊激活engine節(jié)點(diǎn),設(shè)置為自啟動(dòng)仿真,隨后按下F5啟動(dòng)仿真,這就可以讓rbs來(lái)仿真engine這個(gè)節(jié)點(diǎn)的所有報(bào)文。
切換到分析,打開(kāi)trace窗口,展開(kāi)abs data報(bào)文,可以看到我們新增的rc和checksum都是默認(rèn)的0,這時(shí)候就需要進(jìn)行配置,回到rbs窗口,在rc信號(hào)上點(diǎn)擊右鍵,設(shè)置它為rolling counter信號(hào),設(shè)置將會(huì)立即生效,可以看到rolling counter在變化。
>接著打開(kāi)一個(gè)圖形窗口,把rc拖入圖形就可以看到鋸齒波,說(shuō)明rc已經(jīng)生效,接下來(lái)就要配置checksum。由于checksum涉及到crc算法庫(kù)的安裝和編輯,這個(gè)信號(hào)是不能夠?qū)崟r(shí)的去配置它的,所以我們先按F6停止仿真,再在checksum信號(hào)上右擊選擇設(shè)為checksum信號(hào),那么第一次設(shè)置會(huì)看到系統(tǒng)會(huì)安裝默認(rèn)的crc的算法庫(kù),并且在安裝成功后會(huì)彈出crc算法列表。
我們可以隨便選一個(gè)算法比如說(shuō)crc 8。這個(gè)時(shí)候我們就已經(jīng)成功的將crc 8的算法和這個(gè)checksum信號(hào)產(chǎn)生了關(guān)聯(lián)。此時(shí)還有一個(gè)配置項(xiàng)需要確認(rèn),那就是這個(gè)checksum信號(hào)的保護(hù)范圍,默認(rèn)是從0字節(jié)開(kāi)始,保護(hù)后面7個(gè)字節(jié),那么這是可以隨時(shí)更改。我們可以點(diǎn)擊右鍵,選擇編輯crc算法參數(shù),就可以看到已經(jīng)配置過(guò)的crc信號(hào)表。
那么雙擊這個(gè)表里面任何一個(gè)信號(hào),還可以繼續(xù)修改他關(guān)聯(lián)的crc算法,這個(gè)時(shí)候我們先不修改算法,我們只需要知道這個(gè)窗口是可以更改保護(hù)的字節(jié)起始以及保護(hù)的字節(jié)數(shù)就可以了。那么我們現(xiàn)在先點(diǎn)擊確認(rèn),然后我們?cè)俅伟聪翭5啟動(dòng)仿真,展開(kāi)abs data報(bào)文,我們就可以看到checksum已經(jīng)在刷新了。
>我們把這個(gè)信號(hào)拖到圖形窗口中,就可以看到了checksum的實(shí)時(shí)曲線,而一般情況下,checksum的算法都是公司自定義的,我們完全可以改寫(xiě)默認(rèn)的crc的算法庫(kù)來(lái)做到這一點(diǎn)。點(diǎn)擊仿真-小程序庫(kù),可以看到默認(rèn)的crc的算法庫(kù)也不過(guò)就是一個(gè)小程序庫(kù)而已,他提供了21個(gè)默認(rèn)的算法。
我們可以在c代碼編輯器中找到這個(gè)算法庫(kù)的源代碼,注意的是這個(gè)小程序是以庫(kù)文件的方式提供的,是沒(méi)有獨(dú)立的啟動(dòng)和停止按鈕的,我們?cè)诖酥贫ㄒ粋€(gè)crc算法。點(diǎn)右鍵添加自定義函數(shù)取名為mycrc,參數(shù)表可以隨便選一個(gè)copy,然后我們可以把現(xiàn)有的算法的內(nèi)容抄進(jìn)來(lái)。比如說(shuō)這個(gè)crc8,然后在這個(gè)基礎(chǔ)上進(jìn)行修改,我們可以隨意的改,比如說(shuō)將這個(gè)poly = 0x17,如果要想把我們新的這個(gè)函數(shù)安裝到系統(tǒng)中,只需要編譯這個(gè)算法庫(kù)就可以,當(dāng)然編譯的過(guò)程需要保證。
首先要停止仿真,因?yàn)楫?dāng)前的這個(gè)算法庫(kù)依然在被rbs引擎使用,此時(shí)我們?cè)冱c(diǎn)擊編譯就可以看到編譯成功,并且已經(jīng)自動(dòng)安裝到我們的系統(tǒng)中。
如何實(shí)現(xiàn)實(shí)時(shí)曲線
How to achieve real-time curves /
我們打開(kāi)總線仿真,在這個(gè)信號(hào)上點(diǎn)右鍵,重新選擇一下crc算法,選擇我們的mycrc,就可以關(guān)聯(lián)成功。然后我們按F5啟動(dòng)仿真切換到圖形窗口,就可以看到不一樣的checksum的實(shí)時(shí)曲線,這是因?yàn)檫@個(gè)整個(gè)報(bào)文里面就只有rolling counter的一個(gè)信號(hào)在變化,所以這個(gè)checksum的信號(hào)的曲線具有一定的規(guī)律,那么同時(shí)我們也可以讓其他的信號(hào)也動(dòng)起來(lái),這該怎么做呢?
1、手動(dòng)設(shè)置方法
最快的一種是使用發(fā)送窗口的信號(hào)生成器。我們可以首先在rbs窗口中將這個(gè)報(bào)文的周期改為0,那這樣的話rbs就不會(huì)自動(dòng)發(fā)送這個(gè)報(bào)文,然后我們切換到發(fā)送窗口,點(diǎn)擊添加來(lái)自數(shù)據(jù)庫(kù)的報(bào)文,選擇我們的abs data,我們點(diǎn)擊發(fā)送,然后切換到圖形窗口,就可以看到跟之前一樣的曲線。這是新功能的強(qiáng)大之處,也就是不管該報(bào)文在系統(tǒng)的哪個(gè)模塊被發(fā)出,只要rbs是激活狀態(tài),報(bào)文的checksum和rolling counter就能夠被正確配置。
接下來(lái)我們可以激勵(lì)其中的其他信號(hào),比如說(shuō)carspeed這個(gè)信號(hào),我們可以將生成器選擇為正弦波,配置偏移量為150,因?yàn)樗姆秶?到300,然后點(diǎn)擊應(yīng)用關(guān)閉,點(diǎn)擊啟動(dòng)生成,這個(gè)時(shí)候就可以看到checksum發(fā)生了變化,這時(shí)候我們把carspeed拖進(jìn)來(lái),就可以看到所有信號(hào)的實(shí)時(shí)曲線。這時(shí)候的checksum就顯示出了無(wú)規(guī)則的變化,這是因?yàn)橥瑫r(shí)有了兩個(gè)信號(hào)在變化,那么以上就是checksum和rolling counter的手動(dòng)設(shè)置方法。
2、自動(dòng)設(shè)置方法
我們還可以通過(guò)小程序API來(lái)做到自動(dòng)設(shè)置,首先可以清空這兩個(gè)信號(hào)的配置,只要在上面點(diǎn)擊右鍵,選擇設(shè)為普通信號(hào),那這兩個(gè)信號(hào)就不再具有功能,可以看到這兩個(gè)信號(hào)就變成了默認(rèn)的值,然后我們可以打開(kāi)自動(dòng)化模塊,新增一個(gè)函數(shù)調(diào)用,搜rc可以從中找到跟rolling counter有關(guān)的就是這個(gè)can rbs set rc Signal。他只有一個(gè)傳入?yún)?shù),就是信號(hào)的數(shù)據(jù)庫(kù)地址。接著我們到總線仿真里面,把這個(gè)rc信號(hào)頂右鍵的數(shù)據(jù)庫(kù)地址拷貝過(guò)來(lái),這樣就實(shí)現(xiàn)了這個(gè)信號(hào)的設(shè)置。
那么我們可以再增加一個(gè)函數(shù)調(diào)用,按回車(chē)新建一個(gè)新的動(dòng)作,然后我們選擇crc相關(guān)的函數(shù),那么可以看到這個(gè)函數(shù)名叫set crc Signal,他有4個(gè)參數(shù)。第一個(gè)也是信號(hào)地址,我們就如法炮制,選擇checksum的數(shù)據(jù)庫(kù)地址,填入后第二個(gè)就是算法的名稱(chēng),那這個(gè)名稱(chēng)其實(shí)就是剛才我們所選的mycrc,那么在這個(gè)前面需要加上小程序的前綴,所以是crc.mycrc。那么小程序可以看到他的名稱(chēng)是crc,所以只需要把這個(gè)這個(gè)名稱(chēng)加上點(diǎn),再加上函數(shù)名抄過(guò)來(lái)就可以了,然后他所保護(hù)的字節(jié)起始是從第0個(gè)字節(jié)開(kāi)始,往后保護(hù)7個(gè)字節(jié),那么這樣就算設(shè)置完畢。
以上就是本次發(fā)布的新功能的全部用法,我們下期再見(jiàn)!(具體操作步驟詳情可直接觀看我們的B站視頻哦~)
-
仿真
+關(guān)注
關(guān)注
50文章
4124瀏覽量
133993
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論