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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論