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