我們?cè)谟?strong>CANoe進(jìn)行CAN總線的測(cè)試時(shí),會(huì)發(fā)現(xiàn)CAN報(bào)文的發(fā)送類型有很多種,有些類型不太容易理解,有些類型之間又容易混淆,一不小心就會(huì)用錯(cuò),今天我們就來(lái)介紹下CAN報(bào)文的發(fā)送類型。
CAN報(bào)文的發(fā)送類型分為基本發(fā)送類型和混合發(fā)送類型兩大類。
基本發(fā)送類型包括Cyclic周期發(fā)送、OnChange變化時(shí)發(fā)送、OnWrite寫入時(shí)發(fā)送和IfActive有效時(shí)發(fā)送。
基本發(fā)送類型中的Cyclic稱為周期型,而其他3個(gè)類型稱為事件型(event)。
混合發(fā)送類型就是指基本類型中的周期型與事件型的組合,包括Cyclic and OnChange、Cyclic and OnWrite、Cyclic and IfActive。
1.基本發(fā)送類型
1.1
Cyclic周期發(fā)送
周期發(fā)送是指報(bào)文獨(dú)立于信號(hào),按照固定的周期發(fā)送,也就是報(bào)文的發(fā)送與報(bào)文中的信號(hào)變化沒(méi)有關(guān)系。
周期性發(fā)送報(bào)文是我們最常用的報(bào)文,這類報(bào)文中包含的通常都是需要經(jīng)常使用或者變化頻率較高的信號(hào),比如車速、轉(zhuǎn)速等信號(hào)。
如上圖示例所示,ID為201的報(bào)文按照200ms的固定周期發(fā)送車速信號(hào),車速信號(hào)在這個(gè)期間會(huì)有些變化,從52->51->52->53>,但是無(wú)論信號(hào)如何變化,報(bào)文周期都是6.8-6.6=7.0-6.8=7.2-7.0=200ms。
周期型報(bào)文就像大城市的公交汽車,報(bào)文中的信號(hào)就像是乘車的人員,一旦公交汽車發(fā)車周期確定了,比如10分鐘,則每間隔10分鐘都會(huì)有一輛車從始發(fā)站啟動(dòng)后發(fā)出,無(wú)論車上有幾個(gè)人,都會(huì)按時(shí)發(fā)送。
周期型報(bào)文(公交車)按固定時(shí)間發(fā)送,即使信號(hào)為0(空車)也要發(fā)送
1.2
OnChange變化時(shí)發(fā)送
變化時(shí)發(fā)送是指當(dāng)報(bào)文中的信號(hào)變化時(shí),報(bào)文才會(huì)發(fā)送。
這類報(bào)文中包含的通常都是變化頻率不高的信號(hào),比如通過(guò)中控屏進(jìn)行的按鍵調(diào)節(jié)信號(hào),OnChange報(bào)文的目的是為了節(jié)省總線資源。
OnChange變化時(shí)發(fā)送報(bào)文示例
如上圖示例所示,ID為368的報(bào)文為OnChange變化時(shí)發(fā)送的報(bào)文,假如當(dāng)前的背光亮度為30,此時(shí)總線上沒(méi)有368報(bào)文;
此時(shí)通過(guò)中控屏的觸摸按鍵將背光設(shè)置改為32,則中控屏?xí)l(fā)出一幀ID為368,背光信號(hào)為32的報(bào)文。
1.3
OnWrite寫入時(shí)發(fā)送
寫入時(shí)發(fā)送是指當(dāng)報(bào)文中的信號(hào)被重新寫入時(shí),報(bào)文才會(huì)發(fā)送。這里的重新寫入主要是指在測(cè)試軟件中對(duì)信號(hào)的重新設(shè)置寫入,在ECU中也可以認(rèn)為是應(yīng)用層對(duì)底層通信信號(hào)的寫入。
OnWrite與OnChange的主要區(qū)別是OnWrite重新寫入不一定就是數(shù)值的改變,也可以保持不變。
還是以中控屏的背光設(shè)置為例,比如背光原來(lái)為30,可以再次設(shè)置為32,設(shè)置后又繼續(xù)設(shè)置了兩次,但都是32,并沒(méi)有改變這個(gè)值。
OnWrite寫入時(shí)發(fā)送報(bào)文示例
以上示例中,最后兩幀的背光信號(hào)都是32,對(duì)比第2幀并沒(méi)有改變,但是中控屏依然會(huì)發(fā)出這兩幀,因?yàn)槎际?strong>寫入的操作。
這里要注意的是發(fā)送時(shí)間都是實(shí)時(shí)隨機(jī)的時(shí)間(中控按鍵確認(rèn)的時(shí)間),并沒(méi)有固定發(fā)送周期。
1.4
IfActive有效時(shí)發(fā)送
有效時(shí)發(fā)送是指當(dāng)報(bào)文中的信號(hào)為有效值時(shí),報(bào)文會(huì)以一個(gè)快速的周期(cycle time fast)發(fā)送,當(dāng)信號(hào)變?yōu)?strong>無(wú)效時(shí),報(bào)文就不再發(fā)送。
無(wú)效值Inactive Value也就是默認(rèn)值,比如BCM的報(bào)文ID是380,其中的DoorOpen門開信號(hào)的無(wú)效值是0,表示門關(guān),有效值是1表示門開,快速周期為100ms。
開始狀態(tài)為門關(guān),總線上沒(méi)有報(bào)文,當(dāng)門開有效,即門開信號(hào)為1時(shí),380報(bào)文立即以100ms為周期發(fā)送報(bào)文;當(dāng)門關(guān)后,即門開信號(hào)為0時(shí),報(bào)文立即停發(fā)。
IfActive有效時(shí)發(fā)送報(bào)文示例
以上示例中,報(bào)文是以快速周期100ms發(fā)送的,不發(fā)送時(shí)就表示門開信號(hào)為0(無(wú)效)。
OnChange、OnWrite和IfActive都屬于事件型報(bào)文,這類報(bào)文就像在出租車站點(diǎn)等待的出租車,沒(méi)人打車的時(shí)候不需要上路,只有乘客打車時(shí)才會(huì)上路,否則大量的空載出租車在道路上行駛,不僅沒(méi)有作用,反而容易擠占道路資源,造成道路擁擠。
事件型報(bào)文(出租車)沒(méi)有信號(hào)觸發(fā)(無(wú)人打車)時(shí)不需要發(fā)出
1.5 Repetitions重復(fù)發(fā)送參數(shù)
對(duì)于基本型中的OnChange、OnWrite來(lái)說(shuō),它們雖然不是周期發(fā)送,但是并不是說(shuō)只能發(fā)一次,也可以發(fā)送多次。對(duì)于IfActive來(lái)說(shuō),也可以按快速周期發(fā)送的同時(shí)限制發(fā)送次數(shù)。而發(fā)送次數(shù)是通過(guò)定義Repetitions重復(fù)次數(shù)來(lái)實(shí)現(xiàn)的。
所以基本型中又衍生出3個(gè)子類型OnChangeWithRepetition、OnWriteWithRepetition和IfActiveWithRepetition。
比如在OnChangeWithRepetition子類型中,如果設(shè)置了Repetitions=3,則報(bào)文會(huì)連續(xù)發(fā)送三次,三次之間的時(shí)間不小于最小報(bào)文發(fā)送的延遲時(shí)間Delay time。
注意連續(xù)發(fā)送報(bào)文的時(shí)間間隔都比較短,但是也不能小于最小報(bào)文發(fā)送的延遲時(shí)間Delay time,示例中的間隔為100ms。
再比如在IfActiveWithRepetition子類型中,Repetitions=2,快速發(fā)送周期cycle time fast=100ms,則報(bào)文只發(fā)送兩幀。
IfActiveWithRepetition示例
注意此時(shí)報(bào)文的發(fā)送周期是按照cycle time fast快速周期時(shí)間100ms發(fā)送,雖然與上面的間隔時(shí)間100ms相等,但是含義不同。
2.混合型
2.1
Cyclic and OnChange
周期和變化時(shí)發(fā)送是指報(bào)文平時(shí)是周期性發(fā)送,當(dāng)報(bào)文中的信號(hào)變化時(shí),此報(bào)文會(huì)額外的發(fā)送一次,原來(lái)的周期不變。
Cyclic
and OnChange示例
如上圖示例所示,其中的第3幀就是額外發(fā)送的幀,它的發(fā)送時(shí)間為6.920s,是個(gè)實(shí)時(shí)的隨機(jī)時(shí)間,不是按照周期發(fā)送的。
2.2 Cyclic
and OnWrite
周期和寫入時(shí)發(fā)送是指報(bào)文平時(shí)是周期性發(fā)送,當(dāng)報(bào)文中的信號(hào)被重新寫入時(shí),此報(bào)文會(huì)額外的發(fā)送一次,原來(lái)的周期不變。
如上圖示例所示,其中的第3幀和第5幀就是寫入時(shí)額外發(fā)送的幀,它們的發(fā)送時(shí)間分別為6.920s和7.110s,都是實(shí)時(shí)的隨機(jī)時(shí)間,不是按照周期發(fā)送的。
注意第5幀的重新寫入數(shù)據(jù)仍然是32,沒(méi)有改變,這也是OnWrite與OnChange的主要區(qū)別。
2.3
Cyclic and IfActive
周期和有效時(shí)發(fā)送是指報(bào)文平時(shí)是按正常周期cyclic time發(fā)送,當(dāng)報(bào)文中的信號(hào)為有效值時(shí),報(bào)文會(huì)按IfActive報(bào)文的快速周期cyclic time fast發(fā)送,等到信號(hào)變?yōu)闊o(wú)效值時(shí),報(bào)文又會(huì)恢復(fù)到原來(lái)的正常周期發(fā)送。
如上圖示例所示,其中前4幀是按正常周期1s發(fā)送,信號(hào)為無(wú)效值0;從第5幀開始,當(dāng)信號(hào)變?yōu)橛行е?時(shí),則按照快速周期100ms發(fā)送,所以中間4幀是快速發(fā)送。后面4幀,信號(hào)又恢復(fù)為無(wú)效值0,周期也恢復(fù)為正常周期1s。
快速周期時(shí)間 cycle time fast這個(gè)參數(shù)僅在IfActive及其組合的類型中使用。
混合型的報(bào)文就像旅游景點(diǎn)的接駁班車,平時(shí)人少時(shí)(基本不變),可以慢周期發(fā)車;等到節(jié)假日乘客突然很多(變化)時(shí)就臨時(shí)改為快速發(fā)車。這樣平時(shí)可以較少的占用道路資源,假日期間又可以解決臨時(shí)客流量大的問(wèn)題。
混合型的報(bào)文(接駁班車)發(fā)送周期平時(shí)慢,緊急時(shí)快
信號(hào)觸發(fā)(人流量變化)時(shí)需要快速的把消息發(fā)送出去
3應(yīng)用實(shí)例
在實(shí)際使用時(shí),有些信號(hào)涉及到相互同步的問(wèn)題,比如儀表和中控的背光設(shè)置。
傳統(tǒng)產(chǎn)品中,儀表的按鍵可以設(shè)置儀表屏的背光亮度,中控按鍵可以設(shè)置中控屏的背光亮度。在智能座艙的架構(gòu)中,希望儀表和中控的背光能一體化聯(lián)動(dòng),同步變化。也就是通過(guò)儀表或中控都可以設(shè)置車內(nèi)屏幕的統(tǒng)一亮度,這時(shí)就需要儀表和中控信號(hào)同步,互相發(fā)送背光亮度信息。
如果儀表和中控都按周期報(bào)文發(fā)送,兩者是可以實(shí)時(shí)同步,一方發(fā)現(xiàn)對(duì)方的需求與自己不同時(shí),與對(duì)方同步即可。
但這種方式也有缺點(diǎn),就是對(duì)軟件處理的時(shí)序要求很高,比如在中控系統(tǒng)上進(jìn)行手動(dòng)設(shè)置后,在中控發(fā)出新的報(bào)文給儀表時(shí),儀表在未收到新報(bào)文前已經(jīng)將包含舊數(shù)值的報(bào)文發(fā)給中控系統(tǒng),而中控系統(tǒng)誤以為這個(gè)舊報(bào)文是儀表的新設(shè)置,就會(huì)導(dǎo)致儀表和中控兩者不停地向?qū)Ψ酵剑萑?strong>死循環(huán),背光一直在跳變,無(wú)法達(dá)成穩(wěn)定狀態(tài)。
這種情況要求軟件上必須在數(shù)據(jù)變化發(fā)送時(shí)做對(duì)方報(bào)文的延時(shí)處理,也就是短時(shí)間內(nèi)不接收對(duì)方的報(bào)文,以防止被對(duì)方舊的數(shù)據(jù)干擾。
還有一種簡(jiǎn)化的方法就是一方為周期型發(fā)送,另一方為事件型發(fā)送。比如儀表(假設(shè)ID=350)為周期發(fā)送,發(fā)送周期為500ms;中控為OnChange有變化時(shí)發(fā)送,變化時(shí)重復(fù)發(fā)送3幀,則報(bào)文如下:
儀表中控背光同步發(fā)送由上圖示例可知:
1-4幀為儀表發(fā)送的周期幀,周期為500ms,背光為30;
5、6、7三幀為中控發(fā)送的事件幀,連續(xù)發(fā)了三幀,間隔為100ms,背光改為32;
8、9幀為儀表收到中控發(fā)來(lái)的事件型報(bào)文后,同步更新自身的背光亮度值后發(fā)出的周期幀,周期仍然是500ms。
這種方式將儀表的背光信號(hào)定為周期型發(fā)送,可以保證較好的同步實(shí)時(shí)性,將中控定為事件型方式發(fā)送,可以避免兩者進(jìn)入死循環(huán)的可能。但是中控會(huì)有被儀表的舊信號(hào)覆蓋的可能,所以中控中仍需要做報(bào)文的延時(shí)處理,但是整體上來(lái)看,這種方式風(fēng)險(xiǎn)更低、處理更簡(jiǎn)單。
小結(jié):
CAN總線的報(bào)文發(fā)送類型主要包括周期型和事件型,周期型就是按照固定周期發(fā)送,與具體發(fā)送的信號(hào)無(wú)關(guān)。事件型不按周期發(fā)送,是按照信號(hào)的特點(diǎn)發(fā)送,具體分為信號(hào)變化時(shí)發(fā)送、信號(hào)寫入時(shí)發(fā)送和信號(hào)有效時(shí)發(fā)送。周期型與事件型還可以分別組合成混合型。
周期型的特點(diǎn)是穩(wěn)定、可靠,實(shí)時(shí)同步效果好,但占用總線資源多;事件型的同步效果沒(méi)那么好,但是占用總線資源少!
聯(lián)系客服