趙 城,張 凱
(揚州大學 物理學院,江蘇 揚州 225002)
工業(yè)測控設備和系統(tǒng)中長期使用的RS-232傳輸協議是一種并不完備的低數據速率傳輸協議,抗干擾性能差,難以組成大規(guī)模的網絡系統(tǒng)。隨著控制系統(tǒng)復雜性和規(guī)模的增加,如果采用傳統(tǒng)的以太網組件構建網絡拓撲,則實時性難以保證。CAN是一種造價低、出錯概率低又適于現場環(huán)境通信的總線,本文在此基礎上構建了一種實時的令牌傳輸網。
控制器局域網 CAN(Controller Area Net)是一種有效支持分布式控制的串行通信網絡。CAN起初是由德國Bosch公司為汽車的監(jiān)測、控制系統(tǒng)而設計的,由于其具有卓越的特性及極高的可靠性,后來漸漸應用于工業(yè)過程監(jiān)控設備的互連。CAN總線只定義ISO/OSI模型中的第一層(物理層)和第二層(數據鏈路層)。CAN總線網絡的物理拓撲如圖1所示。
圖1 CAN總線網絡的物理拓撲
CAN總線主要的特點有:(1)采用差分傳輸,抗干擾性強;(2)采用短幀結構和 CRC校驗等檢錯措施,出錯概率低;(3)采用基于優(yōu)先權的非破壞性總線仲裁技術,可工作于多主、一對一、一對多及全局廣播方式傳送接收數據;(4)通信距離隨波特率而變,典型值為 10 km(5 kb/s)、40 m(1 Mb/s)。
令牌總線網絡的邏輯拓撲如圖2所示。所有連到令牌總線上的站,在邏輯上將構成一個首尾相連的環(huán),每個站都知道自己的前導站(PS)和后繼站(NS)。
令牌實際上是一個采用特殊編碼的控制幀。網上只有一個令牌沿邏輯環(huán)傳遞,得到令牌的站才能發(fā)送數據,然后把令牌向下傳。在正常運行時,令牌按照站點地址的序列號從一個站點傳送到另外一個站點。這樣,這個令牌實際上是按照邏輯環(huán)而不是物理環(huán)進行傳遞。在數字序列的最后一個站點將令牌返回到第一個站點。
圖2 令牌總線網絡的邏輯拓撲
結合CAN總線數據鏈路層對幀的封裝、差錯的控制和令牌總線突出的實時性的優(yōu)點,設計了一種基于CAN總線的實時令牌傳輸協議,基于此協議構建的網絡拓撲如圖3所示。
圖3 基于CAN總線實時令牌網的拓撲結構
圖4是驗證此協議的一個實際網絡。主站由NXP LPC1769和收發(fā)器PCA82C250構成,從站由51單片機、SJA1000 CAN控制器和收發(fā)器PCA82C250構成。主站工作在濾波方式,即只有在標識符(ID)通過濾波后接收信息。從站工作在廣播方式,即先接收總線上的信息再按照協議進行處理。主站的作用是收集從站發(fā)過來的信息并提交給主機及監(jiān)視總線活動,當網絡令牌丟失時,發(fā)送開機復位幀。從站的作用是獲得令牌后,向主站或目的從站進行數據通信。
圖4 實際驗證網絡
PCA82C250是專門用于CAN總線的收發(fā)器,可與獨立CAN控制器組合使用,最高速率為1 Mb/s,還可根據Rs引腳調整3種工作模式。
SJA1000是NXP公司生產的獨立CAN控制器,是早期PCA82C200的升級,支持收發(fā)11位標識符的標準幀和29位標識符的擴展幀,通過驗收屏蔽寄存器和驗收代碼寄存器進行單次/雙次濾波,能完成可靠的通信。
NXP LPC1769是基于ARM Cortex-M3的32位微控制器,工作頻率可高達120 MHz。片上集成了雙通道CAN 2.0B控制器,USB 2.0全速接口,4個可配置外部中斷等。CAN的編程是以32位的方式進行的。在CAN的工程中,需要包含CAN的頭文件,此文件包含了波特率、驗收濾波器模式等定義以及各項CAN函數的聲明。以下是一個CAN信息的定義:
在具體的CAN函數中,就可以用這個結構體去定義數據緩沖區(qū),然后在主函數中進行數據緩沖區(qū)的初始化。
SJA1000擴展幀格式具有5個字節(jié)的描述符,本文將其進行重定義,如表1所示。幀類型如表2所示,其中前8個幀是控制幀,某些控制幀還會使用數據字節(jié)1。
表1 重定義CAN描述符區(qū)
表2 幀類型
站在不同的時間會發(fā)送不同的類型幀,其中環(huán)路的建立過程是指環(huán)的初始化或站的添加和刪除過程。
令牌申請幀:硬件復位或收到開機復位幀的站,在總線空閑時發(fā)送,向總線申請令牌。
開機復位幀:令牌持有站發(fā)送完后繼幀的目的站后,在一定的時間內監(jiān)視不到總線活動時發(fā)送,通知環(huán)路站點環(huán)路嚴重出錯,需要進行復位,重新組環(huán)。
請求后繼幀:環(huán)路建立過程中由令牌持有站發(fā)送,通知未入環(huán)的站以設置后繼幀響應令牌持有站的詢問。
設置后繼幀:環(huán)路建立過程中由未入環(huán)的站或出錯站的后繼站發(fā)送,用于添加或刪除一個站。
閉環(huán)宣示幀:環(huán)路建立過程中令牌持有站發(fā)送完請求后繼幀后,在一定的時間內監(jiān)視不到總線活動時發(fā)送,通知環(huán)路站點環(huán)路已經建立,并由識別碼3標示的目的站進行閉環(huán)操作:將此站的前導站PS設置為此幀的識別碼2。
后繼幀:令牌持有站發(fā)送完令牌幀后,在一定的時間內監(jiān)視不到總線活動時發(fā)送,通知錯誤站的后繼站以設置后繼幀響應令牌持有站的詢問。
入環(huán)申請幀:發(fā)生總線錯誤的站在總線恢復時,向令牌持有站申請成為其后繼站。
令牌幀:令牌持有站收到設置后繼幀或發(fā)送完數據幀時,將令牌傳遞給它的后繼站時發(fā)送。
數據幀:令牌持有站有數據需要發(fā)送時,向目的站進行發(fā)送。
為實現協議,每個從站中都需定義一個站狀態(tài)寄存器Station_State_Reg(SSR),其各位定義如圖 5所示。
圖5 站狀態(tài)寄存器SSR的位定義
Station_State用于指示站狀態(tài),0表示站未入環(huán),1表示站已入環(huán),此位在硬件復位或收到開機復位幀時置1,總線出錯時置0。Ring_State用于指示環(huán)的狀態(tài),0表示環(huán)未閉合,1表示環(huán)已閉合,此位在硬件復位、收到開機復位幀和總線出錯時置0。Token_State用于指示站是否持有令牌,0表示未持有,1表示持有,此位在硬件復位或收到開機復位幀時置1,總線出錯時置0。Frame ID用于指示當前/之前發(fā)送的幀類型,與幀類型字節(jié)的低4位相同,硬件復位或收到開機復位幀時置為令牌申請幀ID,總線錯誤時置為入環(huán)申請幀ID。
圖6 仲裁中斷、總線錯誤中斷和單片機定時器中斷處理流程
圖7 接收中斷處理流程
每個站設置3個站ID字節(jié)和一個臨時存儲字節(jié)Temp,它們在硬件復位、收到開機復位幀或總線出錯時置為本站ID。PS記錄前導站ID,NS記錄后繼站ID,TS記錄本站ID。Temp對應于環(huán)建立過程中令牌幀的數據字節(jié)1:在環(huán)初始化時令牌幀的數據字節(jié)1表示的是第一個獲得令牌的站ID,當前令牌持有站把令牌傳給它的后繼站時會轉發(fā)此ID;當有站發(fā)送入環(huán)申請幀申請?zhí)砑右粋€站時,當前令牌持有站會把它的后繼站ID放入令牌幀的數據字節(jié)1中轉給入環(huán)申請站,此ID的站會作為之后的閉環(huán)宣示幀的目的站進行閉環(huán)操作;當令牌持有站發(fā)送后繼幀刪除一個站時,會把出錯的后繼站ID放在數據字節(jié)1中,PS與此ID相同的站會以設置后繼幀響應令牌持有站。
站程序中除定義了每個類型幀的發(fā)送函數外,還定義了一些其他重要的函數:狀態(tài)偵測函數,用于偵測總線是否錯誤、是否空閑以及發(fā)送緩沖器是否釋放,它由每個類型幀的發(fā)送函數所調用;定時函數,用于設定一個時間間隔,它僅由請求后繼幀、后繼幀、申請入環(huán)幀發(fā)送函數調用。SJA1000控制器開放接收中斷、仲裁中斷及總線錯誤中斷3類中斷。發(fā)送中斷、仲裁中斷、總線錯誤中斷和單片機定時中斷處理流程如圖6所示。
接收中斷處理流程如圖7所示,接收中斷對9類幀進行了不同的處理。
基于CAN總線的實時令牌網可用于短數據幀的實時傳輸,如機器狀態(tài)傳感數據、過程控制信號等,基于此協議構建的網絡既可保證傳輸的實時性又可保證正確性,因此具有很好的應用價值。
[1]楊春杰,王曙光,亢紅波.CAN總線技術[M].北京:北京航空航天大學出版社,2010.
[2]關平.雙向HFC網絡中令牌總線接入方法研究 [D].成都:四川大學,2004.
[3]王毅峰,李令奇.基于CAN總線的分布式數據采集與控制系統(tǒng)[J].工業(yè)控制計算機,2000,13(5):34-35.
[4]SJA1000 Stand-alone CAN controller.pdf[EB/OL].[2000-01]http://www.nxp.com.
[5]LPC1769.pdf[EB/OL].[2012-08]http://www.nxp.com.