張 莉,鄔寶寅
(1.鄭州科技學(xué)院機械工程學(xué)院,河南 鄭州 450064;2.新天科技股份有限公司,河南 鄭州 450001)
現(xiàn)場總線技術(shù)是當(dāng)今自動化領(lǐng)域發(fā)展的熱點之一[1]。常用的總線有半雙工非主從式和全雙工主從式兩種通信方式。半雙工非主從式[2]總線上任意兩個設(shè)備都可以傳輸數(shù)據(jù),總線系統(tǒng)構(gòu)成比較靈活;但每個設(shè)備要約定一個地址,且任意時刻只能有一個設(shè)備向總線上傳數(shù)據(jù);如兩個或多個設(shè)備同時發(fā)送數(shù)據(jù),則數(shù)據(jù)會丟失,甚至?xí)p壞硬件。因此,設(shè)備在發(fā)送數(shù)據(jù)時,首先要判斷總線是否處于空閑狀態(tài)。若采用令牌環(huán)方式,可防止傳輸沖突并傳輸大量數(shù)據(jù),但協(xié)議復(fù)雜、實時性差;若采用實時通信方式,則實時性好,但通信不能太頻繁,否則數(shù)據(jù)傳輸會產(chǎn)生沖突。RS-485總線[3]、CAN總線[4]、Profibus總線[5]以及大多數(shù)現(xiàn)場總線采用半雙工主從式通信。如果要求設(shè)備節(jié)點能及時響應(yīng)主機的命令,則需要采用全雙工的串行數(shù)據(jù)通信[6]。常見的采用全雙工主從式通信現(xiàn)場總線有RS-422/232總線。這些總線方式可傳輸大量數(shù)據(jù),實時性好,但從機之間不能通信,因此限制了系統(tǒng)的可擴展性和設(shè)備的數(shù)量。
為解決上述問題,設(shè)計了一種全雙工智能總線,增強了總線通信實時性、增加了設(shè)備數(shù)量,并且使任意設(shè)備之間都可以頻繁傳輸數(shù)據(jù)。
為了實現(xiàn)總線的全雙工通信功能,總線必須設(shè)計兩路差分信號,且每路信號都是單向傳送數(shù)據(jù)。將這兩路信號分別稱為上行信號和下行信號,其沿相反的方向在總線上傳送數(shù)據(jù)。掛載在總線上的設(shè)備由帶有通用異步接收發(fā)送器(universal asynchronous receiver/transmitter,UART)的微控制器(microcontroller unit,MCU)構(gòu)成。UART的發(fā)送端可以將數(shù)據(jù)分別發(fā)送至上行信號或下行信號,接收端可以分別從上行信號或下行信號中接收數(shù)據(jù)??偩€節(jié)點必須具備這種結(jié)構(gòu),以實現(xiàn)任意兩個節(jié)點之間的全雙工通信。
為了使通信距離和速率不受總線節(jié)點數(shù)量的影響,每個通信節(jié)點都要進(jìn)行信號中繼[7],使信號在該節(jié)點上得到加強,以擴大傳輸距離。該方法可保證總線上所有間距相同的設(shè)備都能得到相同強度的信號,從而使傳輸距離只受相鄰兩節(jié)點間距離的限制,而不受節(jié)點數(shù)量的影響。
理論上,信號中繼可以無限延長通信距離。由于每個節(jié)點都有信號中繼,所以每個節(jié)點的差分發(fā)送器只有單一的負(fù)載,保證了數(shù)據(jù)傳輸?shù)姆€(wěn)定性,只是相隔較遠(yuǎn)的節(jié)點之間會有較大的通信延遲。
基于以上設(shè)計要點,本文設(shè)計的總線結(jié)構(gòu)如圖1所示。該總線由上行信號和下行信號這兩路差分信號構(gòu)成,需要兩組雙絞線。每路信號只能單向傳輸,兩路信號朝相反的方向傳輸數(shù)據(jù)。每個總線設(shè)備包含兩個總線接口(A口和B口),通過這兩個接口串聯(lián)在總線中。每個設(shè)備的A口只能與其他設(shè)備的B口相連。
圖1 總線結(jié)構(gòu)圖
在單臺總線設(shè)備內(nèi)部,A口包含一個下行信號的差分接收器和一個上行信號的差分發(fā)送器;B口包含一個下行信號的差分發(fā)送器和一個上行信號的差分接收器。故下行信號從設(shè)備A口進(jìn)入,B口輸出;上行信號從設(shè)備B口進(jìn)入,A口輸出。按照這種方式,信號所穿越的設(shè)備可以起到信號中繼加強的作用,保證無論總線上有多少設(shè)備,每個差分發(fā)送器都只有一個接收器的負(fù)載。信號傳輸距離只受相鄰兩設(shè)備之間距離的影響,而不受設(shè)備數(shù)量的影響,確保信號可以無損通過總線上的每一個設(shè)備,實現(xiàn)較遠(yuǎn)距離的傳輸。
下行信號或上行信號通過差分接收器,轉(zhuǎn)變?yōu)殡p晶體管邏輯(transistor transistror logic,TTL)信號進(jìn)入設(shè)備,再分別通過一個三態(tài)門后送入差分發(fā)送器,轉(zhuǎn)變?yōu)椴罘中盘栞敵?。三態(tài)門使能端由設(shè)備I/O口控制。同時,兩個差分接收器產(chǎn)生的TTL信號可分別送入設(shè)備內(nèi)的兩個UART的數(shù)據(jù)輸入端,從而將上行、下行數(shù)據(jù)發(fā)送至設(shè)備內(nèi)部。兩個UART的數(shù)據(jù)輸出端分別與上行、下行差分發(fā)送器的TTL輸入端相連,可將設(shè)備輸出的數(shù)據(jù)發(fā)送至上行、下行方向。
若該設(shè)備需要向上行(下行)方向發(fā)送數(shù)據(jù),則上行(下行)方向的三態(tài)門斷開,同時上行(下行)方向的差分發(fā)送器相連的UART輸出端輸出數(shù)據(jù)。若設(shè)備無需向上行(下行)方向發(fā)送數(shù)據(jù),則該方向的三態(tài)門閉合,上行(下行)方向數(shù)據(jù)從總線進(jìn)入設(shè)備后,通過三態(tài)門,再通過差分發(fā)送器輸出;而UART輸出端此時置于高阻狀態(tài)。無論設(shè)備是否需要發(fā)送數(shù)據(jù),兩個UART數(shù)據(jù)接收端均可監(jiān)聽、接收上行、下行方向輸入的數(shù)據(jù)。故通過控制三態(tài)門通斷和UART數(shù)據(jù)輸出端狀態(tài),可控制總線數(shù)據(jù)穿過設(shè)備或截斷總線數(shù)據(jù),使設(shè)備數(shù)據(jù)輸出到總線,且上行、下行方向獨立工作。
為實現(xiàn)以上總線結(jié)構(gòu),采用MAX488作為差分收發(fā)器。每個MAX488內(nèi)含有一個收發(fā)器和一個發(fā)送器。每臺設(shè)備中采用兩個MAX488,分別作為A口和B口的接口芯片。采用兩個單三態(tài)門74HC1G125,分別連接兩個MAX488接收器的輸出端和發(fā)送器的輸入端,兩個74HC1G125的使能端與微控制器的GPIO相連,兩個MAX488的TTL輸出端和輸入端分別與微控制器的兩個UART的數(shù)據(jù)輸入端和輸出端相連。電路采用的微控制器至少具備兩個UART,且UART輸出口可設(shè)為高阻狀態(tài),如STM32F103等。差分信號接口需并聯(lián)靜電釋放(electro-static discharge,ESD)器件,以起到保護(hù)作用。
上述硬件結(jié)構(gòu)僅能在物理層面實現(xiàn)總線任意設(shè)備之間的全雙工異步通信。在具體實現(xiàn)時,還需要通過可編程器件執(zhí)行該總線系統(tǒng)的基本通信協(xié)議[8-10]。這里將總線設(shè)備的狀態(tài)定義為透傳接收模式和搶占發(fā)送模式:當(dāng)設(shè)備處于透傳接收模式,設(shè)備內(nèi)三態(tài)門閉合,總線數(shù)據(jù)可以穿過該設(shè)備,經(jīng)該設(shè)備的中繼作用傳向相鄰設(shè)備;當(dāng)設(shè)備處于搶占發(fā)送模式,設(shè)備內(nèi)三態(tài)門斷開,總線數(shù)據(jù)在該設(shè)備處被截斷,而由設(shè)備內(nèi)部向數(shù)據(jù)輸出方向發(fā)送數(shù)據(jù)。上行方向和下行方向各自具有獨立的透傳接收模式和搶占發(fā)送模式,且無論處于何種模式,設(shè)備都能分別通過兩個UART接收端接收上/下行數(shù)據(jù)。設(shè)備內(nèi)微控制器應(yīng)包含三個數(shù)據(jù)緩存區(qū),分別是發(fā)送緩存區(qū)T_Temp和對應(yīng)兩個UART接收端的接收緩存區(qū)R_TempA、R_TempB,用于存儲發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。總線設(shè)備可分為通信和尋址這兩個工作狀態(tài)。
總線設(shè)備可采用實時通信方式,有數(shù)據(jù)發(fā)送需求的設(shè)備無需等待排隊,即可將上行方向、下行方向或上/下行方向同時切換為搶占發(fā)送模式,直接發(fā)送數(shù)據(jù)。若該設(shè)備上行方向和下行方向的設(shè)備都為透傳模式,則該數(shù)據(jù)可貫穿整條總線。
單機發(fā)送模式如圖2所示。
圖2 單機發(fā)送模式
當(dāng)3#設(shè)備發(fā)送數(shù)據(jù)時,其上行方向的2#設(shè)備和下行方向的4#設(shè)備都處于透傳模式。2#設(shè)備B口對應(yīng)的UART接收端接收數(shù)據(jù),存入R_TempB中;4#設(shè)備A口對應(yīng)的UART接收端接收數(shù)據(jù),存入R_TempA中。
總線設(shè)備采用實時通信方式時,可能會出現(xiàn)多個設(shè)備同時發(fā)送數(shù)據(jù)的情況。
多機發(fā)送模式如圖3所示。
圖3 多機發(fā)送模式
由圖3(a)可知,當(dāng)2#、4#設(shè)備都有數(shù)據(jù)發(fā)送需求時,將立即切換為搶占發(fā)送模式,并斷開總線。此時,總線實際上被分為三段:2#設(shè)備上行方向的設(shè)備可通過B口接收到2#設(shè)備發(fā)送的數(shù)據(jù)D2;4#設(shè)備下行方向的設(shè)備可通過A口接收到4#設(shè)備發(fā)送的數(shù)據(jù)D4;而2#、4#設(shè)備之間,包括2#、4#設(shè)備自身,可分別通過A口和B口接收到2#、4#設(shè)備發(fā)送的數(shù)據(jù),即3#、4#設(shè)備的R_TempA可接收2#設(shè)備向下行發(fā)送的數(shù)據(jù)D2,2#、3#設(shè)備的R_TempB可接收4#設(shè)備向上行發(fā)送的數(shù)據(jù)D4。此時,2#設(shè)備的上行方向無法收到4#設(shè)備的數(shù)據(jù),4#設(shè)備的下行方向無法收到2#設(shè)備的數(shù)據(jù)。若要完成該數(shù)據(jù)傳輸過程,需借助該總線設(shè)備的緩存-中繼功能。當(dāng)總線設(shè)備完成自身的數(shù)據(jù)發(fā)送后,需將總線被搶占期間接收到的數(shù)據(jù),沿著該數(shù)據(jù)原本的傳輸方向接力發(fā)送。由圖3(b)可知,2#設(shè)備B口接收到的上行數(shù)據(jù)D4,通過其A口向上行方向發(fā)送;4#設(shè)備A口接收到的上行數(shù)據(jù)D2,通過其B口向下行方向發(fā)送,從而使總線上的所有設(shè)備都接收到D2、D4。
該總線可以在不丟失數(shù)據(jù)的情況下,實現(xiàn)所有設(shè)備數(shù)據(jù)的實時發(fā)送,解決了一般半雙工或全雙工總線的數(shù)據(jù)沖突問題。數(shù)據(jù)從發(fā)送到目標(biāo)設(shè)備接收的延遲時間,取決于整條總線的繁忙程度。若總線空閑,則數(shù)據(jù)立即到達(dá)目標(biāo)接收設(shè)備;若總線同時發(fā)送數(shù)據(jù)的設(shè)備越多、數(shù)據(jù)量越大,則數(shù)據(jù)被緩存-中繼的次數(shù)就越多,延遲時間就越長??偩€上物理距離越近的設(shè)備之間,傳輸數(shù)據(jù)被搶占的幾率越小。符合該總線標(biāo)準(zhǔn)的設(shè)備,需約定數(shù)據(jù)完整性的單位,如字節(jié)或幀。設(shè)備搶占總線前需判斷一個完整的數(shù)據(jù)單位是否透傳完畢,否則總線中會出現(xiàn)數(shù)據(jù)碎片。
基于該總線結(jié)構(gòu),設(shè)備可以通過獲取其在總線中的“位置”來得到唯一地址,并將該地址作為設(shè)備的通信地址。而一般總線設(shè)備必須預(yù)設(shè)地址,并在被告知其他所有設(shè)備的地址后,才能進(jìn)行握手通信。
總線進(jìn)入尋址狀態(tài)后,所有設(shè)備均處于搶占狀態(tài),并向上下行方向發(fā)送搜尋指令。相鄰設(shè)備接收端收到搜尋指令后,回復(fù)確認(rèn)指令。故當(dāng)某設(shè)備上行方向未收到確認(rèn)幀,說明該設(shè)備處于總線最上端;若下行方向未收到確認(rèn)幀,說明該設(shè)備處于總線最下端;若上/下行方向都收到確認(rèn)幀,說明該設(shè)備兩側(cè)均有相鄰設(shè)備。此時,最上端設(shè)備將自身地址定義為“1”,并向下行方向發(fā)送授地址指令;將下行相鄰設(shè)備地址設(shè)定為“2”,收到確認(rèn)幀后恢復(fù)透傳模式;設(shè)備“2”再向下行相鄰設(shè)備發(fā)送授地址指令;直到最下端設(shè)備被設(shè)地址后,最下端設(shè)備向上行方向發(fā)送復(fù)位指令,使所有總線設(shè)備恢復(fù)通信狀態(tài)。
通過適當(dāng)?shù)能浖刂?,總線周期性進(jìn)入尋址狀態(tài),可實現(xiàn)總線斷線檢測和設(shè)備熱插拔。當(dāng)總線意外斷開,或有端部設(shè)備被移除或連接時,通過自動尋址可及時得知總線設(shè)備數(shù)量和自身地址變化情況。
本文從硬件和協(xié)議兩個方面,設(shè)計了全雙工智能總線。在硬件方面,設(shè)計了采用具有中繼結(jié)構(gòu)的“串聯(lián)”型總線設(shè)備,而非一般總線的“并聯(lián)”型結(jié)構(gòu),總線信號經(jīng)過每一個設(shè)備均要通過差分- TTL-差分的轉(zhuǎn)換。在協(xié)議方面,設(shè)計了具有雙向緩存-中繼機制的總線設(shè)備,可實現(xiàn)設(shè)備在某一傳輸方向上發(fā)送數(shù)據(jù)時,同步進(jìn)行接收緩存。
基于這兩項設(shè)計,可得到以下三項結(jié)論。①總線總長度和設(shè)備總數(shù)量理論上不受限制,僅相鄰設(shè)備間距需滿足通信速率和驅(qū)動力的要求。②總線上任意設(shè)備可隨時發(fā)送數(shù)據(jù),數(shù)據(jù)不會沖突,總線上其他設(shè)備均可收到該數(shù)據(jù),但可能會有一定的延遲。延遲時間取決于同一時刻其他發(fā)送數(shù)據(jù)設(shè)備的數(shù)量。③設(shè)備在總線上具有唯一 “位置”,若將該位置作為設(shè)備地址,可避免像其他總線設(shè)備那樣必須預(yù)設(shè)地址。
參考文獻(xiàn):
[1] 劉澤祥,李媛.現(xiàn)場總線技術(shù)[M].2版.北京:機械工業(yè)出版社,2011.
[2] 陳雨田.基于μC/OS-Ⅱ的半雙工現(xiàn)場總線多主機機制的研究與實現(xiàn)[D].昆明:云南大學(xué),2015.
[3] 張莉,鄔寶寅.一種改進(jìn)型RS485總線設(shè)計[J].自動化儀表,2016,37(10):32-35.
[4] 楊夫星,談世哲.智能總線協(xié)議適配器的設(shè)計與實現(xiàn)[J].自動化技術(shù)與應(yīng)用,2009,28(12):86-89.
[5] 阮焱林,鄭秋玲,張云.PROFIBUS現(xiàn)場總線技術(shù)綜述[J].可編程控制器與工廠自動化,2011(8):39-41.
[6] 李樂,鄭賓,秦建斌.全雙工RS485總線發(fā)送機制的研究[J].中國儀器儀表,2008(2):41-43.
[7] 潘銅,葉小榮,張娜,等.STM32的CAN總線中繼器設(shè)計及應(yīng)用[J].單片機與嵌入式系統(tǒng)應(yīng)用,2011(1):46-48.
[8] 歐靜蘭,鄒玉濤,陳昌燕,等.一種適用于單信道全雙工通信的PCF協(xié)議[J].華中科技大學(xué)學(xué)報 (自然科學(xué)版),2016,44(8):80-84.
[9] 黃敏娣,胡正飛.嵌入式RS-232與CAN總線協(xié)議的網(wǎng)關(guān)設(shè)計[J].計算機技術(shù)與發(fā)展,2015,25(4):208-212.
[10]劉承智,丁國良,原亮,等.改進(jìn)型CAN總線協(xié)議的實時性研究[J].計算機技術(shù)與發(fā)展,2012,22(7):81-84.