沈繼斌,高艷玲,劉焰波,孫欣艷
(中石油西部鉆探測井公司,新疆 克拉瑪依 834000)
基于CAN總線的測井儀器系統設計
沈繼斌,高艷玲,劉焰波,孫欣艷
(中石油西部鉆探測井公司,新疆 克拉瑪依 834000)
為了解決現階段井下儀器常用的總線不能滿足快速組合測井平臺數據傳輸的問題,設計了一種基于CAN總線的測井儀器系統,詳細介紹了利用ATMEL公司的AT90CAN128控制器及其內部集成的CAN核實現CAN通信的方法和源代碼。現場試驗證明,該系統可靠性高、糾錯能力強、傳輸速率快和擴展靈活,具有較好的應用前景。
CAN總線;測井儀器;AT90CAN128
伴隨石油測井儀器組合化和普遍掛接成像儀器的發展。測井儀器井下系統常用的總線已不能滿足快速組合測井平臺數據傳輸的要求,所以,有必要對測井儀器井下系統的總線結構進行升級。CAN總線是目前較為流行的現場總線之一 ,在石油測井儀器領域有廣泛的應用前景。因此,筆者對基于CAN總線的測井儀器系統進行了研究。
CAN(Controller Area Network,控制器局域網絡)是一種具有國際標準的現場總線。由于其高可靠性 、靈活性以及獨特的設計,越來越受到人們的重視并被廣泛應用于航海、航空、醫療及工業領域。CAN總線具有如下特點:①通信方式靈活,可以采用多主通信方式,也可以采用單主多從的通信方式;②可根據報文的ID決定接收或屏蔽該報文 ,同時有可靠的錯誤處理和檢錯機制,在發送的信息遭到破壞后,可自動重發,而且節點在錯誤嚴重的情況下具有自動退出總線的功能;③通過報文濾波即可實現點對點、點對多點及全局廣播等幾種方式傳送接收數據,無需專門的“調度”;④通信速率最高可達 1Mbps(通信距離最長為40m);⑥CAN上的節點數主要取決于總線驅動電路,目前可達 110個。

圖1 一種典型的CAN總線測井儀器系統
測井儀器系統是一種分布式實時測控系統,而 CAN總線自身的特點使 CAN總線能夠有效地支持分布式實時測控系統。結合CAN總線在分布式實時測控系統中的成功應用經驗以及測井儀器系統的特點,將 CAN總線應用于測井儀器系統具有較大的優勢。在測井儀器中,高速電纜遙傳與井下儀器之間采用高速 CAN總線協議方式通信,通信速率可以達到1Mbps,其中高速電纜遙傳由井下調制MOD/解調DEMOD單元及井下CAN總線主控制單元組成,二者通過雙口RAM相連接;為了實現井下儀器與高速電纜遙傳的 CAN通信,每支井下儀器必須配備相應的CAN總線子節點接口。圖1所示為一種典型的基于CAN總線的測井儀器系統示意圖。

圖2 CAN控制器AT90CAN128
地面下發的命令經過遙傳短接的解碼部分解碼后得到的并口信號通過單片機的數據口PC口進入單片機,然后通過單片機編程將該信號轉換成CAN信號后,下發給遙傳儀器或井下其他儀器。井下所有儀器獲得該命令后,儀器中的CAN網絡會對CAN指令中的地址位和該儀器固有的地址進行比對,如果一致則接受數據并執行相應的命令。從其余井下儀器得到的數據后,經過CAN收發器到控制器,然后從數據口PC到達遙傳的編碼部分,上傳到地面。CAN控制器AT90CAN128如圖2所示。通過數據口PC口(PC0~PC7)向遙傳短接的編碼解碼單元接受命令和上傳信號,通過TXCAN和RXCAN和其他井下儀器的CAN站點進行通訊,下傳命令或者上傳測井數據信息。
AT90CAN128內嵌的CAN核只提供CAN控制協議,應用時需外加CAN總線 收發器,設計中選用CAN收發器SN65HVD1050(見圖3)。SN65HVD1050收發器是協議控制器和物理傳輸線路之間的接口。為了提高系統的抗干擾能力和對CAN控制器和收發器的保護,在CAN總線接口和CAN收發器之間添加了CAN總線浪涌保護器NUP2105,其功率為350W反向工作電壓24V擊穿電壓26.4V,可以有效地保護容錯CAN網中的收發器免受EMI和ESD的影響。二極管采用雙向配置,防止長電纜的系統因共模電壓失調而對正常的數據線路信號造成的鉗位。同時在收發器的CANH和CANL引腳外接了電容電阻網絡,起到阻抗匹配和抗干擾的作用。

圖3 CAN收發器SN65HVD1050
4.1數據發送部分的設計
1)CAN發送數據初始化 初始化程序主要完成對所有的報文對象進行初始化,如設定CAN總線的接收端和發送端、設置CANTCON(CAN控制寄存器)、指定單片機的工作時鐘、設置CANBT[3..1]CAN總線傳輸的波特率等。
2) CAN發送數據程序 該程序主要是完成以下功能:通過設置CANPAGE來指定使用的消息對象,筆者使用的是消息對象1(MOB1);通過設置CANIDT[4..1]來制定CAN信息的ID頭信息的位數和優先級。設置完成后,將收到的數據存入對應的消息對象緩沖區,具體程序如下:
// 函數名稱: void CAN_tx_data(uchar txdat)
void CAN_tx_data(uchar *txdat, uchar cnt)
if (cnt >8)
cnt = 8;

CANIDT2 = 0xAA;
CANIDT3 = 0x55;
CANIDT4 = 0xA8;
CANCDMOB = 0x00; //先關閉CAN通信,然后延遲5ms
delay_ms(5);

4.2數據接受部分的設計
1)數據接受初始化設計 初始化程序主要完成都所有的報文對象進行初始化,如設定CAN總線的接收端口和發送端口、設置CANTCON(CAN控制寄存器)指定單片機的工作時鐘等,同時還要設置應對ID頭信息的哪幾位進行比較,筆者是對29位信息都進行比較,故CANIDM[4..1]的設置的為全1。具體程序如下:
void CAN_rx_data_init()
{
// 端口設置




2)CAN接受數據程序 該程序是由控制器自動完成,只需比較CANSTMOB的RXOK位是否置1,就可判斷數據接受是否完成,若完成即可從緩沖區中取出數據。具體程序如下:
// 函數名稱: CAN_rx_data()
uint CAN_rx_data()
{
uint rx_data;

}
4.3主程序
利用該主程序配合CAN轉USB轉換器進行試驗,即上位機程序通過USB口向設計的CAN節點發送數據,該節點接受該數據后,同時將該數據發回到上位機,并在數據窗口顯示。使用的是吉陽光電的USB-CAN200 Adapter GY8508和AT90CAN128進行CAN 通信。具體程序如下:
Void main()
{
while(1)
{

通過正確配置上位機程序并和USB轉CAN轉換器正確連接,利用上位機程序向設計的CAN節點發送數據后,返回收到的數據和發送的數據相同,證明設計取得了成功。現場測試表明,該系統可靠性高、糾錯能力強、傳輸速率快和擴展靈活,具有較好的應用前景。
[1]楊明,郭海龍.CAN總線在測井儀器中的應用[J].石油儀器,2009,23(4):86-88.
[3]李積英.基于AT90CAN128單片機總線實現方案的研究[J].蘭州交通大學報(自然科學版),2007,26(1):32-34.
[編輯] 李啟棟
10.3969/j.issn.1673-1409(N).2012.06.046
P631.83;TN919
A
1673-1409(2012)06-N141-04