張 莉,鄔寶寅
(1.鄭州科技學院機械工程學院,河南 鄭州 450064;2.新天科技股份有限公司,河南 鄭州 450001)
現(xiàn)場總線技術是當今自動化領域發(fā)展的熱點之一[1]。常用的總線有半雙工非主從式和全雙工主從式兩種通信方式。半雙工非主從式[2]總線上任意兩個設備都可以傳輸數(shù)據(jù),總線系統(tǒng)構成比較靈活;但每個設備要約定一個地址,且任意時刻只能有一個設備向總線上傳數(shù)據(jù);如兩個或多個設備同時發(fā)送數(shù)據(jù),則數(shù)據(jù)會丟失,甚至會損壞硬件。因此,設備在發(fā)送數(shù)據(jù)時,首先要判斷總線是否處于空閑狀態(tài)。若采用令牌環(huán)方式,可防止傳輸沖突并傳輸大量數(shù)據(jù),但協(xié)議復雜、實時性差;若采用實時通信方式,則實時性好,但通信不能太頻繁,否則數(shù)據(jù)傳輸會產生沖突。RS-485總線[3]、CAN總線[4]、Profibus總線[5]以及大多數(shù)現(xiàn)場總線采用半雙工主從式通信。如果要求設備節(jié)點能及時響應主機的命令,則需要采用全雙工的串行數(shù)據(jù)通信[6]。常見的采用全雙工主從式通信現(xiàn)場總線有RS-422/232總線。這些總線方式可傳輸大量數(shù)據(jù),實時性好,但從機之間不能通信,因此限制了系統(tǒng)的可擴展性和設備的數(shù)量。
為解決上述問題,設計了一種全雙工智能總線,增強了總線通信實時性、增加了設備數(shù)量,并且使任意設備之間都可以頻繁傳輸數(shù)據(jù)。
為了實現(xiàn)總線的全雙工通信功能,總線必須設計兩路差分信號,且每路信號都是單向傳送數(shù)據(jù)。將這兩路信號分別稱為上行信號和下行信號,其沿相反的方向在總線上傳送數(shù)據(jù)。掛載在總線上的設備由帶有通用異步接收發(fā)送器(universal asynchronous receiver/transmitter,UART)的微控制器(microcontroller unit,MCU)構成。UART的發(fā)送端可以將數(shù)據(jù)分別發(fā)送至上行信號或下行信號,接收端可以分別從上行信號或下行信號中接收數(shù)據(jù)。總線節(jié)點必須具備這種結構,以實現(xiàn)任意兩個節(jié)點之間的全雙工通信。
為了使通信距離和速率不受總線節(jié)點數(shù)量的影響,每個通信節(jié)點都要進行信號中繼[7],使信號在該節(jié)點上得到加強,以擴大傳輸距離。該方法可保證總線上所有間距相同的設備都能得到相同強度的信號,從而使傳輸距離只受相鄰兩節(jié)點間距離的限制,而不受節(jié)點數(shù)量的影響。
理論上,信號中繼可以無限延長通信距離。由于每個節(jié)點都有信號中繼,所以每個節(jié)點的差分發(fā)送器只有單一的負載,保證了數(shù)據(jù)傳輸?shù)姆€(wěn)定性,只是相隔較遠的節(jié)點之間會有較大的通信延遲。
基于以上設計要點,本文設計的總線結構如圖1所示。該總線由上行信號和下行信號這兩路差分信號構成,需要兩組雙絞線。每路信號只能單向傳輸,兩路信號朝相反的方向傳輸數(shù)據(jù)。每個總線設備包含兩個總線接口(A口和B口),通過這兩個接口串聯(lián)在總線中。每個設備的A口只能與其他設備的B口相連。

圖1 總線結構圖
在單臺總線設備內部,A口包含一個下行信號的差分接收器和一個上行信號的差分發(fā)送器;B口包含一個下行信號的差分發(fā)送器和一個上行信號的差分接收器。故下行信號從設備A口進入,B口輸出;上行信號從設備B口進入,A口輸出。按照這種方式,信號所穿越的設備可以起到信號中繼加強的作用,保證無論總線上有多少設備,每個差分發(fā)送器都只有一個接收器的負載。信號傳輸距離只受相鄰兩設備之間距離的影響,而不受設備數(shù)量的影響,確保信號可以無損通過總線上的每一個設備,實現(xiàn)較遠距離的傳輸。
下行信號或上行信號通過差分接收器,轉變?yōu)殡p晶體管邏輯(transistor transistror logic,TTL)信號進入設備,再分別通過一個三態(tài)門后送入差分發(fā)送器,轉變?yōu)椴罘中盘栞敵觥H龖B(tài)門使能端由設備I/O口控制。同時,兩個差分接收器產生的TTL信號可分別送入設備內的兩個UART的數(shù)據(jù)輸入端,從而將上行、下行數(shù)據(jù)發(fā)送至設備內部。兩個UART的數(shù)據(jù)輸出端分別與上行、下行差分發(fā)送器的TTL輸入端相連,可將設備輸出的數(shù)據(jù)發(fā)送至上行、下行方向。
若該設備需要向上行(下行)方向發(fā)送數(shù)據(jù),則上行(下行)方向的三態(tài)門斷開,同時上行(下行)方向的差分發(fā)送器相連的UART輸出端輸出數(shù)據(jù)。若設備無需向上行(下行)方向發(fā)送數(shù)據(jù),則該方向的三態(tài)門閉合,上行(下行)方向數(shù)據(jù)從總線進入設備后,通過三態(tài)門,再通過差分發(fā)送器輸出;而UART輸出端此時置于高阻狀態(tài)。無論設備是否需要發(fā)送數(shù)據(jù),兩個UART數(shù)據(jù)接收端均可監(jiān)聽、接收上行、下行方向輸入的數(shù)據(jù)。故通過控制三態(tài)門通斷和UART數(shù)據(jù)輸出端狀態(tài),可控制總線數(shù)據(jù)穿過設備或截斷總線數(shù)據(jù),使設備數(shù)據(jù)輸出到總線,且上行、下行方向獨立工作。
為實現(xiàn)以上總線結構,采用MAX488作為差分收發(fā)器。每個MAX488內含有一個收發(fā)器和一個發(fā)送器。每臺設備中采用兩個MAX488,分別作為A口和B口的接口芯片。采用兩個單三態(tài)門74HC1G125,分別連接兩個MAX488接收器的輸出端和發(fā)送器的輸入端,兩個74HC1G125的使能端與微控制器的GPIO相連,兩個MAX488的TTL輸出端和輸入端分別與微控制器的兩個UART的數(shù)據(jù)輸入端和輸出端相連。電路采用的微控制器至少具備兩個UART,且UART輸出口可設為高阻狀態(tài),如STM32F103等。差分信號接口需并聯(lián)靜電釋放(electro-static discharge,ESD)器件,以起到保護作用。
上述硬件結構僅能在物理層面實現(xiàn)總線任意設備之間的全雙工異步通信。在具體實現(xiàn)時,還需要通過可編程器件執(zhí)行該總線系統(tǒng)的基本通信協(xié)議[8-10]。這里將總線設備的狀態(tài)定義為透傳接收模式和搶占發(fā)送模式:當設備處于透傳接收模式,設備內三態(tài)門閉合,總線數(shù)據(jù)可以穿過該設備,經該設備的中繼作用傳向相鄰設備;當設備處于搶占發(fā)送模式,設備內三態(tài)門斷開,總線數(shù)據(jù)在該設備處被截斷,而由設備內部向數(shù)據(jù)輸出方向發(fā)送數(shù)據(jù)。上行方向和下行方向各自具有獨立的透傳接收模式和搶占發(fā)送模式,且無論處于何種模式,設備都能分別通過兩個UART接收端接收上/下行數(shù)據(jù)。設備內微控制器應包含三個數(shù)據(jù)緩存區(qū),分別是發(fā)送緩存區(qū)T_Temp和對應兩個UART接收端的接收緩存區(qū)R_TempA、R_TempB,用于存儲發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。總線設備可分為通信和尋址這兩個工作狀態(tài)。
總線設備可采用實時通信方式,有數(shù)據(jù)發(fā)送需求的設備無需等待排隊,即可將上行方向、下行方向或上/下行方向同時切換為搶占發(fā)送模式,直接發(fā)送數(shù)據(jù)。若該設備上行方向和下行方向的設備都為透傳模式,則該數(shù)據(jù)可貫穿整條總線。
單機發(fā)送模式如圖2所示。

圖2 單機發(fā)送模式
當3#設備發(fā)送數(shù)據(jù)時,其上行方向的2#設備和下行方向的4#設備都處于透傳模式。2#設備B口對應的UART接收端接收數(shù)據(jù),存入R_TempB中;4#設備A口對應的UART接收端接收數(shù)據(jù),存入R_TempA中。
總線設備采用實時通信方式時,可能會出現(xiàn)多個設備同時發(fā)送數(shù)據(jù)的情況。
多機發(fā)送模式如圖3所示。

圖3 多機發(fā)送模式
由圖3(a)可知,當2#、4#設備都有數(shù)據(jù)發(fā)送需求時,將立即切換為搶占發(fā)送模式,并斷開總線。此時,總線實際上被分為三段:2#設備上行方向的設備可通過B口接收到2#設備發(fā)送的數(shù)據(jù)D2;4#設備下行方向的設備可通過A口接收到4#設備發(fā)送的數(shù)據(jù)D4;而2#、4#設備之間,包括2#、4#設備自身,可分別通過A口和B口接收到2#、4#設備發(fā)送的數(shù)據(jù),即3#、4#設備的R_TempA可接收2#設備向下行發(fā)送的數(shù)據(jù)D2,2#、3#設備的R_TempB可接收4#設備向上行發(fā)送的數(shù)據(jù)D4。此時,2#設備的上行方向無法收到4#設備的數(shù)據(jù),4#設備的下行方向無法收到2#設備的數(shù)據(jù)。若要完成該數(shù)據(jù)傳輸過程,需借助該總線設備的緩存-中繼功能。當總線設備完成自身的數(shù)據(jù)發(fā)送后,需將總線被搶占期間接收到的數(shù)據(jù),沿著該數(shù)據(jù)原本的傳輸方向接力發(fā)送。由圖3(b)可知,2#設備B口接收到的上行數(shù)據(jù)D4,通過其A口向上行方向發(fā)送;4#設備A口接收到的上行數(shù)據(jù)D2,通過其B口向下行方向發(fā)送,從而使總線上的所有設備都接收到D2、D4。
該總線可以在不丟失數(shù)據(jù)的情況下,實現(xiàn)所有設備數(shù)據(jù)的實時發(fā)送,解決了一般半雙工或全雙工總線的數(shù)據(jù)沖突問題。數(shù)據(jù)從發(fā)送到目標設備接收的延遲時間,取決于整條總線的繁忙程度。若總線空閑,則數(shù)據(jù)立即到達目標接收設備;若總線同時發(fā)送數(shù)據(jù)的設備越多、數(shù)據(jù)量越大,則數(shù)據(jù)被緩存-中繼的次數(shù)就越多,延遲時間就越長。總線上物理距離越近的設備之間,傳輸數(shù)據(jù)被搶占的幾率越小。符合該總線標準的設備,需約定數(shù)據(jù)完整性的單位,如字節(jié)或幀。設備搶占總線前需判斷一個完整的數(shù)據(jù)單位是否透傳完畢,否則總線中會出現(xiàn)數(shù)據(jù)碎片。
基于該總線結構,設備可以通過獲取其在總線中的“位置”來得到唯一地址,并將該地址作為設備的通信地址。而一般總線設備必須預設地址,并在被告知其他所有設備的地址后,才能進行握手通信。
總線進入尋址狀態(tài)后,所有設備均處于搶占狀態(tài),并向上下行方向發(fā)送搜尋指令。相鄰設備接收端收到搜尋指令后,回復確認指令。故當某設備上行方向未收到確認幀,說明該設備處于總線最上端;若下行方向未收到確認幀,說明該設備處于總線最下端;若上/下行方向都收到確認幀,說明該設備兩側均有相鄰設備。此時,最上端設備將自身地址定義為“1”,并向下行方向發(fā)送授地址指令;將下行相鄰設備地址設定為“2”,收到確認幀后恢復透傳模式;設備“2”再向下行相鄰設備發(fā)送授地址指令;直到最下端設備被設地址后,最下端設備向上行方向發(fā)送復位指令,使所有總線設備恢復通信狀態(tài)。
通過適當?shù)能浖刂疲偩€周期性進入尋址狀態(tài),可實現(xiàn)總線斷線檢測和設備熱插拔。當總線意外斷開,或有端部設備被移除或連接時,通過自動尋址可及時得知總線設備數(shù)量和自身地址變化情況。
本文從硬件和協(xié)議兩個方面,設計了全雙工智能總線。在硬件方面,設計了采用具有中繼結構的“串聯(lián)”型總線設備,而非一般總線的“并聯(lián)”型結構,總線信號經過每一個設備均要通過差分- TTL-差分的轉換。在協(xié)議方面,設計了具有雙向緩存-中繼機制的總線設備,可實現(xiàn)設備在某一傳輸方向上發(fā)送數(shù)據(jù)時,同步進行接收緩存。
基于這兩項設計,可得到以下三項結論。①總線總長度和設備總數(shù)量理論上不受限制,僅相鄰設備間距需滿足通信速率和驅動力的要求。②總線上任意設備可隨時發(fā)送數(shù)據(jù),數(shù)據(jù)不會沖突,總線上其他設備均可收到該數(shù)據(jù),但可能會有一定的延遲。延遲時間取決于同一時刻其他發(fā)送數(shù)據(jù)設備的數(shù)量。③設備在總線上具有唯一 “位置”,若將該位置作為設備地址,可避免像其他總線設備那樣必須預設地址。
參考文獻:
[1] 劉澤祥,李媛.現(xiàn)場總線技術[M].2版.北京:機械工業(yè)出版社,2011.
[2] 陳雨田.基于μC/OS-Ⅱ的半雙工現(xiàn)場總線多主機機制的研究與實現(xiàn)[D].昆明:云南大學,2015.
[3] 張莉,鄔寶寅.一種改進型RS485總線設計[J].自動化儀表,2016,37(10):32-35.
[4] 楊夫星,談世哲.智能總線協(xié)議適配器的設計與實現(xiàn)[J].自動化技術與應用,2009,28(12):86-89.
[5] 阮焱林,鄭秋玲,張云.PROFIBUS現(xiàn)場總線技術綜述[J].可編程控制器與工廠自動化,2011(8):39-41.
[6] 李樂,鄭賓,秦建斌.全雙工RS485總線發(fā)送機制的研究[J].中國儀器儀表,2008(2):41-43.
[7] 潘銅,葉小榮,張娜,等.STM32的CAN總線中繼器設計及應用[J].單片機與嵌入式系統(tǒng)應用,2011(1):46-48.
[8] 歐靜蘭,鄒玉濤,陳昌燕,等.一種適用于單信道全雙工通信的PCF協(xié)議[J].華中科技大學學報 (自然科學版),2016,44(8):80-84.
[9] 黃敏娣,胡正飛.嵌入式RS-232與CAN總線協(xié)議的網(wǎng)關設計[J].計算機技術與發(fā)展,2015,25(4):208-212.
[10]劉承智,丁國良,原亮,等.改進型CAN總線協(xié)議的實時性研究[J].計算機技術與發(fā)展,2012,22(7):81-84.