PC機與多臺單片機實時通信系統(tǒng)的設(shè)計與實現(xiàn)
1 引言
集散控制系統(tǒng)(DCS)又名分布式計算機控制系統(tǒng),是利用計算機技術(shù)對生產(chǎn)過程進行集中監(jiān)測、操作、管理和分散控制的一種新型技術(shù)。在現(xiàn)代化工業(yè)過程控制系統(tǒng)中,集散控制系統(tǒng)已成為過程自動化系統(tǒng)發(fā)展的主流。然而,在工業(yè)控制領(lǐng)域,控制系統(tǒng)除了要求具有極高的可靠性外,還必須具有較強的實時響應(yīng)能力和友好的人機交互界面。
本系統(tǒng)主要通過PC機與多臺單片機構(gòu)成小型集散控制系統(tǒng)來進行通信,既充分利用PC機豐富的軟硬件資源實現(xiàn)友好的人機界面,又通過RS-232C/485總線結(jié)構(gòu)與8251單片機進行通信,對多臺單片機進行數(shù)據(jù)采集和處理。
2 控制系統(tǒng)硬件電路設(shè)計
本系統(tǒng)在電路形式上比較簡單,其原理框圖如圖1所示。
2.1 通信控制器電路分析與設(shè)計
通信控制器的主要作用是完成主機和從機之間的通信??刂破鞯暮诵氖且慌_AT89S51單片機,它僅具有一個可編程的全雙工串行通信接口,而作為通信控制器需要同時與主機(PC機)和從機進行串行通信,因此就利用單片機的并行數(shù)據(jù)接口實現(xiàn)串口的擴展,這里選擇了8251作為單片機的串口擴展芯片。8251是用于串行數(shù)據(jù)通信的USART(通信同步/異步收發(fā)器),它可以從單片機接收并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)發(fā)送出去,也可以從外部接收串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)傳送至單片機。并且8251僅占用2個外部數(shù)據(jù)空間地址單元,對它的讀、寫訪問如同訪問外部RAM一樣方便, 、 信號均由單片機提供,需要設(shè)計的只有片選信號。此外,8251提供的RXRDY和TXRDY引腳可以用來觸發(fā)單片機的外部中斷,通知單片機8251可以進行新數(shù)據(jù)的發(fā)送或已經(jīng)接收到新的數(shù)據(jù)。根據(jù) 8251的特性設(shè)計的單片機串口擴展電路如圖2所示。
圖2 基于8251的單片機串口擴展電路
從圖2可以看出,8251的指令/數(shù)據(jù)選擇引腳接到了單片機的地址線A0,這樣可以通過2個不同的地址來區(qū)分對8251的命令寫、數(shù)據(jù)寫或狀態(tài)讀、數(shù)據(jù)讀。進一步分析可以發(fā)現(xiàn)8251的片選引腳 與單片機地址線A15通過反相器后的相連,使得8251在外部數(shù)據(jù)空間8000H~FFFFH之間32KB的范圍內(nèi)可以隨意選擇地址,這里選擇8000H(訪問數(shù)據(jù))和8001H(訪問指令 /狀態(tài))兩個地址。8251的RXRDY引腳通過一個非門后連接至單片機的 引腳,當8251從主機接收到數(shù)據(jù)時就會引起單片機中斷。
MC14060用于為8251提供時鐘信號,其中包括用于產(chǎn)生8251內(nèi)部的時鐘CLK、用于決定發(fā)送數(shù)據(jù)傳輸速率的時鐘 和用于決定接收數(shù)據(jù)傳輸速率的時鐘 。CLK連接到MC14060的OUT2輸出引腳, 和 同時連接到MC14060的Q5輸出引腳。MC14060的時鐘輸入頻率為2.4576MHz,則OUT2引腳輸出的頻率為2.4576MHz,Q5引腳輸出的頻率為2.4576MHz/25=76.8kHz。那么8251發(fā)送數(shù)據(jù)的時鐘 和接收數(shù)據(jù)的時鐘 均為76.8kHz,通過單片機編程將8251的數(shù)據(jù)傳輸速率因子設(shè)置為1/16,則8251的串口發(fā)送和接收數(shù)據(jù)的波特率為76800/16=4800bit/s。
控制器與主機的通信是通過8251來實現(xiàn)的,8251帶有一個全雙工的串口,但它的串行數(shù)據(jù)接口并不是RS-232C標準串口,必須通過外接RS-232 收發(fā)器芯片才能與主機的串口連接起來通信,這里選擇的RS-232收發(fā)器芯片是MAXIM公司的MAX232C。MAX232C包含兩個發(fā)送器和兩個接收器,這里只需使用其中任意一組發(fā)送器和接收器即可。
由于控制器與從機之間的通信是多點的串行通信,所以選擇了MAXIM公司的MAX485芯片來實現(xiàn)控制器與從機之間的多機通信系統(tǒng)。因為信號在傳輸線上傳送時,若遇到阻抗不連續(xù)的情況,會出現(xiàn)反射現(xiàn)象從而影響信號的遠距離傳輸,所以必須采用匹配的辦法來消除反射。雙絞線的特性阻抗一般在 110~130Ω之間,它與線的絕緣材料的厚度及導線的直徑有關(guān),所以通常在RS-485總線末端接入120Ω的電阻是為了對通信線路進行阻抗匹配。
由于MAX485為半雙工通信方式,不能同時發(fā)送和接收數(shù)據(jù),只能通過控制和DE引腳的狀態(tài)來進行發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的轉(zhuǎn)換。這里將MAX485的和DE引腳連在一起接到單片機的P10口,通過單片機的P10口來控制MAX485發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的轉(zhuǎn)換,當P10為低電平時MAX485處于接收數(shù)據(jù)狀態(tài),而當P10為高電平時MAX485則處于發(fā)送數(shù)據(jù)狀態(tài)。MAX485的RO引腳接到單片機的串口接收引腳RXD, MAX485的DI引腳接到單片機的串口發(fā)送引腳TXD。
在通信速率要求不是很高的情況下,RS-485總線的通信距離可以達到1200m,這樣就可以通過多臺單片機來構(gòu)建一個遠程多機通信系統(tǒng)。
2.2 從機部分硬件電路分析與設(shè)計
在本系統(tǒng)中,從機主要完成信號采集與顯示輸出。這里采用A/D轉(zhuǎn)換芯片ADC0804完成模擬信號的采集?;贏DC0804所設(shè)計的A/D采集電路采用阻容元件來搭建ADC0804的時鐘電路。電阻R=10k,電容=150p,經(jīng)計算,時鐘頻率
電位器RP1用于提供ADC0804的參考電壓,調(diào)整電位器,使ADC0804的Vref/2引腳的電壓為2.56V。電位器RP2用于提供ADC0804的輸入電壓,調(diào)整RP2即可使輸入電壓在0~5V內(nèi)變化。將ADC0804的 引腳接到單片機的 引腳,即每次ADC0804轉(zhuǎn)換完成后就會使單片機進入中斷來處理ADC0804輸出的8位數(shù)字信息。
此外,從機還要將主機發(fā)送過來的信息顯示出來,以表明從機接收到了主機發(fā)來的信號。系統(tǒng)中采用了8個LED連接到單片機的P2口作為顯示輸出,可以將主機發(fā)送過來的十六進制數(shù)據(jù)以二進制方式顯示出來。由于單片機端口的驅(qū)動能力有限,不能用高電平直接驅(qū)動LED,所以將LED采用共陽極接法。
在從機工作的過程中,可能會出現(xiàn)各種異常狀況,需要將報警信息及時反饋給主機。為了模擬從機異常報警過程,在單片機的外部中斷 輸入端連接一個按鍵,利用按鍵觸發(fā)外部中斷來報警。當按下鍵時,從機會將報警信息發(fā)送給控制器,控制器收到后再將報警信息傳遞給主機,在主機界面上就會彈出一個對話框顯示是幾號從機報警。
3 集散控制系統(tǒng)軟件設(shè)計
3.1控制器和從機的軟件設(shè)計
控制器軟件設(shè)計的主要任務(wù)是完成主機和從機之間的數(shù)據(jù)交換,而從機軟件設(shè)計的主要任務(wù)是完成A/D采集并將采集的數(shù)據(jù)上傳給控制器,能夠?qū)⒅鳈C發(fā)送過來的數(shù)據(jù)輸出顯示,而且可以通過按鍵中斷觸發(fā)報警。
控制器與主機之間的通信是通過8251來實現(xiàn)的,8251的功能配置由單片機通過軟件編程方式實現(xiàn),單片機可以通過8位并行數(shù)據(jù)接口向8251寫入待發(fā)送的數(shù)據(jù)、命令或者從8251讀出接收的數(shù)據(jù)、狀態(tài)。在軟件設(shè)計上可以分為兩部分,一部分是控制器向主機發(fā)送數(shù)據(jù),另一部分是控制器從主機接收數(shù)據(jù),程序流程圖分別如圖3和圖4所示。注意必須先讀取8251的狀態(tài)字,當發(fā)送數(shù)據(jù)標志位TXRDY為1時才能通過8251向主機發(fā)送數(shù)據(jù)??刂破髟谥袛喾?wù)程序中處理從主機接收到的數(shù)據(jù)。
控制器與從機間的通信主要是利用了51單片機串口的多機通信功能。在多機通信中,為了保證主機與所選擇的從機實現(xiàn)可靠的通信,必須保證通信接口具有識別功能,可以通過控制單片機的串口控制寄存器SCON中的SM2位來實現(xiàn)多機通信功能??刂破骱蛷臋C在接收串行數(shù)據(jù)時均采用中斷方式??刂破髋c從機通信是通過MAX485來實現(xiàn)的,必須先將單片機的P10口置1,使MAX485處于發(fā)送數(shù)據(jù)的狀態(tài),然后才能發(fā)送數(shù)據(jù),發(fā)送完數(shù)據(jù)后必須將單片機P10口置 0,使MAX485處于接收數(shù)據(jù)的狀態(tài)。
從機的A/D采集采用中斷方式通知從機接收數(shù)據(jù)。當從機接收到的數(shù)據(jù)為#0AAH時,從機就將A/D轉(zhuǎn)換的數(shù)據(jù)發(fā)送給控制器,發(fā)送的數(shù)據(jù)每隔1s更新一次;當數(shù)據(jù)為#0BBH時,從機就停止向控制器發(fā)送A/D轉(zhuǎn)換的數(shù)據(jù);當數(shù)據(jù)為其它時就輸出顯示。由于在實際應(yīng)用中前端控制系統(tǒng)可能會出現(xiàn)各種各樣的報警信息,所以在這里通過一個按鍵觸發(fā)中斷來模擬報警情況的發(fā)生。
3.2 主機通信控制軟件設(shè)計與測試
3.2.1 主機通信控制軟件設(shè)計
主機控制軟件設(shè)計主要是針對串口的操作,通過建立主界面對話框及添加變量,串口初始化,串口事件消息處理,發(fā)送數(shù)據(jù),查看數(shù)據(jù),選擇從機號查看狀態(tài),選擇從機號控制狀態(tài)并且編寫VC++程序來實現(xiàn)可視化界面及其功能。
3.2.2 從機狀態(tài)控制測試
在測試時,將主機、控制器和兩臺從機全部連上,在主機對話框的從機狀態(tài)控制欄里,選擇1號機,在編輯框中輸入十六進制數(shù)據(jù)“12”,然后點擊“發(fā)送”按鈕,如圖5所示。1號機收到數(shù)據(jù)后就會將數(shù)據(jù)用8位LED以二進制方式顯示出來,LED顯示為“00010010”。
圖5 從機狀態(tài)控制測試
圖6 從機狀態(tài)控制測試
圖7 顯示1號機報警信息
3.2.3 從機狀態(tài)查看測試
在從機狀態(tài)查看欄里,選擇1號機,點擊查看按鈕,如圖6所示,編輯框里就會將1號機A/D采集到的數(shù)據(jù)以十六進制的方式顯示出來。當調(diào)整ADC0804的輸入電壓時,編輯框中的數(shù)據(jù)就會隨著輸入電壓的變化每隔1s更新一次。同樣,當查看2號機時,也能夠正常工作。
3.2.4 從機報警測試
在從機部分通過按鍵觸發(fā)中斷的方式來模擬報警情況的發(fā)生,當按下1號機的按鍵時,在主機的界面上就會彈出一個菜單顯示“1號機報警”,如圖7所示;當按下2號機的按鍵時,在主機的界面上就會彈出一個菜單顯示“2號機報警”。
4 結(jié)論
針對集散控制系統(tǒng)的廣泛應(yīng)用,提出了一種新的由一臺PC機和多臺單片機組成的一個小型集散控制系統(tǒng)的結(jié)構(gòu),實現(xiàn)了PC機與多臺單片機間的通信任務(wù)。本文作者創(chuàng)新點:既充分利用PC機豐富的軟硬件資源實現(xiàn)友好的人機界面,又通過RS-232C/485總線結(jié)構(gòu)與8251單片機進行通信,對多臺單片機進行數(shù)據(jù)采集和處理。本系統(tǒng)不僅硬件實現(xiàn)簡單,而且軟件實現(xiàn)可靠。通過長時間長距離的測試,證明該方法思路簡單,價格低、功能強、抗干擾能力好、溫限寬、通訊可靠,是一種有效的多機通訊方法。同時,系統(tǒng)可以通過串口通訊,擴展為更高級別的集散控制系統(tǒng)。因此,這種小型集散控制系統(tǒng)有著廣闊的應(yīng)用前景。
參考文獻
[1] 肖金球等.一種多智能儀表DCS系統(tǒng)的研究.微計算機信息,2005,21(6):23-25
[2] 張毅剛.新編MCS-51單片機應(yīng)用設(shè)計.哈爾濱:哈爾濱工業(yè)大學出版社,2003.257-262
[3] 李朝青.PC機及單片機數(shù)據(jù)通信技術(shù).北京:北京航空航天大學出版社,2000.94-112
[4] 鄭學堅,周斌.微型計算機原理及應(yīng)用(第三版).北京:清華大學出版社,2003.216-224
[5] 樓然苗,李光飛.51系列單片機設(shè)計實例.北京:北京航空航天大學出版社,2003.44-48
[6] 求是科技.Visual C++串口通信技術(shù)與工程實踐.北京:人民郵電出版社,2004.55-65
[7] 龔建偉,熊光明.Visual C++/Turbo C串口通信編程實踐.北京:電子工業(yè)出版社,2004.
[8] ATMEL.AT89S51 Databook.2001
[9] MAXIM.MAX485 Databook.1996
評論