Delphi中利用SPComm 控件實現(xiàn)的PC 機與單片機串口通訊.doc_第1頁
Delphi中利用SPComm 控件實現(xiàn)的PC 機與單片機串口通訊.doc_第2頁
Delphi中利用SPComm 控件實現(xiàn)的PC 機與單片機串口通訊.doc_第3頁
Delphi中利用SPComm 控件實現(xiàn)的PC 機與單片機串口通訊.doc_第4頁
Delphi中利用SPComm 控件實現(xiàn)的PC 機與單片機串口通訊.doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Delphi中利用SPComm 控件實現(xiàn)的PC 機與單片機串口通訊/365532319/blog/item/8a337a6da6a580f342169421.html2009-03-21 09:40摘 要 本文介紹一種基于Delphi語言利用SPComm控件實現(xiàn)PC機與單片機串口通訊的軟硬件實現(xiàn)方法。給出硬件設(shè)計思路,介紹SPComm控件的使用發(fā) 法。詳細(xì)介紹PC機與單片機多機通訊的通訊原理,通訊協(xié)議以及軟件實現(xiàn)方法。著重介紹上位機通訊軟件實現(xiàn)過程中幾個重點環(huán)節(jié)的解決發(fā)法。 關(guān)鍵詞 串口通訊;RS-232;RS-485;SPComm; Delphi; PC機1引言隨 著計算機網(wǎng)絡(luò)通訊與信息技術(shù)的高速發(fā)展,采用PC與多臺單片機構(gòu)成的分布式系統(tǒng)、工業(yè)控制系統(tǒng)、數(shù)據(jù)傳輸系統(tǒng)等越來越受到廣泛應(yīng)用。下位機采用運行性能較 為可靠的單片機,直接對所控制對象進(jìn)行實時數(shù)據(jù)的采集、計算、判斷和處理;而上位機則多采用PC機(如Pentium系列),主要負(fù)責(zé)對各單片機進(jìn)行綜合 管理,以實現(xiàn)測控系統(tǒng)的自動檢測與控制。在這類應(yīng)用系統(tǒng)中,穩(wěn)定可靠、方便快捷的數(shù)據(jù)通信是實現(xiàn)應(yīng)用系統(tǒng)功能的基礎(chǔ)和保障。因此,如何根據(jù)系統(tǒng)的實際工作 環(huán)境條件,選擇恰當(dāng)?shù)耐ㄐ沤涌诤蛥f(xié)議,合理設(shè)計通信軟件和硬件控制電路以獲得高可靠性,強抗干擾和容錯能力成為衡量此類系統(tǒng)好壞的最重要因素。本文以某一工程項目通訊系統(tǒng)為例,介紹一種基于Delphi語言利用SPComm控件實現(xiàn)了計算機與下位AT80C51單片機之間通信的軟硬件設(shè)計與實現(xiàn),并給出關(guān)鍵環(huán)節(jié)的具體的實現(xiàn)方法。2硬件系統(tǒng)* 本文出處:南山古桃(nsgtao)的百度空間:/nsgtao/ * 該系統(tǒng)以PC機作為上位主機,各下位機由AT80C51單片機組成,各下位機之間無數(shù)據(jù)傳輸,只與主機產(chǎn)生數(shù)據(jù)交換。根據(jù)該工程的特點,各單片機與PC機以RS-485總線連接。由 于微機串口通常采用RS-232電平,而單片機串口是TTL電平,二者不兼容。所以,接口必須做電平轉(zhuǎn)換處理。單片機串行口的TXD、RXD經(jīng) MAX485電平轉(zhuǎn)換為RS-485電平,在主機端經(jīng)MAX485和MAX232轉(zhuǎn)換為RS-232電平,再與微機的RxD、TxD和GND相連。為了提 高可靠性和抗干擾能力。在本項目工程中,可以對下位機主控板上的通信部分進(jìn)行光電隔離。這樣的話,使得即便是有超越MAX485的ESD保護范圍的靜電或 雷電感應(yīng)在信號線上,也只會毀壞驅(qū)動器或光耦合,不至于破壞整個后級系統(tǒng)。同時,通信總線采用屏蔽線,各段線路屏蔽層相聯(lián)接,集中到某一處,采用了必要的 接地措施。布置總線時盡量避免了與高壓電或動力電線路平行,無法避免時,盡量讓兩者之間距離足夠大。其接口系統(tǒng)結(jié)構(gòu)圖如圖所示:3系統(tǒng)軟件設(shè)計1) 通訊協(xié)議在 本系統(tǒng)中,PC機是主控單元,單片機是PC機信息的接受者。由于涉及到單片機多機通訊,因此串行口工作方式選為方式3,通訊格式為每11位構(gòu)成一串行幀: 1位起始位(0),8位數(shù)據(jù)位(最低有效位在前),1位地址幀識別位(1),1位停止位(1),無奇偶校驗位(其中第9位進(jìn)到單片機RB8)。該設(shè)計中, 每次通訊過程總是由上位PC機首先發(fā)起,通訊時單片機先進(jìn)入通訊狀態(tài),等待與計算機通訊。其過程分為以下幾步:(1) 通訊前每臺單片機設(shè)置一個地址。所有單片機SCON寄存器中的SM2位置1,準(zhǔn)備接收地址幀。(2) PC機向所有單片機發(fā)地址幀,單片機接收到地址幀后與本機地址比較,若不同則不動作,繼續(xù)等待下一個地址幀;若相同,返回本機地址確認(rèn)。(3) 主機接收到地址確認(rèn)后,按要求向目標(biāo)發(fā)送命令字。傳送數(shù)據(jù)命令:可根據(jù)要求單片機發(fā)送的數(shù)據(jù)的不同具體定義,為8位單字節(jié)數(shù) ;接收數(shù)據(jù)命令:&EFh;(4) 目標(biāo)單片機接收到命令字后:按要求動作。接收到“請求接收命令”:發(fā)&FEh(若做好接收準(zhǔn)備),發(fā)&00h(若未準(zhǔn)備好發(fā)送)。接收到“請求發(fā)送數(shù)據(jù)”:按指定要求發(fā)送數(shù)據(jù)。* 本文出處:南山古桃(nsgtao)的百度空間:/nsgtao/ *(5) 由于數(shù)據(jù)傳輸是在強干擾的環(huán)境中進(jìn)行的,而且傳輸距離又較遠(yuǎn),為了保證數(shù)據(jù)能高速、準(zhǔn)確傳輸,軟件編程考慮對大批量數(shù)據(jù)進(jìn)行分組傳送,同時對每組數(shù)據(jù)進(jìn)行 和校驗,檢查其準(zhǔn)確性。PC機每次接收到一組數(shù)據(jù),均要進(jìn)行再次和校驗,然后將PC機的校驗和結(jié)果和單片機傳送過來的校驗和相比較,若兩者不等則說明傳輸 有錯校驗失敗,PC機給單片機發(fā)重傳命令,要求單片機重新發(fā)送該組數(shù)據(jù)。若校驗正確,PC機發(fā)確認(rèn)信號,并準(zhǔn)備接收下一組采樣數(shù)據(jù)。 在傳輸過程中上位機發(fā)送出去的數(shù)據(jù)有三類:從機地址;命令字;向下位機發(fā)送的數(shù)據(jù)包;收到的數(shù)據(jù)有兩類:從下位單片機發(fā)來的確認(rèn)信號;從下位機傳來的數(shù)據(jù);下位單片機接收和發(fā)送的數(shù)據(jù)與之對應(yīng)不再贅述。2) 上位機軟件設(shè)計在Delphi 中進(jìn)行串行通訊的方法可以分成以下幾種:本文采用了Spcomm 控件, 其功能強大, 使用方便, 具有豐富的與串口通訊密切相關(guān)的屬性事件和方法, 提供了對串口的各種操作。其主要事件及方法如下:主要事件:Onrececvedata: 當(dāng)有數(shù)據(jù)輸入緩存時, 將觸發(fā)該事件。OnreceiveError: 當(dāng)接收數(shù)據(jù)出現(xiàn)錯誤時, 觸發(fā)該事件。主要方法:Startcomm: 用于打開串口, 當(dāng)打開失敗時通常會報錯。Stopcomm: 用于關(guān)閉串口, 沒有返回值。Writecommdata: 用于將一個字符串發(fā)送到寫進(jìn)程。利用Spcomm控件編寫上位機程序,簡單快捷,靈活方便,實現(xiàn)過程中有以下關(guān)鍵點需要注意:* 本文出處:南山古桃(nsgtao)的百度空間:/nsgtao/ *(1) 地址幀的產(chǎn)生。由于PC機沒有像單片機一樣的串口工作方式,因此不能自動生成地址幀。設(shè)計軟件時應(yīng)人工生成地址幀。單片機串口工作在方式3時地址幀的格式如圖2所示:A7 A6 A5 A4 A3 A2 A1 A0 1即八位數(shù)據(jù)后加一位“1”。因此可以利用Spcomm控件中的奇偶校驗位來模擬,方法是:form1.Comm1.ParityCheck:=false;form1.Comm1.Parity:=mark;form1.Comm1.ParityCheck:=true;這樣在發(fā)出的一個字節(jié)的數(shù)據(jù)末尾會加上一個“1”,也就形成了地址幀。當(dāng)然在發(fā)送其他數(shù)據(jù)時,應(yīng)該先把最后一位清零“0”:S3C2410 ARM9開發(fā)板800form1.Comm1.ParityCheck:=false;form1.Comm1.Parity:=space;form1.Comm1.ParityCheck:=true;(2) 在PC機端的MAX485芯片的收發(fā)狀態(tài)可以利用DTR(九針串口第四針)引腳來控制。對于Spcomm控件來說,屬性中有DtrControl屬性,利 用該屬性可以方便地對DTR引腳進(jìn)行高低電平控制。該屬性可以取三個值,分別為:DtrEnable,DtrDisable,DtrHandshake, 本設(shè)計中只用到前兩個值。form1.Comm1.DtrControl:=DTREnable; /DTR引腳有效form1.Comm1.DtrControl:=DTRDisable; /DTR引腳無效(3) 校驗和的產(chǎn)生。為了增強數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,采用校驗和的檢驗方式。本設(shè)計里校驗和的產(chǎn)生分兩部分,一部分是發(fā)送數(shù)據(jù)之前,要對發(fā)送的數(shù)據(jù)進(jìn)行累加產(chǎn)生校驗 和發(fā)送出去,這個校驗和稱為源校驗和(sorcechksum)。 另一部分是在接收數(shù)據(jù)是,要將接收到的數(shù)據(jù)累加產(chǎn)生一個目的校驗(orgchksum)和用來與接收到的校驗和相比較。此兩部分的程序?qū)崿F(xiàn)如下:function addchksum(sorstring:string): string;vari,j,chksum: integer;beginj:=length(sorstring);chksum:=0;for i:=1 to j do begin chksum:=(chksum+ord(sorstringi) and $FF; /產(chǎn)生源校驗和 result:= sorstring+inttohex(chksum,2)+chr(13); /將源校驗和加在發(fā)送字符串尾end;end;/*/function examchksum(var inbuf:array of char;strlen:WORD):boolean;var i:integer; sorchksum,orgchksum:integer;begin orgchksum:=0; for i:= 0 to strlen-4 do begin orgchksum:=(orgchksum+ord(inbufi)and $FF; /產(chǎn)生目的校驗和 end; sorchksum:=strtoint($+copy(inbuf,strlen-3+1,2); /將源校驗和分離出來 if orgchksum=sorchksum then result:=true /比較目的校驗和與源校驗和 else result:=false;end;(4) 數(shù)據(jù)的接收和發(fā)送是將一組數(shù)據(jù)看成一個String類型數(shù)據(jù)來操作的,而Delphi中使用的是Pascal字符串,因此在發(fā)送之前應(yīng)該用Pchar()函數(shù)對要發(fā)送的數(shù)據(jù)進(jìn)行轉(zhuǎn)換:WriteCommData(Pchar(outstri),1); /參數(shù)分別為發(fā)送字符串首地址,要發(fā)送的字符串?dāng)?shù)。Spcomm控件中的數(shù)據(jù)接收發(fā)式是事件觸發(fā)方式。OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object當(dāng) 輸入緩存有數(shù)據(jù)時將觸發(fā)該事件,在這里可以對從串口收到的數(shù)據(jù)進(jìn)行處理。Buffer中是收到的數(shù)據(jù),bufferlength是收到的數(shù)據(jù)長度。 因此對于PC機來說可以通過bufflength的長度來區(qū)分?jǐn)?shù)據(jù)和從單片機返回的確認(rèn)信號。本設(shè)計規(guī)定命確認(rèn)信號為一個字節(jié),而數(shù)據(jù)的傳輸由于加上校驗 和至少為兩個字節(jié)。(5) 為了防止實際工作中當(dāng)向某臺從機發(fā)送地址幀或命令字后,如果失去接收主機發(fā)出的地址數(shù)據(jù)的機會,或因某臺從機不工作而使系統(tǒng)陷入“死循環(huán)”程序而不能正常 工作。為了避免這種情況的發(fā)生,在設(shè)計時還要考慮一定的容錯機制,本設(shè)計中采用的方法是在發(fā)送完地址幀和命令字后,程序開始計時。如果超過一定時間還沒收 到返回確認(rèn)信息,就重發(fā)剛剛發(fā)送的數(shù)據(jù)如果重發(fā)3確認(rèn)還沒收到確認(rèn)信息,即報告出錯,并記錄該出錯單片機地址。本設(shè)計利用WindowsAPI函數(shù)編寫一 個延時小程序:procedure TimeDelay(DT:DWORD); /DT為延時時間(ms)var TT:DWORD;beginTT:=GetTickCount(); /調(diào)用API函數(shù)while GetTickCount()-TTDT do Application.ProcessMessages; /系統(tǒng)掛起end;3) 下位機軟件設(shè)計根據(jù)該工程特點,通訊只在特定時間進(jìn)行,因此下位機只須采用查詢方式與主控機通信:當(dāng)主控機需要發(fā)送或讀取下位機數(shù)據(jù)時,事先控制下位機進(jìn)入通訊狀態(tài),初始化串口,等待PC機請求接收和發(fā)送數(shù)據(jù)。本設(shè)計采用C51語言進(jìn)行編寫,下位機主程序流圖如下圖所示。4 結(jié)束語 經(jīng)過試運行該系統(tǒng)工作穩(wěn)定,收發(fā)數(shù)據(jù)可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論