基于RS-485總線的PC與多單片機間的串行通信
0 前言
單片機因其優(yōu)越的性價比和靈活的功能配置而被廣泛的應用于測控領域。而PC則因為豐富的軟、硬件資源,被廣泛應用于網絡監(jiān)控系統(tǒng)中。這就是一臺PC與多臺單片機所組成的主從式網絡測控系統(tǒng)。串行通信是計算機和外部設備進行數據交換的重要渠道,由于其成本低,性能穩(wěn)定并遵循統(tǒng)一的標準,因而在工程中被廣泛應用。本文以華東石油局的一臺油田鉆井的滾動軸承信號采集系統(tǒng)為例,討論一種基于串行通信標準的測控系統(tǒng)的通信協(xié)議及其具體的軟、硬件實現。在本系統(tǒng)中,上位機以PC和Windows操作系統(tǒng)為軟、硬件資源;下位機采用ATMEL公司89C51,總線標準采用的是測控系統(tǒng)常用的RS-485。
1 通信系統(tǒng)的硬件設計
盡管RS-232有些缺點,但在兩臺短距離設備間的短距離信息傳輸時,最通用的還是RS-232。但對于多臺設備的長距離傳輸,它就很難實現。而 RS-485是一個多引出線接口,這個接口可以有多個驅動器和接收器,可以實現一臺PC和多臺單片機之間的串行通信;而且RS-485的最長的傳輸距離為 1200m,適合中距離的傳輸。本文針對油田鉆井的滾動軸承信號采集及傳輸,根據工地實際工作環(huán)境,采用RS-485通信接口。
1.1 PC和RS-485總線的接口[3]
該接口的主要功能是完成RS-232到RS-485的轉變,完成這個功能的芯片很多,比如MAX-485,我們的系統(tǒng)采用的是ADAM公司的ADAM4250,RS-232/RS-485轉換器,結構如圖(1)所示:
圖1 ADAM4250
1.2 89c51和RS-485總線的接口[1],[4]
由于MAX48x/49x系列收發(fā)器組成的差分平衡系統(tǒng)抗干擾能力強,接收器可檢測到200mV的信號,傳輸的數據可以在千米以外得到恢復,特別適合遠距離通信,可以組成標準的通信網絡。本系統(tǒng)采用MAX487接口芯片作為收發(fā)器,由于它的輸入阻抗是標準接收器的4倍,因此最多可以掛128個接收器。
1.3 系統(tǒng)的總體連接
本系統(tǒng)采用一主多從的總線型連接方式,如圖2所示。為了消除反射,吸收噪音,采用2個120 的匹配電阻R1和R2連在總線的兩端。其中n不大于128。
圖2 系統(tǒng)總體連接圖
2 通信協(xié)議的設計
由于RS-485通信是一種半雙工通信,發(fā)送和接受共用同一物理通道,在任意時刻只允許一臺單片機處于發(fā)送狀態(tài),因此要求應答的單片機必須在偵聽到總線上呼叫信號已經發(fā)送完畢,并且在沒有其他單片機應答信號的情況下才能應答。如果在時序上配合不好,就會發(fā)生總線沖突,使整個系統(tǒng)的通信癱瘓,無法正常工作。上位機與下位機之間如何進行數據傳輸,怎么提高通信的效率和可靠性,以及對通信過程中的故障處理,幀格式的約定,都需要一套詳盡的通信協(xié)議。RS- 485總線只制定了物理層電氣標準,對上層通信協(xié)議沒有規(guī)定。這給設計者提供了很大的靈活性。一套完整的通信協(xié)議既要求結構簡單,功能完備,又要求具有可擴充性與兼容性,并且盡量標準化。本系統(tǒng)的協(xié)議就是從這幾個方面考慮的,它主要包括以下幾個部分:
2.1 上下位機間的通信過程
(1)通信均有上位機發(fā)起,下位機不主動申請通信;
(2)當處于輪詢狀態(tài)時,上位機依據下位機地址,定時向下位機發(fā)送呼叫指令。此時,每臺下位機都中斷接受并判斷,地址不相符的下位機中斷返回,執(zhí)行其他下位機任務;反之則把本機地址及其狀態(tài)作為應答信號發(fā)送給上位機。上位機接收到應答信號后,可以作進一步的處理。
2.2 通信協(xié)議
本系統(tǒng)采用比較簡單的通信協(xié)議:PC機需要與單片機通信時,首先發(fā)送一個字節(jié)的信號,以16進制表示為AAH,單片機接收到AAH后,就將需要發(fā)送的數據連續(xù)地向PC機發(fā)送;PC機與單片機通信結束時,向單片機發(fā)送一個字節(jié)的信號,以16進制表示為55H,結束數據發(fā)送。單片機發(fā)送給PC機的數據格式為:
開始碼 | 數據體 | 校驗和 | 結束碼 |
00H | DATA[0]DATA[1]…DATA[N-1] | DATASUM | FFH |
3 通信系統(tǒng)的軟件設計
3.1 上位機通信軟件設計
本系統(tǒng)的上位機軟件用VB6.0實現,利用VB6.0提供的MSComm通信控件,可以方便的訪問串口,實現數據的接收和發(fā)送。由于本系統(tǒng)用一臺上位機監(jiān)控多臺下位機,所以上位機監(jiān)控界面主要包括3個:
(1)輪詢界面,即主監(jiān)控界面??梢员O(jiān)測到下位機的狀態(tài)(運行,停機,故障)??紤]到通用型,下位機的臺數可以根據實際需要添加或刪除,最多可帶128臺下位機。本系統(tǒng)默認為50臺。
(2)下位機運行監(jiān)視和控制界面。主要是對某一臺定位控制器進行狀態(tài)監(jiān)視和位置給定。
(3)下位機內部參數設定界面??梢愿鶕嶋H需要對某一臺定位控制器的運行參數進行修改。
開發(fā)通信程序的關鍵是發(fā)送和接受數據。下面給出上位機中數據發(fā)送和接收的部分程序:
MSComml.Settings=Settings ; 串口的波特率設置
send_arr0(0)=H02 ; 數據發(fā)送數組
send_arr1(0)=BPQ_Address
……
send_arr7(0)=send_arr1(0)Xor send_arr2(0)…Xor send_arr6(6)
Output_Enable=False ; 關閉輪詢
Open_Port ; 開串口
MSComm1.RTSEnable=False ; 置發(fā)送狀態(tài)
MSComm1.Output=send_arr0 ; 發(fā)送
Choose_Delay ; 發(fā)送延時
MSComm1.Output=send_arr1
Choose_Delay
……
MSComm1.Output=sen_arr7
Choose_Delay
MSComm1.RTSEnable=True ; 置接收狀態(tài)
Choose_Frame_delay ; 接收延時
Accept_arr=MSComm1.Input ; 數據接收數組
For j=Lbound(Accept_arr)To Ubound(Accept_arr)
If Ubound(Accept_arr)=7 Then
Buf(j)=buf(j)+Str(Accept_arr(j))
由于程序較長,對程序其它部分不詳細敘述,這里只列幾個注意點:
(1)由于采用半雙工傳輸方式,開始發(fā)送前要禁止接受。發(fā)送結束后要先關閉發(fā)送再開啟接收,以保證數據傳輸的正確性。
(2)發(fā)送以字節(jié)為單位,每個字節(jié)間要考慮延時,以免因溢出而丟失數據。延時時間主要取決于傳輸時所確定的波特率。
(3)接收數據也要考慮延時,以等待下位機將一個單位的數據全部發(fā)給上位機。
3.2 下位機通信軟件的設計[2]
本系統(tǒng)中的單片機采用的是ATMEL公司89C51,這是在國內應用相當廣泛的一款單片機,程序用C51來編寫,從實時性角度來考慮,下位機的通信方式采用中斷方式。這樣下位機程序就包括了下位機主程序和下位機中斷服務程序。主程序用于定時器T1初始化、串行口初始化和中斷初始化。中斷服務程序用于對上位機的通信。主程序和中斷服務程序的框圖如圖3、圖4所示。由于篇幅所限,程序這里就不做介紹。
圖(3) 下位機主程序框圖
圖(4)下位機中斷服務程序框圖
4 結束語
本文設計并實現了一種應用于油田鉆井滾動軸承的振動信號測控系統(tǒng)。該系統(tǒng)采用PC與多單片機之間的串行通信實現測控,采用RS-485總線標準,半雙工傳輸方式。上位機采用Windows環(huán)境下VB6.0開發(fā),編程簡單,界面良好,維護方便;下位機利用單片機內自帶的USART通信接口,很好的實現異步串行通信。實驗表明,該方法對于工作環(huán)境比較惡劣的鉆井油田滾動軸承的振動信號的采集與傳輸,達到了實際要求,為滾動軸承故障檢測提供了方便而有效的振動信號。
參考文獻
基金號:江蘇省高校自然科學基金資助項目(03KJB510025)
1 范逸之,陳立元 Visual Basic與RS-232串行通信控制 北京:中國青年出版社 2002
2 石東海 單片機數據通信技術從入門到精通 西安:西安電子出版社 2002
3 ADAM 4000 Data Acquisition Modules User’s Manual Advantech Co.Ltd 1999
4 王金成 王旭 一種基于RS-485總線的遠程通信系統(tǒng)軟件實現 《微計算機信息》 2001年17卷第9期
數字通信相關文章:數字通信原理
通信相關文章:通信原理
評論