Delphi 第10章_串口通信編程_第1頁(yè)
Delphi 第10章_串口通信編程_第2頁(yè)
Delphi 第10章_串口通信編程_第3頁(yè)
Delphi 第10章_串口通信編程_第4頁(yè)
Delphi 第10章_串口通信編程_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第10章 Delphi XE8 串口通信Delphi 程序設(shè)計(jì)教程(第3版)清華大學(xué)出版社 楊長(zhǎng)春 主編用Delphi xe8實(shí)現(xiàn)串口通信,最常用的幾種方法為:使用API函數(shù)、使用組件(如MSComm等)或者在Delphi中調(diào)用其他串口通信程序。10.1 RS-232C標(biāo)準(zhǔn)所謂串行通信接口標(biāo)準(zhǔn),是指串行通信接口與外設(shè)的信號(hào)連接標(biāo)準(zhǔn)。實(shí)際中常用的串行通信接口標(biāo)準(zhǔn)有3種:RS-232C,RS-422A/423A和20mA電流環(huán)。常用的PC機(jī)都配置了RS-232C標(biāo)準(zhǔn)接口。RS-232C標(biāo)準(zhǔn)常簡(jiǎn)稱(chēng)為RS-232。RS-232C的定義包括電氣特性(如電壓值)、機(jī)械特性(如接頭形狀)及功能特性(如腳位信

2、號(hào))等。串行通信接口基本功能是:在發(fā)送時(shí),把CPU送來(lái)的并行碼轉(zhuǎn)換成串行碼,逐位地依次發(fā)送出去;在接收時(shí),把發(fā)送過(guò)來(lái)的串行碼逐位地接收,組裝成并行碼,并行地發(fā)送給CPU去處理。這種串行到并行轉(zhuǎn)換的功能,常用硬件電路來(lái)實(shí)現(xiàn),這種硬件電路叫做串行通信接口。普通的Modem通常都是通過(guò)RS-232C串行口信號(hào)線與計(jì)算機(jī)連接。 根據(jù)RS-232C標(biāo)準(zhǔn)規(guī)定,接口電路采用一對(duì)物理D型連接器:DTE設(shè)備應(yīng)該有一個(gè)D型插頭接口,DCE設(shè)備應(yīng)該有一個(gè)D型插座接口。 D型連接可以是25芯(簡(jiǎn)稱(chēng)為DB25),也可以是9芯(簡(jiǎn)稱(chēng)為DB9)。RS-232C引腳分配如圖10-1所示。圖10-1 DB25與DB9引腳分配圖

3、10.1.1信號(hào)連接RS-232C規(guī)定使用一種DB25連接器,其中20個(gè)腳作了定義,9、10、11、18、25未作定義。 RS-232C串行口信號(hào)分為3類(lèi):傳送信號(hào)、聯(lián)絡(luò)信號(hào)和信號(hào)地。1傳送信號(hào)(TxD和RxD)傳送信號(hào)是經(jīng)由(發(fā)送數(shù)據(jù)信號(hào)線,引腳)傳送和(接收數(shù)據(jù)信號(hào)線,引腳)接收的信息格式即一個(gè)傳送單位(字節(jié))由起始位、數(shù)據(jù)位、奇偶校驗(yàn)和停止位組成。2聯(lián)絡(luò)信號(hào)(RTS、CTS、 DTR、DSR、DCD和RI等個(gè)信號(hào))RTS(請(qǐng)求傳送,引腳),是PC向Modem發(fā)出的聯(lián)絡(luò)信號(hào)。高電壓表不PC機(jī)請(qǐng)求向Modem傳送數(shù)據(jù)。CTS(清除發(fā)送,引腳),是Modem向PC機(jī)發(fā)出的聯(lián)絡(luò)信號(hào)。高電壓表示M

4、odem響應(yīng)PC發(fā)出的RTS信號(hào),且準(zhǔn)備向遠(yuǎn)端Modem發(fā)送數(shù)據(jù)。DTR(數(shù)據(jù)終端就緒,引腳),是PC向Modem發(fā)出的聯(lián)絡(luò)信號(hào)。高電壓表示PC機(jī)處于就緒狀態(tài),本地Modem和遠(yuǎn)端Modem之間可以建立通信信道。若為低電平,則強(qiáng)迫Modem終止通信。DSR(數(shù)據(jù)裝置就緒,引腳),是Modem向PC發(fā)出的聯(lián)絡(luò)信號(hào)。它指出本地Modem的工作狀態(tài),高電壓表示Modem沒(méi)有處于測(cè)試通話(huà)狀態(tài),可以和遠(yuǎn)端Modem建立通道。DCD(傳送檢測(cè),引腳),是Modem向PC發(fā)出的狀態(tài)信號(hào),高電壓表示本地DCE接收遠(yuǎn)端Modem發(fā)來(lái)的載波信號(hào)。RI(鈴指示,引腳),Modem向PC發(fā)出的狀態(tài)信號(hào)。高電壓表示本地

5、Modem收到遠(yuǎn)端Modem發(fā)來(lái)的振鈴信號(hào)。3SG(信號(hào)地)SG(信號(hào)地,引腳)為相連的PC和Modem提供同一電勢(shì)參考點(diǎn)。10.1.2 握手DTE和DCE之間要實(shí)現(xiàn)雙向通信,至少需要條信號(hào)線:TxD使數(shù)據(jù)從DTE到ECE。RxD使數(shù)據(jù)從ECE到ETE,SG為信號(hào)地。必須使用握手信號(hào),它提供了一種控制數(shù)據(jù)流的方法,即接收設(shè)備可以控制發(fā)送設(shè)備的數(shù)據(jù)發(fā)送。 在異步串行通信中,這稱(chēng)之為握手(handshaking)或流量控制(flow control)。握手控制可以具體分為硬件握手(硬件流控)和軟件握手(軟件流控)。1硬件握手 硬件握手是使用專(zhuān)門(mén)的握手電路去控制數(shù)據(jù)的傳輸。當(dāng)接收設(shè)備準(zhǔn)備好之后,就通

6、過(guò)專(zhuān)用的握手電路傳送一個(gè)正電壓給發(fā)送設(shè)備,指示發(fā)送設(shè)備數(shù)據(jù)。如果接收傳送一個(gè)負(fù)電壓給發(fā)送設(shè)備,則指示發(fā)送設(shè)備停止發(fā)送數(shù)據(jù)。為了完成數(shù)據(jù)通信需要有類(lèi)電路:數(shù)據(jù)線、信號(hào)線和握手線。(1)DTE到DCE為了控制DTE的發(fā)送數(shù)據(jù),DCE使用DSR信號(hào)作為主握手信號(hào)去通知DTE已做好接收數(shù)據(jù)庫(kù)的準(zhǔn)備。當(dāng)通知DTE暫停發(fā)送數(shù)據(jù)時(shí),置DSR無(wú)效。(2)DCE到DTE為了控制DCE的數(shù)據(jù)發(fā)送,DTE使用DTR信號(hào)作為主握手信號(hào)去通知DCE已做好接收數(shù)據(jù)的準(zhǔn)備。當(dāng)通知DCE暫停發(fā)送數(shù)據(jù)時(shí),置DTR無(wú)效。DTE還使用RTS信號(hào)作為第二握手信號(hào)控制DCE設(shè)備。僅當(dāng)這兩條握手線都有效時(shí),DCE才發(fā)送數(shù)據(jù)。RIDTRD

7、CTSGDSRCTSRTSRxDTxD2345678202223456782022圖12-2 有握手功能的雙向通信(3)雙向通信雙向通信中只使用主握手線,則共需要5條信號(hào)線:TxD、RxD、DSR、DTR和SG。如果還使用第二握手線,則共需要7條信號(hào)線。為了使DCE能向DTE提供更多信息,通常還使用RI和DCE兩條信號(hào)線。這樣一個(gè)完整的異步串行通信必需的就是這9條信號(hào)線 。2軟件握手軟件握手的原理機(jī)制與硬件握手基本相同,不同的握手信號(hào)是在數(shù)據(jù)線(TxD和RxD)上進(jìn)行傳送的,而不是在專(zhuān)門(mén)握手線上傳送。這是因?yàn)檐浖帐中盘?hào)是由特殊字符組成的,所以傳送這些字符必須使用數(shù)據(jù)電路,而不是使用專(zhuān)門(mén)握手電

8、路。這種方法常用在直接連接或通過(guò)Modem連接的兩臺(tái)計(jì)算機(jī)之間進(jìn)行雙向通信的場(chǎng)合。 軟件握手最常用的協(xié)議是XON/XOFF協(xié)議。該協(xié)議主要解決通信雙方處理速度不區(qū)配的問(wèn)題,協(xié)議規(guī)定發(fā)送XOFF表示暫停發(fā)送數(shù)據(jù),發(fā)送XON表示繼續(xù)發(fā)送數(shù)據(jù)。3硬件與軟件相結(jié)合的握手為了綜合硬件握手和軟件握手的好處,可以采用硬件和軟件相結(jié)合的握手控制。假設(shè)DTE設(shè)備為計(jì)算機(jī),DCE設(shè)備為Modem,兩臺(tái)計(jì)算機(jī)之間通過(guò)Modem經(jīng)電話(huà)線連接,則此時(shí)計(jì)算機(jī)與Modem之間可采用硬件握手方法,而兩臺(tái)計(jì)算機(jī)之間可以使用軟件握手方法進(jìn)行聯(lián)系。10.1.3 微機(jī)的RS-232C接口個(gè)人計(jì)算機(jī)的RS-232C接口名稱(chēng)有多個(gè):RS

9、-232C口、串口、通信口、COM口、異步口等。目前DOS3.3以上版本和Windows 3.2/98/NT最多支持個(gè)串口:COM1、COM2、COM3和COM4。 它們所占用的I/O口地址和中斷號(hào)見(jiàn)表 :串口串口 I/O地址地址 中斷號(hào)中斷號(hào) COM1 0 x3f8 IRQ4 COM0 x2f8 IRQ3 COM 0 x3e8 IRQ4 COM0 x2e8 IRQ3 為一更好地說(shuō)明RS-232C接口電路的實(shí)際工作情況,下面以應(yīng)答呼叫過(guò)程為例,具體分析其信號(hào)間的交互關(guān)系。所謂應(yīng)答呼叫過(guò)程,即指Modem從接收到振鈴信號(hào)開(kāi)始,到數(shù)據(jù)傳輸結(jié)束后Modem和DTE恢復(fù)到原來(lái)的空閑狀態(tài)為止的過(guò)程。(1

10、)數(shù)據(jù)終端DTE的控制軟件持續(xù)監(jiān)視振鈴指示(RI),等待該信號(hào)有效。引腳連線如圖:CTS,清除發(fā)送DSR,DCE準(zhǔn)備就緒SG,信號(hào)地DCT,載波檢測(cè)DTR,DTE準(zhǔn)備就緒RI,振鈴指示RTS,請(qǐng)求反送RxD,接收數(shù)據(jù)TxD,發(fā)送數(shù)據(jù)2345678202223456782022圖12-3 DTE和Modem的引腳邊線(2)響鈴后,Modem在振鈴脈沖期間發(fā)出振鈴指示信號(hào)(RI有效),在振鈴脈沖間隔期間,振鈴指示信號(hào)有效。即隨著振鈴脈沖的有無(wú),RI信號(hào)ON/OFF交替變化。(3)DTE的通信控制軟件在檢測(cè)到振鈴指示后,開(kāi)始通過(guò)計(jì)算機(jī)振鈴指示ON/OFF變化的次數(shù)對(duì)振鈴進(jìn)行計(jì)數(shù)。當(dāng)達(dá)到程序預(yù)置好的振

11、鈴數(shù)時(shí),控制軟件發(fā)出數(shù)據(jù)終端就緒信號(hào)(DTR有效),迫使Modem進(jìn)入摘機(jī)狀態(tài),開(kāi)始應(yīng)答電話(huà)。(4)Modem在等待一小段時(shí)間后,自動(dòng)地發(fā)送它的應(yīng)答載波信號(hào)。同時(shí)Modem發(fā)出數(shù)據(jù)設(shè)備就緒信號(hào)(DSR信號(hào)有效),通知DTE已完成所有準(zhǔn)備工作,正在等待對(duì)方載波信號(hào)。(5)在DTE發(fā)出數(shù)據(jù)終端就緒信號(hào)(DTR有效)期間,DTE的控制軟件監(jiān)視數(shù)據(jù)設(shè)備就緒信號(hào)(DSR是否有效)。當(dāng)DSR變?yōu)镺N狀態(tài)后,DTE便知道了Modem已準(zhǔn)備建立數(shù)據(jù)鏈路,于是DTE開(kāi)始監(jiān)視載波檢測(cè)(DCD)信號(hào),以檢查數(shù)據(jù)鏈路是否已建立。(6)當(dāng)主叫Modem的載波信號(hào)出現(xiàn)在電話(huà)線上時(shí),被叫Modem就發(fā)出載波檢測(cè)信號(hào)(DCD

12、),通知DTE已建立數(shù)據(jù)鏈路。(7)在數(shù)據(jù)鏈路連接期間,發(fā)送數(shù)據(jù)(TxD)和接收數(shù)據(jù)(RxD)線上即開(kāi)始了全雙工通信。同時(shí),DTE仍監(jiān)視著載波檢測(cè)(DCD)信號(hào),以確定數(shù)據(jù)鏈路是否連接。(8)數(shù)據(jù)傳輸結(jié)束后,DTE使數(shù)據(jù)終端就緒信號(hào)(DTE無(wú)效),Modem撤消載波信號(hào)并以載波檢測(cè)(DCD)和數(shù)據(jù)設(shè)備就緒(DSR)信號(hào)無(wú)效給予響應(yīng)。數(shù)據(jù)鏈路釋放后,Modem和DTE準(zhǔn)備下一次接收或作另一次呼叫。10.2.1常用的串行通信操作函數(shù)1CreateFileCreateFile創(chuàng)建或打開(kāi)一下的對(duì)象并返回句柄 完整定義:Handle CreateFile(LPCTSTR lpFileName,/文件名D

13、WORD dwDesireAccess,/訪問(wèn)模式(讀/寫(xiě))DWORD dwShareMode, /共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes,/安全屬性10.2串行口API函數(shù)DWORD dwCreationDistribution,/文件已經(jīng)存在或不存在時(shí)的處理方法DWORD dwFlagsAndAttributes,/文件屬性,對(duì)于串口來(lái)說(shuō)有意義的屬性只有FILE_FLAG_OVERLAPPED,表示端口的I/O可以在后臺(tái)進(jìn)行(后臺(tái)IO也叫異步IO) HANDLE hDemplateFile/復(fù)制制定文件的擴(kuò)展屬性);2CloseHand

14、leCloseHandle函數(shù)關(guān)閉一個(gè)已打開(kāi)的對(duì)象句柄完整定義:BOOL CloseHandle( HANDLE hObject /句柄);3SetupCommSetupComm為通信設(shè)備初始化參數(shù)(設(shè)置通信緩沖區(qū)的大小)完整定義:BOOL SetupComm(HANDLE hFile,/句柄DWORD dwInQueue,/輸入緩沖區(qū)的大小DWORD dwOutQueue/輸出緩沖區(qū)的大小);4ReadFileReadFile同步或異步從文件讀取數(shù)據(jù),在讀之前可能要調(diào)整文件指針的位置完整定義:BOOL ReadFile( HANDLE hFile,/句柄LPVOID lpBuffer,/接收

15、數(shù)據(jù)的緩沖區(qū)地址DWORD nNumberOfBytesToRead,/讀取的字節(jié)數(shù)LPDWORD lpNumberOfBytesRead,/讀取字節(jié)數(shù)的地址LPOVERLAPPED lpOverlapped/當(dāng)打開(kāi)文件制定dwFlagsAndAttributes參數(shù)為FILE_FLAG_OVERLAPPED時(shí),這個(gè)參數(shù)就必須應(yīng)用一個(gè)特殊的結(jié)構(gòu),結(jié)構(gòu)中定義一次異步讀操作。否則,該參數(shù)應(yīng)置為空。);5WriteFileWriteFile同步或異步寫(xiě)數(shù)據(jù)到文件中,在寫(xiě)之前可能要調(diào)整文件指針的位置完整定義:BOOL WriteFile(HANDLE hFile,/句柄LPCVIOD lpBuffer

16、,/指向緩沖區(qū)的數(shù)據(jù)DWORD nNumberOfBytesToWrite,/要寫(xiě)的字節(jié)數(shù)LPDWORD lpNumberOfBuffersWritten,/返回實(shí)際寫(xiě)的字節(jié)數(shù)LPOVERLAPPED lpOverlapped/當(dāng)打開(kāi)文件指定dwFlagsAndAttributes參數(shù)為FILE_FLAG_OVERLAPPED時(shí),這個(gè)參數(shù)就必須引用一個(gè)特殊的結(jié)構(gòu),結(jié)構(gòu)中定義一次異步寫(xiě)操作。否則,該參數(shù)應(yīng)置為空。);10.3.1 MSCom安裝MSCcomm組件是Microsoft Visual Studio配帶的ActiveX組件,一般安裝Microsoft Visual Studio后這些文

17、件會(huì)自動(dòng)生成,然后在Delphi XE8中安裝MSComm控件。 步驟如下:(1)先打開(kāi)Delphi XE8集成開(kāi)發(fā)環(huán)境,選擇菜單“Component”中的“Import ActiveX Control”命令,在“Import AcitiveX”選項(xiàng)卡內(nèi)選擇“Microsoft Comm Control 6.0”項(xiàng) 。(2)單擊“Install” 按鈕安裝MSComm 控件,安裝后在“ActiveX”組件板中出現(xiàn)MSComm圖標(biāo),即可被使用。 MSCOMM32.OCX可以按如下兩種方式注冊(cè):第一種方式:點(diǎn)擊【開(kāi)始】|【運(yùn)行】,在運(yùn)行命令欄中填入如下命令:Regsvr32 c:windowssy

18、stemmscomm32.ocx第二種方式:打開(kāi)記事本輸入以下內(nèi)容,并且保存未REG的擴(kuò)展名,雙擊此文件也可以進(jìn)行注冊(cè)REGEDIT4HKEY_CLASSES_ROOTLicenses 4250E830-6AC2-11cf-8ADB-00AA00C00905=” kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun”10.3 MSComm控件10.3.2 MSComm 控件方法MSComm 控件提供下列兩種處理通信的方式:(1)事件驅(qū)動(dòng)通信是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時(shí)需要得到通知 。(2)在程序的每個(gè)關(guān)鍵功能之后,可以通過(guò)檢查Com

19、mEvent屬性的值來(lái)查詢(xún)事件和錯(cuò)誤。如果應(yīng)用程序較少,并且是自保持的,這種方法可能是更可取的。 每個(gè)MSComm控件對(duì)應(yīng)著一個(gè)串行端口。如果應(yīng)用程序需要訪問(wèn)多個(gè)串行端口,必須使用多個(gè)MSComm控件??梢栽赪indows “控制面板”中改變端口地址和中斷地址。盡管MSComm控件有很多重要的屬性,但首先必須熟悉幾個(gè)屬性。CommPort 設(shè)置并返回通信端口號(hào)。Settings 以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。PortOpen 設(shè)置并返回通信端口的狀態(tài),也可以打開(kāi)和關(guān)閉端口。Input 從接收緩沖區(qū)返回和刪除字符。Output 向傳輸緩沖區(qū)寫(xiě)一個(gè)字符串。10.3.3 MSComm控件屬性通信MSComm控件提供了27個(gè)關(guān)于通信控制方面的屬性和5個(gè)標(biāo)準(zhǔn)屬性 。1Break屬性描述:設(shè)置或清除中斷信號(hào)的狀態(tài)。該屬性在設(shè)計(jì)時(shí)無(wú)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論