王軍1,2,曾獻輝1,2
(1. 東華大學(xué) 信息科學(xué)與技術(shù)學(xué)院,上海 201620; 2.數(shù)字化紡織服裝技術(shù)教育部工程研究中心,上海 201620)
摘要:RS-485總線與CAN總線是工業(yè)現(xiàn)場數(shù)據(jù)采集最常用的有線組網(wǎng)方式,它們均有各自的局限性。針對一類多節(jié)點網(wǎng)絡(luò)的數(shù)據(jù)實時采集問題,提出了基于主控同步的CAN總線多點實時數(shù)據(jù)采集技術(shù),將RS485總線主控思想應(yīng)用于CAN總線的數(shù)據(jù)通信中,通過對各節(jié)點發(fā)送數(shù)據(jù)時間的同步,有效地避免了節(jié)點間數(shù)據(jù)沖突問題。實驗結(jié)果證明了該方案能有效地提高數(shù)據(jù)傳輸?shù)?a class="innerlink" href="http://ihrv.cn/tags/實時性" title="實時性" target="_blank">實時性和可靠性,解決了CAN總線訪問沖突。
關(guān)鍵詞:數(shù)據(jù)采集;CAN總線;主控同步;實時性
0引言
現(xiàn)場數(shù)據(jù)采集一般有CAN總線與RS485總線[1]兩種有線組網(wǎng)方式,但是RS485采用主從多址輪詢的方式,實現(xiàn)多址接入,輪詢周期隨著節(jié)點數(shù)量的增大而加長,影響數(shù)據(jù)傳輸?shù)膶崟r性。而CAN總線是一種有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò),它可靠性高,且網(wǎng)絡(luò)內(nèi)的節(jié)點個數(shù)在理論上不受限制,各節(jié)點之間實現(xiàn)自由通信。CAN總線[2-3]具有多主發(fā)送、采用確定性的優(yōu)先級仲裁機制等特點,保證了CAN總線數(shù)據(jù)通信的可靠性、實時性和靈活性。在數(shù)據(jù)通信過程中,如果出現(xiàn)碰撞,低優(yōu)先級的節(jié)點會主動退出,而最高優(yōu)先級的節(jié)點可以不受影響繼續(xù)傳輸數(shù)據(jù),從而大大節(jié)省了總線訪問沖突[45]仲裁時間,保證了傳輸數(shù)據(jù)的實時性。但是,在數(shù)據(jù)采集這種特殊環(huán)境下,由于各個節(jié)點的數(shù)據(jù)的優(yōu)先級都是相同的,因此本文在標(biāo)準(zhǔn)CAN總線的基礎(chǔ)上,結(jié)合RS485的工作模式,提出了基于主控同步的CAN總線多點實時數(shù)據(jù)采集技術(shù),它可以解決數(shù)據(jù)采集過程中總線沖突的問題,提高數(shù)據(jù)傳輸?shù)目煽啃耘c實時性。
1RS-485工作模式
RS-485是半雙工的工作模式,任何時候只能有一點處于發(fā)送狀態(tài),它采用主從式多址輪詢方式實現(xiàn)多址接入,也就是說所有的節(jié)點共用一條總線,主節(jié)點按照地址依次輪流查詢各個從節(jié)點,被查詢的從節(jié)點返回數(shù)據(jù)或者空操作。由此可以看出,隨著節(jié)點的增多,輪詢的周期也會變長,這對數(shù)據(jù)的實時性傳輸具有很大的影響。RS-485的網(wǎng)絡(luò)結(jié)構(gòu)示意圖如圖1所示。
2CAN總線協(xié)議和仲裁機制
CAN是一種有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò),CAN總線具有多主發(fā)送、采用確定性的優(yōu)先級仲裁機制等特點,保證了CAN總線數(shù)據(jù)通信[6-7]的可靠性、實時性和靈活性。CAN總線的網(wǎng)絡(luò)結(jié)構(gòu)示意圖如圖2所示。
報文信號使用差分電壓[8]傳送,可以提高CAN總線傳輸數(shù)據(jù)的可靠性和傳輸距離。兩條信號線分別為CANH與CANL。這兩根線之間的電位差可以對應(yīng)兩個不同的邏輯狀態(tài)進行編碼。如果CANH-CANL>2,此時狀態(tài)表示為邏輯 0,也可以叫作顯性。如果CANH-CANL=0,此時狀態(tài)表示為邏輯1,也可以叫作隱性。當(dāng)總線上2個不同節(jié)點在同一位時間分別強加顯性和隱性時,總線上呈現(xiàn)顯性位,即顯性位可以覆蓋修改隱性位。電平標(biāo)稱值如圖3所示。
在數(shù)據(jù)傳輸過程中,如果出現(xiàn)碰撞,低優(yōu)先級的節(jié)點會主動退出,而最高優(yōu)先級的節(jié)點可以不受影響繼續(xù)傳輸數(shù)據(jù),從而大大節(jié)省了總線沖突仲裁時間,保證了傳輸數(shù)據(jù)的實時性。但是這種靜態(tài)優(yōu)先級機制[9-10]的一個缺點就是不能均等地為高優(yōu)先級和低優(yōu)先級站點分配帶寬,在網(wǎng)絡(luò)負載很大時,低優(yōu)先級站點會在多次競爭總線使用權(quán)時失敗,從而導(dǎo)致低優(yōu)先級站點消息傳輸產(chǎn)生不確定的延時,甚至無法發(fā)送。而在數(shù)據(jù)采集的環(huán)境下,各個節(jié)點采集到的數(shù)據(jù)沒有優(yōu)先級之分,所以CAN總線的靜態(tài)優(yōu)先級機制對于數(shù)據(jù)采集來說并不是最好的機制。
3主控同步的CAN總線
CAN總線的特點之一就是多主發(fā)送,各個站點在任何時候都可以隨機發(fā)送數(shù)據(jù),如果在某一個時刻有2個或2個以上的站點要發(fā)送數(shù)據(jù),就要通過非破壞性仲裁機制進行仲裁來競爭總線的使用權(quán),標(biāo)識符數(shù)值小的站點即優(yōu)先級較高的站點可以獲得總線使用權(quán),競爭失敗的站點則需等待下次重新競爭。在數(shù)據(jù)采集中,每個節(jié)點的優(yōu)先級都是相同的,所以本文提出了主控同步的CAN總線多點實時數(shù)據(jù)采集技術(shù),流程圖如圖4所示。
RS-485是主從結(jié)構(gòu),采用主從輪詢的方式,主節(jié)點依次詢問每個從節(jié)點。主從同步的CAN總線就是將主控節(jié)點應(yīng)用在CAN總線上。
3.1靜態(tài)主控同步CAN總線
靜態(tài)主控同步CAN總線就是對CAN總線上的所有節(jié)點進行編號分別為1,2,3,…,n,所有節(jié)點都發(fā)送1次數(shù)據(jù)的時間稱為周期T,每個節(jié)點發(fā)送數(shù)據(jù)時間為t=T/n,主控節(jié)點可以控制開始發(fā)送數(shù)據(jù)的時間,在總線空閑時,總線廣播一次,此時可以發(fā)送數(shù)據(jù),然后所有節(jié)點依次在自己規(guī)定的時間發(fā)送數(shù)據(jù),第一個節(jié)點發(fā)送數(shù)據(jù)的時間為0-T/n,如果它的數(shù)據(jù)沒有發(fā)送完就停止發(fā)送,則在T/n時刻第二個節(jié)點開始發(fā)送數(shù)據(jù),在2T/n時刻第三個節(jié)點發(fā)送數(shù)據(jù),以此類推下去,直到最后個節(jié)點發(fā)送完數(shù)據(jù),只要保證T/n合適,就可以讓每個節(jié)點順利地傳輸數(shù)據(jù)。每個節(jié)點發(fā)送數(shù)據(jù)的時刻與時間段如圖5所示。
CAN總線上的節(jié)點并不一定都是同時在線或者不在線,有可能突然故障或者斷線,也有可能突然上線,這樣節(jié)點發(fā)送數(shù)據(jù)就容易產(chǎn)生沖突。所以規(guī)定每個節(jié)點都是T/n的時間,不管該節(jié)點是否在線都占用T/n的時間段,以此來避免某個節(jié)點上線或者下線產(chǎn)生沖突。這是最簡單的也是最容易實現(xiàn)的結(jié)構(gòu),雖然提高了數(shù)據(jù)傳輸?shù)目煽啃?,但是會浪費時間,不管幾個節(jié)點在線都需要一個周期T的時間才能進行下次數(shù)據(jù)的發(fā)送,傳輸?shù)男什桓撸瑢?shù)據(jù)的實時性有一定的影響。
3.2動態(tài)主控同步CAN總線
由于靜態(tài)主控同步的缺陷性,在其基礎(chǔ)上本文又提出動態(tài)主控同步CAN總線來提高數(shù)據(jù)發(fā)送的實時性。在CAN總線初始化的時候,所有在線節(jié)點給主控節(jié)點報告自己在線的信息,此時,主控節(jié)點知道總線中所有節(jié)點的狀態(tài),然后將所有節(jié)點狀態(tài)廣播給每個節(jié)點。總線上所有上下線的節(jié)點如圖6所示。
假如此時3和4號節(jié)點未上線,其余都正常上線且不會突然下線,那么,1號和2號正常發(fā)送數(shù)據(jù),5號節(jié)點在2t~3t時間段內(nèi)發(fā)送數(shù)據(jù),其余的依次類推,則所有節(jié)點發(fā)完一次數(shù)據(jù)的時間為T-2t,比靜態(tài)主控同步少了2t,總線的周期從T變成了T-2t,提高了數(shù)據(jù)傳輸?shù)膶崟r性。w是每個上線節(jié)點給主控節(jié)點匯報所需要的時間,V=Xw,X是不在線節(jié)點的個數(shù),Y為在線節(jié)點的個數(shù),X+Y=n,Y×t=T1。在實際情況中不可避免地會出現(xiàn)某些節(jié)點(假如節(jié)點5)突然下線的情況,如圖7所示。
此時如果節(jié)點5突然從在線變成下線,所有節(jié)點收到的廣播還是只有3和4不在線,其余都在線,那么5號節(jié)點仍會占用一個t,6號節(jié)點仍然在第4個時間段t發(fā)送數(shù)據(jù),保證了所有節(jié)點都可以按照自己的編號依次發(fā)送數(shù)據(jù),當(dāng)所有在線節(jié)點發(fā)送完數(shù)據(jù)后,主控節(jié)點根據(jù)收到的數(shù)據(jù)就可以判斷哪些節(jié)點(例如5號節(jié)點)中途下線,然后將這些信息再廣播到總線,之后其余在線節(jié)點就可以調(diào)節(jié)自己發(fā)送數(shù)據(jù)的時刻,那些下個周期下線的節(jié)點(5號)就不占用時間段,從而減少了時間的浪費,縮短了數(shù)據(jù)發(fā)送時間周期。
某個節(jié)點(4號)突然上線時,此時主控節(jié)點廣播的時候還是3與4號節(jié)點不在線,其余節(jié)點都在線的狀態(tài),如圖6所示。此時如果4號節(jié)點突然上線,但是所有節(jié)點收到的廣播還是3與4號節(jié)點不在線,實際上4號節(jié)點已經(jīng)在線,如圖8所示。
所有節(jié)點在依次發(fā)送完數(shù)據(jù)后會暫停時間段V,使得上線節(jié)點可以及時向總線匯報,使其在下個周期可以發(fā)送數(shù)據(jù)。
開始時主控節(jié)點廣播當(dāng)前上線和下線的節(jié)點,每個在線節(jié)點收到的信息應(yīng)該還是3和4號節(jié)點不在線,其余節(jié)點都在線,而實際上4號節(jié)點已經(jīng)上線,要將自己的狀態(tài)匯報給主控節(jié)點,如果沒有緩沖時間片V,在2號節(jié)點發(fā)送完數(shù)據(jù)后5號節(jié)點發(fā)送數(shù)據(jù),此時就會出現(xiàn)5號節(jié)點發(fā)送數(shù)據(jù),同時4號節(jié)點也發(fā)送自己上線的信息,從而發(fā)生沖突。時間片V就解決了發(fā)送數(shù)據(jù)與匯報狀態(tài)的沖突問題。如圖8所示,如果只有3和4號節(jié)點不在線,那么V=2w,在第一個w里,由于4號節(jié)點上線,會向主控節(jié)點匯報自己在線,下個周期主控節(jié)點會將最新的從節(jié)點狀態(tài)廣播到總線上,因此從節(jié)點會重新安排上線節(jié)點(4號)發(fā)送數(shù)據(jù)的時刻與順序。如果出現(xiàn)連續(xù)兩個節(jié)點上線,那么這兩個節(jié)點就會出現(xiàn)仲裁,號數(shù)小的節(jié)點會優(yōu)先向主控節(jié)點匯報,號數(shù)大的節(jié)點在下個w時間段內(nèi)匯報給主控節(jié)點。這樣就解決了匯報狀態(tài)與發(fā)送數(shù)據(jù)的沖突問題。下個周期主控節(jié)點會刷新節(jié)點狀態(tài)廣播給所有的在線節(jié)點,剛上線的節(jié)點就擁有一個t時間段來發(fā)送數(shù)據(jù),這樣就解決了動態(tài)主控同步CAN總線的節(jié)點突然上下線的問題。
4設(shè)計仿真實驗及結(jié)果分析
為了驗證在數(shù)據(jù)采集時,主控同步的CAN總線可以解決沖突問題和提高數(shù)據(jù)可靠性,設(shè)計了圖9所示的仿真平臺。
主控同步的CAN總線在采控集數(shù)據(jù)時,當(dāng)時間周期為T時,所有節(jié)點都發(fā)送一次采集的數(shù)據(jù)的時間就是T,T越小,每個節(jié)點所分到的時間t就越短,當(dāng)T小到某一個值時,可能會出現(xiàn)所有節(jié)點的數(shù)據(jù)都無法發(fā)送完,就會出現(xiàn)數(shù)據(jù)采集失敗。所以只有當(dāng)t≥tmax時,每個節(jié)點都可以順利地向總線發(fā)送數(shù)據(jù),tmax為所有測試節(jié)點中正常發(fā)送數(shù)據(jù)所需時間最長的時間。同時T=T1+V=Yt+Xw,由于w<t,因此T=T1+V<nt,隨著X的增多,Y的減少,T=T1+V越來越小,動態(tài)地減小了數(shù)據(jù)發(fā)送的周期,提高了實時性。
對于標(biāo)準(zhǔn)CAN,由于每個節(jié)點之間是不相關(guān)的,因此它們是獨立同分布的。假設(shè)總線空閑時每個節(jié)點發(fā)送數(shù)據(jù)的概率為P,數(shù)據(jù)發(fā)送過程中會發(fā)生沖突的概率為Px,總線空閑同時也沒有節(jié)點發(fā)送數(shù)據(jù)的概率為P0=C0nP0(1-P)n,總線空閑同時只有一個節(jié)點會發(fā)送數(shù)據(jù)的概率為P1=C1nP1(1-P)n-1,則Px=1-P0-P1=1-C0nP0(1-P)n-C1nP1(1-P)n-1=1-(1-P)n-nP(1-P)n-1。但是主控同步的CAN因為主控節(jié)點的緣故使得發(fā)生沖突的概率為0。標(biāo)準(zhǔn)CAN與主控同步CAN的實驗結(jié)果對比如表1所示。
通過表1對比可以看出主控同步CAN總線的沖突的概率為0,優(yōu)于標(biāo)準(zhǔn)CAN,靜態(tài)主控同步CAN的數(shù)據(jù)傳輸?shù)膶崟r性比動態(tài)的差,因為在t和w變化的條件下,X和Y也動態(tài)地變化,從而動態(tài)地改變了總體消耗的時間T=T1+V,最終提高了數(shù)據(jù)傳輸?shù)膶崟r性,由此看出動態(tài)主控同步CAN更加適合數(shù)據(jù)采集的環(huán)境。
5結(jié)論
本文通過分析RS485和CAN總線的仲裁機制,在標(biāo)準(zhǔn)CAN的基礎(chǔ)上提出了基于主控同步的CAN總線,它能
夠解決數(shù)據(jù)沖突的問題,避免了仲裁,提高數(shù)據(jù)傳輸?shù)膶崟r性與可靠性。靜態(tài)主控同步的CAN總線可以提高數(shù)據(jù)的可靠性,但是會浪費一些時間段T/n,所以在此基礎(chǔ)上提出了動態(tài)主控同步的CAN總線。通過對比發(fā)現(xiàn),動態(tài)主控同步可以提高數(shù)據(jù)傳輸?shù)膶崟r性和可靠性,所以在數(shù)據(jù)采集這個特殊的背景下,動態(tài)主控同步的CAN總線有著自己獨特的優(yōu)勢。
參考文獻
?。?] 彭剛,徐慶江.基于STM32單片機的RS485總線分布式數(shù)據(jù)采集系統(tǒng)設(shè)計[J].伺服控制,2011(2):64-66.
[2] 龍志強.CAN總線技術(shù)與應(yīng)用系統(tǒng)設(shè)計[M].北 京: 機械工業(yè)出版社,2013.
?。?] 鄧婕.CAN 總線通信原理分析[J].電子設(shè)計工程,2012,20(7):104-106.
?。?] 劉向明,方建安.CAN總線網(wǎng)絡(luò)的實時性研究和改進[J].現(xiàn)代電子技術(shù),2011,34(22):46-49.
?。?] DVIS R I,BURNS A,BRIL R J,et al.Controller area network (CAN) schedulability analysis:refuted,revisited and revised[J].RealTime Systems,2007,-35(3):239-272.
?。?] 紀文志,陳國忠,唐加山.基于 CAN 總線智能節(jié)點的設(shè)計與實現(xiàn)[J].微型機與應(yīng)用,2012,31(2):44-46.
[7] 陳瑛,宋俊磊,王典洪.CAN 總線在野外地震數(shù)據(jù)傳輸中的應(yīng)用[J].電子技術(shù)應(yīng)用,2013,39(9):34-36.
?。?] 牛躍聽.CAN總線應(yīng)用層協(xié)議實例解析[D].北京:北京航空航天大學(xué),2014.
[9] 孫鵬,沈顯慶,周杰.CAN總線協(xié)議的改進及 性能驗證[J].現(xiàn)代科學(xué)儀器,2010(5):35-37.
[10] 陳飛,謝建.基于CAN總線的網(wǎng)絡(luò)監(jiān)控系統(tǒng)調(diào)度算法研究與改進[J].計算機與現(xiàn)代化,2015(1):92-95.