基于RS-485協(xié)議設(shè)計智能數(shù)據(jù)采集網(wǎng)絡(luò)儀表
一、引言
在由以單片機為核心構(gòu)成的儀器儀表、智能設(shè)備等諸多數(shù)據(jù)采集系統(tǒng)中,往往需要實現(xiàn)計算機與單片機之間的數(shù)據(jù)交換,這也就是單片機與計算機之間的通信,以此來充分發(fā)揮單片機與計算機各自的長處,提升整個應(yīng)用系統(tǒng)性能及性價比。傳統(tǒng)的基于RS-232協(xié)議的通信由于傳輸距離短、速度慢、信號易受干擾等不足,使得其應(yīng)用局限性日益突出。有鑒于此,作者在文中討論了如何基于RS-485通信協(xié)議,構(gòu)建RS-485通信網(wǎng)絡(luò),實現(xiàn)若干單片機與計算機之間遠(yuǎn)程通信。
二、硬件設(shè)計
1.RS-485通信簡介
RS-485是EIA(美國電子工業(yè)協(xié)會)制定的平衡發(fā)送、平衡接收的標(biāo)準(zhǔn)異步串行總線,它具有傳輸距離遠(yuǎn)、靈敏度高、多點通信能力強等優(yōu)點。RS-485接口標(biāo)準(zhǔn)參見表一。
2.MAX485芯片介紹
RS-485轉(zhuǎn)換接口芯片我們采用MAXIM公司的MAX485(見圖一),該芯片采用單電源+5V工作,額定電流300uA,半雙工通信方式,它完成將TTL電平轉(zhuǎn)換成
RS -485電平。該芯片具有8條引腳,內(nèi)部含2個驅(qū)動器和接收器,RO,DI分別為接收器的輸出端和驅(qū)動器的輸入端,二者分別接單片機TXD和RXD。 /RE和DE分別為接收和發(fā)送使能端,當(dāng)/RE=0時,MAX485處于接收狀態(tài);當(dāng)DE=1時,MAX485處于發(fā)送狀態(tài)。因為MAX485工作在半雙工狀態(tài),所以它與單片機連接時接線非常簡單,只需用單片機一個管腳控制這兩個引腳即可。A端和B端分別為接收和發(fā)送的差分信號端,當(dāng)VA大于VB時,表示發(fā)送數(shù)據(jù)為“1”,當(dāng)VA小于VB時,表示發(fā)送數(shù)據(jù)為“0”,工作時,A、B之間應(yīng)加匹配電阻,一般可選100~120歐。
.電平轉(zhuǎn)換接口
在PHILIPS P89C51RD2單片機與計算機進(jìn)行通信時,必須對電平作一轉(zhuǎn)換。因為單片機與計算機之間是RS-485網(wǎng)絡(luò),單片機側(cè)信號經(jīng)MAX485后,從TTL 電平轉(zhuǎn)換為RS-485電平信號,因此,在計算機側(cè)必須再把RS-485信號轉(zhuǎn)換成RS-232電平信號,這樣,二者才能正確通信。在本系統(tǒng)采用DAC- 8520轉(zhuǎn)換器,把RS485信號轉(zhuǎn)換為RS-232信號,該轉(zhuǎn)換器數(shù)據(jù)轉(zhuǎn)換傳輸速度快,且不需要用戶對其進(jìn)行初始化和參數(shù)修改。
表一 RS-485接口標(biāo)準(zhǔn)
4.計算機端接口
計算機采用可編程串行異步通信控制器8251A來實現(xiàn),通過對8251A初始化可以控制串行數(shù)據(jù)傳送格式和速度及其工作方式,使得它與單片機的通信方式一致,從而實現(xiàn)計算機與單片機之間的通信。
三、多點通信
3.1多點通信原理
RS485 總線標(biāo)準(zhǔn)是在RS-422基礎(chǔ)上發(fā)展起來的,它增加了多點雙向通信能力,使分布式網(wǎng)絡(luò)的多點通信得以實現(xiàn)。我們在了解了器件的驅(qū)動能力后,就可以根據(jù)需要和驅(qū)動能力加入需要的節(jié)點。本系統(tǒng)就是利用一臺計算機控制多達(dá)32塊單片機,計算機通過發(fā)送控制字和工作方式字來確定和所需要的單片機建立通信連接。單片機根據(jù)計算機發(fā)送的指令進(jìn)行數(shù)據(jù)采集,并根據(jù)需要與計算機交換數(shù)據(jù)或?qū)ιa(chǎn)過程參數(shù)及所連設(shè)備狀態(tài)進(jìn)行調(diào)整。計算機對單片機傳回的數(shù)據(jù)進(jìn)行分析與計算后,再將相關(guān)控制信息傳給單片機。
51 系列單片機用于多點通信時必須工作在方式2或方式3。以方式3為例,每發(fā)送一幀數(shù)據(jù)為11位:1位起始位(0),8位數(shù)據(jù)位和1位停止位(1),附加的第 9位數(shù)據(jù)在非多點通信系統(tǒng)中為奇偶校驗位,在發(fā)送端有SCON的TB8產(chǎn)生,在接收端傳送到RB8。它還可設(shè)定為“0”或“1”作為在多點通信中區(qū)分?jǐn)?shù)據(jù)幀(0標(biāo)志)還是地址幀(1標(biāo)志)的標(biāo)志。在51系列單片機多點通信系統(tǒng)中有以下通信協(xié)議:所有的各從機均處于聽命狀態(tài),即SM2=1,以便接收主機發(fā)送來的地址,當(dāng)接收到一幀信息的RB8為“1”時,表示主機發(fā)送來的是地址信息,所有的從機均發(fā)生接收中斷,否則中斷屏蔽。當(dāng)一從機進(jìn)入相應(yīng)的中斷服務(wù)程序,把接收到的地址和本機的地址比較,如果符合就令其SM2=0,并向主機發(fā)回本機地址以作應(yīng)答,該從機就與主機連通,準(zhǔn)備接收主機發(fā)來的命令或數(shù)據(jù)信息,而其他的未被尋址的從機保持SM2=1并退出各自的中斷服務(wù)程序。這樣,只有SM2=0的從機才能接收到主機發(fā)來的數(shù)據(jù)信息,順利實現(xiàn)地址幀和數(shù)據(jù)幀的分離。被尋址的從機在通信完成后重新使SM2=1,并退出中斷服務(wù)程序,等待下次通信。
3.2多點通信協(xié)議
實現(xiàn)計算機和單片機的正常通信,必須正確設(shè)置它們兩者之間的工作方式,保證雙方都用相同的波特率、起始位、停止位、奇偶校驗位,并且要建立雙方通信的應(yīng)答信號。
單片機既可以工作在同步移位寄存器方式,也可工作在UART(通用異步收發(fā)器)下。串行口的通信方式是由特殊功能寄存器SCON來控制的。其各位定義如下:
SM0, SM1:工作模式設(shè)定位;SM2:允許使用方式2、3多機通信控制位;RB8:接收數(shù)據(jù)第9位;TB8:發(fā)送數(shù)據(jù)第9位;TI發(fā)送中斷標(biāo)志;RI:接收中斷標(biāo)志。本文中工作方式為方式3,即9位UART定時器T1作為波特率發(fā)生器,工作在方式2,若選定波特率為9600bps,則記數(shù)初值為0FAH (SMOD=0,時鐘頻率Fosc為11.0592MHz)
計算機的異步通信接口為INTEL8251A,它可設(shè)定1位、1.5位或2位停止位,數(shù)據(jù)可在5到8位之間選擇,通信頻率為0到9600bps,有奇偶校驗、幀校驗、溢出校驗三種方式??赏ㄟ^對它寫入一定的方式控制字、命令控制字從而進(jìn)行初始化。它的工作狀態(tài)寄存于狀態(tài)寄存器中,可由P89C51RD2的 CPU讀取。通信協(xié)議如下:(1)串行通信波特率為9600bps;(2)幀格式為8位數(shù)據(jù)位,一位起始位,一位可編程的第9位(即發(fā)送和接收的地址/數(shù)據(jù)位的標(biāo)志位),一位停止位;(3)主機和從機遵循主從原則,主機用呼叫方式選擇從機,數(shù)據(jù)在主機和從機之間雙向傳遞,各從機之間的相互通信需通過主機作為中介;(4)主從機之間還應(yīng)傳送一些供它們識別的命令和狀態(tài)字,如以00H表示主機發(fā)送從機接收命令,以01H表示從機發(fā)送主機接收命令等。
四、軟件設(shè)計
該部分主要包括主機程序、從機和其中斷服務(wù)程序組成。主機程序主要完成對串口初始化以及主機與從機之間的通信。而從機主程序主要完成對串口的初始化、波特率的設(shè)置(應(yīng)與主機端的波特率一致),它的中斷程序主要完成P89C51RD2與計算機的數(shù)據(jù)通信。
1. 單片機部分
單片機端程序在KEIL 公司提供的優(yōu)秀可視化集成開發(fā)環(huán)境uVISION2中用C語言編寫。通信波特率9600bps,晶振11.0592Mhz。需要注意的是PHILIPS P89C51RD2的1個機器周期為6個時鐘周期,與標(biāo)準(zhǔn)8051單片機1個機器周期為12個時鐘周期不同,因此,在相關(guān)參數(shù)設(shè)置時要注意這一差別,否則,無法正確建立通信連接。為配合多機通信方式,我們采用工作方式3.
單片機通信流程圖如圖二所示。
單片機串口初始化程序如下:
main( )
{ TMOD = 0x20;
/*定時器1方式2*/
TH1=0xfa;
/*9600波特率晶振11.0592MHz*/
TCON=0x40;
/*啟動定時器1*/
SCON=0x50;
/*允許接收*/
IE=0x90;
/*允許串行口中斷*/
………..
2.計算機部分
計算機端程序我們采用優(yōu)秀的可視化軟件Visual Basic編寫,其中關(guān)鍵部分是引用Visual Basic的串行通信控件MSComm,發(fā)送和接收完全由該控件管理實現(xiàn),而不需要以往繁瑣的驅(qū)動程序編寫。這無疑大大提高了工作效率,降低了開發(fā)成本。
計算機通信流程如圖三所示。
下面給出用VB6編制的通信程序:
Dim inbyte( ) AS Byte ’定義動態(tài)字節(jié)型數(shù)組
Private Sub txd_click( ) ’通信建立及數(shù)據(jù)發(fā)送控制按鈕
If MSComm1.PortOpen = True Then GoTo jj
如通信端口開則跳至jj
MSComm1.CommPort = 1
’通信端口為COM1
MSComm1.Settings = "9600,n,8,1"
’串口初始化為9600波特,8位數(shù)據(jù)位,1位停止位,無校驗
MSComm1.PortOpen = True
’打開通信端口
jj: Mscomm1.output=Text1.text
’發(fā)送地址碼
………..
Mscomm1.output=text2.text ’發(fā)送工作方式控制字,采集通道以及校驗碼
End Sub
Private Sub rxd_click() ’數(shù)據(jù)接收按鈕
Inbyte( )=Mscomm1.input ’接收的數(shù)據(jù)存于動態(tài)字節(jié)數(shù)組
……. ’省略數(shù)據(jù)處理部分
End Sub
五、結(jié)束語
利用RS -485串行通信,可以保證快速、穩(wěn)定、遠(yuǎn)距離傳送數(shù)據(jù)。本文設(shè)計的系統(tǒng)已在智能數(shù)據(jù)采集網(wǎng)絡(luò)儀表中得到成功應(yīng)用,其通信設(shè)計方法還可以稍加修改即可移植到其他的工業(yè)測控系統(tǒng)中。由于本文設(shè)計方法開發(fā)成本低,設(shè)計簡單,在目前及以后的工業(yè)控制和其他方面必將得到越來越多的應(yīng)用。