新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于RS-485總線的PC與多單片機間的串行通信

基于RS-485總線的PC與多單片機間的串行通信

作者: 時間:2012-01-30 來源:網(wǎng)絡(luò) 收藏

0 前言

單片機因其優(yōu)越的性價比和靈活的功能配置而被廣泛的應(yīng)用于測控領(lǐng)域。而PC則因為豐富的軟、硬件資源,被廣泛應(yīng)用于網(wǎng)絡(luò)監(jiān)控系統(tǒng)中。這就是一臺PC與多臺單片機所組成的主從式網(wǎng)絡(luò)測控系統(tǒng)。是計算機和外部設(shè)備進行數(shù)據(jù)交換的重要渠道,由于其成本低,性能穩(wěn)定并遵循統(tǒng)一的標(biāo)準(zhǔn),因而在工程中被廣泛應(yīng)用。本文以華東石油局的一臺油田鉆井的滾動軸承信號采集系統(tǒng)為例,討論一種基于標(biāo)準(zhǔn)的測控系統(tǒng)的通信協(xié)議及其具體的軟、硬件實現(xiàn)。在本系統(tǒng)中,上位機以PC和Windows操作系統(tǒng)為軟、硬件資源;下位機采用ATMEL公司89C51,總線標(biāo)準(zhǔn)采用的是測控系統(tǒng)常用的RS-485。

1 通信系統(tǒng)的硬件設(shè)計

盡管RS-232有些缺點,但在兩臺短距離設(shè)備間的短距離信息傳輸時,最通用的還是RS-232。但對于多臺設(shè)備的長距離傳輸,它就很難實現(xiàn)。而 RS-485是一個多引出線接口,這個接口可以有多個驅(qū)動器和接收器,可以實現(xiàn)一臺PC和多臺單片機之間的;而且RS-485的最長的傳輸距離為 1200m,適合中距離的傳輸。本文針對油田鉆井的滾動軸承信號采集及傳輸,根據(jù)工地實際工作環(huán)境,采用RS-485通信接口。

1.1 PC和的接口[3]

該接口的主要功能是完成RS-232到RS-485的轉(zhuǎn)變,完成這個功能的芯片很多,比如MAX-485,我們的系統(tǒng)采用的是ADAM公司的ADAM4250,RS-232/RS-485轉(zhuǎn)換器,結(jié)構(gòu)如圖(1)所示:

圖1 ADAM4250


1.2 89c51和的接口[1],[4]

由于MAX48x/49x系列收發(fā)器組成的差分平衡系統(tǒng)抗干擾能力強,接收器可檢測到200mV的信號,傳輸?shù)臄?shù)據(jù)可以在千米以外得到恢復(fù),特別適合遠距離通信,可以組成標(biāo)準(zhǔn)的通信網(wǎng)絡(luò)。本系統(tǒng)采用MAX487接口芯片作為收發(fā)器,由于它的輸入阻抗是標(biāo)準(zhǔn)接收器的4倍,因此最多可以掛128個接收器。

1.3 系統(tǒng)的總體連接

本系統(tǒng)采用一主多從的總線型連接方式,如圖2所示。為了消除反射,吸收噪音,采用2個120 的匹配電阻R1和R2連在總線的兩端。其中n不大于128。

圖2 系統(tǒng)總體連接圖

2 通信協(xié)議的設(shè)計

由于RS-485通信是一種半雙工通信,發(fā)送和接受共用同一物理通道,在任意時刻只允許一臺單片機處于發(fā)送狀態(tài),因此要求應(yīng)答的單片機必須在偵聽到總線上呼叫信號已經(jīng)發(fā)送完畢,并且在沒有其他單片機應(yīng)答信號的情況下才能應(yīng)答。如果在時序上配合不好,就會發(fā)生總線沖突,使整個系統(tǒng)的通信癱瘓,無法正常工作。上位機與下位機之間如何進行數(shù)據(jù)傳輸,怎么提高通信的效率和可靠性,以及對通信過程中的故障處理,幀格式的約定,都需要一套詳盡的通信協(xié)議。RS- 485總線只制定了物理層電氣標(biāo)準(zhǔn),對上層通信協(xié)議沒有規(guī)定。這給設(shè)計者提供了很大的靈活性。一套完整的通信協(xié)議既要求結(jié)構(gòu)簡單,功能完備,又要求具有可擴充性與兼容性,并且盡量標(biāo)準(zhǔn)化。本系統(tǒng)的協(xié)議就是從這幾個方面考慮的,它主要包括以下幾個部分:

2.1 上下位機間的通信過程

(1)通信均有上位機發(fā)起,下位機不主動申請通信;

(2)當(dāng)處于輪詢狀態(tài)時,上位機依據(jù)下位機地址,定時向下位機發(fā)送呼叫指令。此時,每臺下位機都中斷接受并判斷,地址不相符的下位機中斷返回,執(zhí)行其他下位機任務(wù);反之則把本機地址及其狀態(tài)作為應(yīng)答信號發(fā)送給上位機。上位機接收到應(yīng)答信號后,可以作進一步的處理。

2.2 通信協(xié)議

本系統(tǒng)采用比較簡單的通信協(xié)議:PC機需要與單片機通信時,首先發(fā)送一個字節(jié)的信號,以16進制表示為AAH,單片機接收到AAH后,就將需要發(fā)送的數(shù)據(jù)連續(xù)地向PC機發(fā)送;PC機與單片機通信結(jié)束時,向單片機發(fā)送一個字節(jié)的信號,以16進制表示為55H,結(jié)束數(shù)據(jù)發(fā)送。單片機發(fā)送給PC機的數(shù)據(jù)格式為:

開始碼

數(shù)據(jù)體

校驗和

結(jié)束碼

00H

DATA[0]DATA[1]…DATA[N-1]

DATASUM

FFH

3 通信系統(tǒng)的軟件設(shè)計

3.1 上位機通信軟件設(shè)計

本系統(tǒng)的上位機軟件用VB6.0實現(xiàn),利用VB6.0提供的MSComm通信控件,可以方便的訪問串口,實現(xiàn)數(shù)據(jù)的接收和發(fā)送。由于本系統(tǒng)用一臺上位機監(jiān)控多臺下位機,所以上位機監(jiān)控界面主要包括3個:

(1)輪詢界面,即主監(jiān)控界面。可以監(jiān)測到下位機的狀態(tài)(運行,停機,故障)??紤]到通用型,下位機的臺數(shù)可以根據(jù)實際需要添加或刪除,最多可帶128臺下位機。本系統(tǒng)默認為50臺。

(2)下位機運行監(jiān)視和控制界面。主要是對某一臺定位控制器進行狀態(tài)監(jiān)視和位置給定。

(3)下位機內(nèi)部參數(shù)設(shè)定界面??梢愿鶕?jù)實際需要對某一臺定位控制器的運行參數(shù)進行修改。

開發(fā)通信程序的關(guān)鍵是發(fā)送和接受數(shù)據(jù)。下面給出上位機中數(shù)據(jù)發(fā)送和接收的部分程序:

MSComml.Settings=Settings ; 串口的波特率設(shè)置

send_arr0(0)=H02 ; 數(shù)據(jù)發(fā)送數(shù)組

send_arr1(0)=BPQ_Address

……

send_arr7(0)=send_arr1(0)Xor send_arr2(0)…Xor send_arr6(6)

Output_Enable=False ; 關(guān)閉輪詢

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 ; 數(shù)據(jù)接收數(shù)組

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ā)送結(jié)束后要先關(guān)閉發(fā)送再開啟接收,以保證數(shù)據(jù)傳輸?shù)恼_性。

(2)發(fā)送以字節(jié)為單位,每個字節(jié)間要考慮延時,以免因溢出而丟失數(shù)據(jù)。延時時間主要取決于傳輸時所確定的波特率。

(3)接收數(shù)據(jù)也要考慮延時,以等待下位機將一個單位的數(shù)據(jù)全部發(fā)給上位機。

3.2 下位機通信軟件的設(shè)計[2]

本系統(tǒng)中的單片機采用的是ATMEL公司89C51,這是在國內(nèi)應(yīng)用相當(dāng)廣泛的一款單片機,程序用C51來編寫,從實時性角度來考慮,下位機的通信方式采用中斷方式。這樣下位機程序就包括了下位機主程序和下位機中斷服務(wù)程序。主程序用于定時器T1初始化、串行口初始化和中斷初始化。中斷服務(wù)程序用于對上位機的通信。主程序和中斷服務(wù)程序的框圖如圖3、圖4所示。由于篇幅所限,程序這里就不做介紹。


圖(3) 下位機主程序框圖

圖(4)下位機中斷服務(wù)程序框圖

4 結(jié)束語

本文設(shè)計并實現(xiàn)了一種應(yīng)用于油田鉆井滾動軸承的振動信號測控系統(tǒng)。該系統(tǒng)采用PC與多單片機之間的串行通信實現(xiàn)測控,采用標(biāo)準(zhǔn),半雙工傳輸方式。上位機采用Windows環(huán)境下VB6.0開發(fā),編程簡單,界面良好,維護方便;下位機利用單片機內(nèi)自帶的USART通信接口,很好的實現(xiàn)異步串行通信。實驗表明,該方法對于工作環(huán)境比較惡劣的鉆井油田滾動軸承的振動信號的采集與傳輸,達到了實際要求,為滾動軸承故障檢測提供了方便而有效的振動信號。

參考文獻

基金號:江蘇省高校自然科學(xué)基金資助項目(03KJB510025)

1 范逸之,陳立元 Visual Basic與RS-232串行通信控制 北京:中國青年出版社 2002

2 石東海 單片機數(shù)據(jù)通信技術(shù)從入門到精通 西安:西安電子出版社 2002

3 ADAM 4000 Data Acquisition Modules User’s Manual Advantech Co.Ltd 1999

4 王金成 王旭 一種基于RS-485總線的遠程通信系統(tǒng)軟件實現(xiàn) 《微計算機信息》 2001年17卷第9期

數(shù)字通信相關(guān)文章:數(shù)字通信原理


通信相關(guān)文章:通信原理




關(guān)鍵詞: RS-485總線 串行通信

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉