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