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

下載本文檔

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

文檔簡(jiǎn)介

Delphi教程第12章Delphi串口通信編程用Delphi實(shí)現(xiàn)串口通信,最常用的幾種方法為:使用API函數(shù)、使用組件(如MSComm等)或者在Delphi中調(diào)用其他串口通信程序。12.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)稱為RS-232。RS-232C的定義包括電氣特性(如電壓

值)、機(jī)械特性(如接頭形狀)及功能特性(如腳位信號(hào))等。串行通信接口基本功能是:在發(fā)送時(shí),把

CPU送來的并行碼轉(zhuǎn)換成串行碼,逐位地依

次發(fā)送出去;在接收時(shí),把發(fā)送過來的串行碼逐位地接收,組裝成并行碼,并行地發(fā)送給CPU去處理。這種串行到并行轉(zhuǎn)換的功能,常用硬件電路來實(shí)現(xiàn),這種硬件電路叫做串行通信接口。普通的Modem通常都是通過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)稱為DB25),也可以是9芯(簡(jiǎn)稱為DB9)。RS-232C引腳分配如圖12-1所示。圖12-1

DB25與DB9引腳分配圖12.1.1信號(hào)連接RS-232C規(guī)定使用一種DB25連接器,其中20個(gè)腳作了定義,9、10、11、18、25未作定義。RS-232C串行口信號(hào)分為3類:傳送信號(hào)、聯(lián)絡(luò)信號(hào)和信號(hào)地。1.傳送信號(hào)(TxD和RxD)傳送信號(hào)是經(jīng)由(發(fā)送數(shù)據(jù)信號(hào)線,引腳2)傳送和(接收數(shù)據(jù)信號(hào)線,引腳3)接收的信

息格式即一個(gè)傳送單位(字節(jié))由起始位、數(shù)據(jù)位、奇偶校驗(yàn)和停止位組成。2.聯(lián)絡(luò)信號(hào)(RTS、CTS、DTR、DSR、DCD和RI等6個(gè)信號(hào))RTS(請(qǐng)求傳送,引腳4),是PC向Modem發(fā)出的聯(lián)絡(luò)信號(hào)。高電壓表不PC機(jī)請(qǐng)求向

Modem傳送數(shù)據(jù)。CTS(清除發(fā)送,引腳5),是Modem向PC機(jī)發(fā)出的聯(lián)絡(luò)信號(hào)。高電壓表示Modem響應(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沒有處于測(cè)試通話狀態(tài),可以和遠(yuǎn)端Modem建立通道。DCD(傳送檢測(cè),引腳),是Modem向PC

發(fā)出的狀態(tài)信號(hào),高電壓表示本地DCE接收遠(yuǎn)端Modem發(fā)來的載波信號(hào)。RI(鈴指示,引腳),Modem向PC發(fā)出的狀態(tài)信號(hào)。高電壓表示本地Modem收到遠(yuǎn)端

Modem發(fā)來的振鈴信號(hào)。3.SG(信號(hào)地)SG(信號(hào)地,引腳)為相連的PC和Modem提供同一電勢(shì)參考點(diǎn)。12.1.2握手DTE和DCE之間要實(shí)現(xiàn)雙向通信,至少需要3條信號(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ā)送。在異步串行通信中,這稱之為握手(handshaking)或流量控制(flowcontrol)。握手控制可以具體分為硬件握手(硬件流控)和軟件握手(軟件流控)。1.硬件握手硬件握手是使用專門的握手電路去控制數(shù)據(jù)的傳輸。當(dāng)接收設(shè)備準(zhǔn)備好之后,就通過專用的握手電路傳送一個(gè)正電壓給發(fā)送設(shè)備,指示發(fā)送設(shè)備數(shù)據(jù)。如果接收傳送一個(gè)負(fù)電壓給發(fā)送設(shè)備,則指示發(fā)送設(shè)備停止發(fā)送數(shù)據(jù)。為了完成數(shù)據(jù)通信需要有3類電路:數(shù)據(jù)線、信號(hào)線和握手線。(1)DTE到DCE為了控制DTE的發(fā)送數(shù)據(jù),DCE使用DSR信號(hào)作為主握手信號(hào)去通知DTE已做好接收數(shù)據(jù)庫的準(zhǔn)備。當(dāng)通知DTE暫停發(fā)送數(shù)據(jù)時(shí),置DSR無效。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無效。DTE還使用RTS信號(hào)作為第二握手信號(hào)控制DCE設(shè)備。僅當(dāng)這兩條握手線都有效時(shí),

DCE才發(fā)送數(shù)據(jù)。雙向通信雙向通信中只使用主握手線,則共需要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)行傳送的,而不是在專門握手線上傳送。這是因?yàn)檐浖帐中盘?hào)是由特殊字符組成的,所以傳送這些字符必須使用數(shù)據(jù)電路,而不

是使用專門握手電路。這種方法常用在直接

連接或通過Modem連接的兩臺(tái)計(jì)算機(jī)之間進(jìn)

行雙向通信的場(chǎng)合。RIDTRDCTSGDSRRTSCTSRxDTxD2345678202223456782022圖12-2有握手功能的雙向通信軟件握手最常用的協(xié)議是XON/XOFF協(xié)議。該協(xié)議主要解決通信雙方處理速度不區(qū)配的問題,協(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ī)之間通過Modem經(jīng)電話線連接,則此時(shí)計(jì)算機(jī)與Modem之間可采用硬件握手方法,而兩臺(tái)計(jì)算機(jī)之間可以使用軟件握手方法進(jìn)行聯(lián)系。12.1.3微機(jī)的RS-232C接口個(gè)人計(jì)算機(jī)的RS-232C接口名稱有多個(gè):

RS-232C口、串口、通信口、COM口、異步口等。目前DOS3.3以上版本和Windows

3.2/98/NT最多支持4個(gè)串口:COM1、COM2、COM3和COM4。它們所占用的I/O口地址和中斷號(hào)見表:為一更好地說明RS-232C接口電路的實(shí)際工作情況,下面以應(yīng)答呼叫過程為例,具體分析其信號(hào)間的交互關(guān)系。所謂應(yīng)答呼叫過程,即指Modem從接收到振鈴信號(hào)開始,到數(shù)據(jù)傳輸結(jié)束后Modem和DTE恢復(fù)到原來的空閑狀態(tài)為止的過程。(1)數(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-3DTE和Modem的引腳邊線響鈴后,Modem在振鈴脈沖期間發(fā)出振鈴指示信號(hào)(RI有效),在振鈴脈沖間隔期間,振鈴指示信號(hào)有效。即隨著振鈴脈沖的有無,

RI信號(hào)ON/OFF交替變化。DTE的通信控制軟件在檢測(cè)到振鈴指示后,開始通過計(jì)算機(jī)振鈴指示ON/OFF變化的次

數(shù)對(duì)振鈴進(jìn)行計(jì)數(shù)。當(dāng)達(dá)到程序預(yù)置好的振鈴數(shù)時(shí),控制軟件發(fā)出數(shù)據(jù)終端就緒信號(hào)(DTR有效),迫使Modem進(jìn)入摘機(jī)狀態(tài),開始應(yīng)答電話。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)。在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開始監(jiān)視載波檢測(cè)(DCD)信號(hào),以檢查數(shù)據(jù)鏈路是否已建立。當(dāng)主叫Modem的載波信號(hào)出現(xiàn)在電話線上時(shí),被叫Modem就發(fā)出載波檢測(cè)信號(hào)(DCD),通知DTE已建立數(shù)據(jù)鏈路。在數(shù)據(jù)鏈路連接期間,發(fā)送數(shù)據(jù)(TxD)和接收數(shù)據(jù)(RxD)線上即開始了全雙工通信。同時(shí),DTE仍監(jiān)視著載波檢測(cè)(DCD)信號(hào),以確定數(shù)據(jù)鏈路是否連接。(8)數(shù)據(jù)傳輸結(jié)束后,DTE使數(shù)據(jù)終端就緒信號(hào)(DTE無效),Modem撤消載波信號(hào)并以載波檢測(cè)(DCD)和數(shù)據(jù)設(shè)備就緒(DSR)信號(hào)無效給予響應(yīng)。數(shù)據(jù)鏈路釋放后,Modem和DTE準(zhǔn)備下一次接收或作另一次呼叫。12.2串行口API函數(shù)12.2.1常用的串行通信操作函數(shù)

1.CreateFileCreateFile創(chuàng)建或打開一下的對(duì)象并返回句柄完整定義:Handle

CreateFile(LPCTSTR

lpFileName,//文件名DWORD

dwDesireAccess,//訪問模式(讀/寫)DWORD

dwShareMode,

//共享模式LPSECURITY_ATTRIBUTES

lpSecurityAttributes,//安全屬性DWORD

dwCreationDistribution,//文件已經(jīng)存在或不存在時(shí)的處理方法DWORD

dwFlagsAndAttributes,//文件屬性,對(duì)于串口來說有意義的屬性只有FILE_FLAG_OVERLAPPED,表示端口的I/O可以在后臺(tái)進(jìn)行(后臺(tái)IO也叫異步IO)HANDLE

hDemplateFile//復(fù)制制定文件的擴(kuò)展屬性);2.CloseHandleCloseHandle函數(shù)關(guān)閉一個(gè)已打開的對(duì)象句柄,完整定義:BOOL

CloseHandle(HANDLE

hObject

//句柄);3.SetupCommSetupComm為通信設(shè)備初始化參數(shù)(設(shè)置通信緩沖區(qū)的大?。?,完整定義;BOOL

SetupComm(HANDLE

hFile,//句柄DWORD

dwInQueue,//輸入緩沖區(qū)的大小DWORD

dwOutQueue//輸出緩沖區(qū)的大小);4.ReadFileReadFile同步或異步從文件讀取數(shù)據(jù),在讀之前可能要調(diào)整文件指針的位置,完整定義:BOOL

ReadFile(HANDLE

hFile,//句柄LPVOID

lpBuffer,//接收數(shù)據(jù)的緩沖區(qū)地址DWORD

nNumberOfBytesToRead,//讀取的字節(jié)數(shù)LPDWORD

lpNumberOfBytesRead,//讀取字節(jié)數(shù)的地址LPOVERLAPPED

lpOverlapped//當(dāng)打開文件制定dwFlagsAndAttributes參數(shù)為FILE_FLAG_OVERLAPPED時(shí),這個(gè)參數(shù)就必須應(yīng)用一個(gè)特殊的結(jié)構(gòu),結(jié)構(gòu)中定義一次異步讀操作。否則,該參數(shù)應(yīng)置為空。);5.WriteFileWriteFile同步或異步寫數(shù)據(jù)到文件中,在寫之前可能要調(diào)整文件指針的位置,完整定義:BOOL

WriteFile(HANDLE

hFile,//句柄LPCVIOD

lpBuffer,//指向緩沖區(qū)的數(shù)據(jù)DWORD

nNumberOfBytesToWrite,//要寫的字節(jié)數(shù)LPDWORD

lpNumberOfBuffersWritten,//返回實(shí)際寫的字節(jié)數(shù)LPOVERLAPPED

lpOverlapped//當(dāng)打開文件指定dwFlagsAndAttributes參數(shù)為FILE_FLAG_OVERLAPPED時(shí),這個(gè)參數(shù)就必須引用一個(gè)特殊的結(jié)構(gòu),結(jié)構(gòu)中定義一次異步寫操作。否則,該參數(shù)應(yīng)置為空。);6.Set

CommStateSetCommState用制定的DCB結(jié)構(gòu)設(shè)置通信參

數(shù),將重新初始化硬件和控制設(shè)置,但不會(huì)清空輸入輸出緩沖區(qū)。DCB結(jié)構(gòu)中包含波特率、數(shù)據(jù)位、校驗(yàn)位、停止位和流控制方式等信息。完整定義:BOOL

SetCommState(HANDLE

hFile,//句柄LPDCB

lpDCB//指向硬件控制塊);7.GetCommStateGetCommState返回當(dāng)前通信參數(shù)的DCB結(jié)構(gòu)。

DCB結(jié)構(gòu)中包含波特率、數(shù)據(jù)位、校驗(yàn)位、停止位和流控制方式等信息,完整定義:BOOL

GetCommState(HANDLE

hFile,//句柄LPDCB

lpDCB//指向硬件控制塊);ClearCommErrorClearCommError清除串口錯(cuò)誤并獲取當(dāng)前狀態(tài)(可以返回接收緩沖區(qū)中處于等待狀態(tài)的字節(jié)數(shù))。完整定義:BOOL

ClearCommError(HANDLE

hFile,//句柄LPDWORD

lpErrors,//接收錯(cuò)誤代碼LPCOMSTAT

lpStat//指向通信設(shè)備的狀態(tài)緩沖區(qū));BuildCommDCBBuildCommDCB函數(shù)用制定的設(shè)備控制串填充DCB結(jié)構(gòu),設(shè)備控制串可用相應(yīng)的模式控制命令得到。要使設(shè)置生效,還需調(diào)用SetCommState。完整定義:BOOL

BuildCommDCB(LPCTSTR

lpDef,//指向設(shè)備控制串LPDCB

lpDCB//指向設(shè)備控制塊);10.BuildCommDCBAndTimeoutsBuildCommDCBAndTimeouts函數(shù)用指定的設(shè)備控制串填充DCB結(jié)構(gòu),并設(shè)置超時(shí)值、未超時(shí)值。設(shè)備控制串可用相應(yīng)的模式控制命令得到。這個(gè)函數(shù)綜合了BuildCommDCB和SetCommTimeouts兩個(gè)函數(shù),完整定義:BOOL

BuildCommDCBAndTimeouts(LPCTSTR

lpDef,//設(shè)備控制串LPDCB

lpDCB,//設(shè)備控制塊LPCOMMTIMEOUTS

lpCommTimeouts//超時(shí)結(jié)構(gòu));11.ClearCommBreakClearCommBreak函數(shù)恢復(fù)發(fā)送緩沖區(qū)中的數(shù)據(jù)傳送,并把線路置為nonbreak狀態(tài)(可參閱SetCommBreak和TransmitCommChar)。完整定義:BOOL

ClearCommBreak(HANDLE

hFile//句柄);12.CommConfigDialogCommConfigDialog函數(shù)顯示配置端口的對(duì)話框,完整定義:BOOL

CommConfigDialog(LPTSTR

lpszName,//設(shè)備名字字符串HWND

hWnd,//窗口句柄LPCOMMCONFIG

lpCC//Comm配置結(jié)構(gòu));13.DeviceIoControlDeviceIoControl函數(shù)直接發(fā)送控制指令到指定的設(shè)備,讓設(shè)備執(zhí)行特定的操作。完整定義:BOOL

DeviceIoControl(HANDLE

hDevice,//句柄DWORD

dwIoControlCode,//控制指令LPVOID

lpInBuffer,//指定指令所需的數(shù)據(jù)緩沖區(qū)DWORD

nInBufferSize,//lpInBuffer緩沖區(qū)的大小LPVOID

lpOutBuffer,//指定指令返回的數(shù)據(jù)緩沖區(qū)DWORD

nOutBufferSize,//lpOutBuffer緩沖區(qū)的大小LPDWORD

lpBytesReturned,//lpOutBuffer緩沖區(qū)返回?cái)?shù)據(jù)的實(shí)際大小LPOVERLAPPED

lpOverlapped//指向Overlapped結(jié)構(gòu));14.EscapeCommFunctionEscapeCommFunction函數(shù)直接讓設(shè)備執(zhí)行指定的擴(kuò)展操作,用于完全控制端口。完整定義:BOOL

EscapeCommFunction(HANDLE

hFile,//句柄DWORD

dwFunc//要執(zhí)行的擴(kuò)展功能);GetCommConfigGetCommConfig函數(shù)獲得當(dāng)前設(shè)備的設(shè)置,王政定義:Bool

GetCommConfig(HANDLE

hCommDev,//句柄LPCOMMCONFIG

lpCC,//Comm配置結(jié)構(gòu)地址LPDWORD

lpdwSize//緩沖區(qū)大小);GetCommMaskGetCommMask函數(shù)返回指定的設(shè)備的事件掩碼,完整定義:BOOL

GetCommMask(HANDLE

hFile,//句柄LPDWORD

lpEvtMask//返回的事件掩碼);GetCommModemStatusGetCommModemStatus函數(shù)返回Modem的控制寄存器的值,完整定義:BOOL

GetCommModemStatus(HANDLE

hFile,//句柄LPWORD

lpModemStat//控制寄存器的值);GetCommPropertiesGetCommProperties函數(shù)返回指定設(shè)備的屬性。在調(diào)用SetCommState之前常用此函數(shù)判斷是否支持指定的設(shè)置值,例如,是否支持的波特率等。完整定義:BOOL

GetCommProperties(HANDLE

hFile,//句柄LPCOMMPROP

lpCommProp//屬性結(jié)構(gòu));19.GetCommStateGetCommState函數(shù)返回指定設(shè)備當(dāng)前設(shè)置的設(shè)備控制塊,完整定義:BOOL

GetCommState(HANDLE

hFile,//句柄

LPDCB

lpDCB//設(shè)備控制塊);20.GetCommTimeoutsGetCommTimeouts函數(shù)返回指定設(shè)備的所有讀寫操作超時(shí)值,完整定義:BOOL

GetCommTimeouts(HANDLE

hFile,//句柄LPCOMMTIMEOUTS

lpCommTimeouts//超時(shí)結(jié)構(gòu));21.GetDefaultCommConfigGetDefaultCommConfig函數(shù)返回通信設(shè)備的默認(rèn)值配置,完整定義:BOOL

GetDefaultCommConfig(LPCSTR

lpszName,//設(shè)備名字符串LPCOMMCONFIG

lpCC,//配置結(jié)構(gòu)LPDWORD

lpdwSize

//結(jié)構(gòu)的大小);22.PurgeCommPurgeComm函數(shù)取消輸入或輸出緩沖區(qū)的所有字符,并中止懸而未決的讀或?qū)懖僮鳎暾x:BOOL

PurgeComm(HANDLE

hFile,//句柄DWORD

dwFlags//取消操作的參數(shù));SetCommBreakSetCommBreak函數(shù)暫停發(fā)送緩沖區(qū)的數(shù)據(jù)傳送,并把線路為break狀態(tài),直到調(diào)用ClearCommBreak時(shí)才恢復(fù)。完整定義:BOOL

SetCommBreak(HANDLE

hFile//句柄);SetCommConfigSetCommConfig函數(shù)設(shè)置通信設(shè)備的當(dāng)前配置,完整定義:BOOL

SetCommConfig(HANDLE

hCommDev,//句柄

LPCOMMCONFIG

lpCC,//配置結(jié)構(gòu)DWORD

dwSize

//結(jié)構(gòu)的大小);25.SetCommMaskSetCommMask函數(shù)設(shè)置指定設(shè)備的事件掩碼。調(diào)用此函數(shù)后,需要再調(diào)用WaitCommEvent來等待事件的產(chǎn)生。完整定義:BOOL

SetCommMask(HANDLE

hFile,//句柄

DWORD

dwEvtMask//事件掩碼);SetCommTimeoutsSetCommTimeouts函數(shù)設(shè)置讀和寫操作的超時(shí)值,完整定義:BOOL

SetCommTimeouts(HANDLE

hFile,//通信設(shè)備句柄LPCOMMTIMEOUTS

lpCommTimeouts//超時(shí)結(jié)構(gòu));SetDefaultCommConfigSetDefaultCommConfig函數(shù)設(shè)置通信設(shè)備的默認(rèn)配置,完整定義:BOOL

SetDefaultCommConfig(LPCSTR

lpszName,//設(shè)備名字符串LPCOMMCONFIG

lpCC,//配置結(jié)構(gòu)DWORD

dwSize//結(jié)構(gòu)的大小);28.TransmitCommCharTransmitCommChar函數(shù)向指定設(shè)備發(fā)送字符,該字符將優(yōu)先于輸出緩沖區(qū)中的數(shù)據(jù)。一般情況下,先調(diào)用SetCommBreak,再調(diào)用此函數(shù),最后調(diào)用ClearCommChar,用于優(yōu)先反送指定字符。完整定義:BOOL

TransmitCommChar(HANDLE

hFile,//句柄

Char

cChar//發(fā)送的字符);29.WaitCommEventWaitCommEvent函數(shù)等待指定設(shè)備的事件發(fā)生。一系列的事件被此函數(shù)監(jiān)視,包括設(shè)備相關(guān)的事件掩碼,可以同步或異步方式進(jìn)行。完整定義:BOOL

WaitCommEvent(HANDLE

hFile,//句柄LPDWORD

lpEvtMask,//要處理的事件LPOVERLAPPED

lpOverlapped,//Overlapped結(jié)構(gòu),用于異步方式);12.3

MSComm控件12.3.1

MSCom安裝MSCcomm組件是Microsoft

Visual

Studio配帶的ActiveX組件,一般安裝MicrosoftVisual

Studio后這些文件會(huì)自動(dòng)生成,然后在Delphi中安裝MSComm控件。步驟如下:先打開Delphi7.0集成開發(fā)環(huán)境,選擇菜單

“Component”中的“Import

ActiveXControl”命令,在“Import

AcitiveX”選項(xiàng)卡內(nèi)選擇“Microsoft

Comm

Control

6.0”項(xiàng)。單擊“Install”按鈕安裝MSComm控件,安裝后在“ActiveX”組件板中出現(xiàn)

MSComm圖標(biāo),即可被使用。MSCOMM32.OCX可以按如下兩種方式注冊(cè):第一種方式:點(diǎn)擊【開始】|【運(yùn)行】,在運(yùn)行命令欄中填入如下命令:Regsvr32

c:\windows\system\mscomm32.ocx第二種方式:打開記事本輸入以下內(nèi)容,并且保存未REG的擴(kuò)展名,雙擊此文件也可以進(jìn)行注冊(cè),REGEDIT4[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]@=”

kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun”12.3.2

MSComm控件方法MSComm控件提供下列兩種處理通信的方式:事件驅(qū)動(dòng)通信是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時(shí)需要得到通知。在程序的每個(gè)關(guān)鍵功能之后,可以通過檢查

CommEvent屬性的值來查詢事件和錯(cuò)誤。如

果應(yīng)用程序較少,并且是自保持的,這種方法可能是更可取的。每個(gè)MSComm控件對(duì)應(yīng)著一個(gè)串行端口。如果應(yīng)用程序需要訪問多個(gè)串行端口,必須使用多個(gè)MSComm控件??梢栽赪indows“控制面板”中改變端口地址和中斷地址。盡管MSComm控件有很多重要的屬性,但首先必須熟悉幾個(gè)屬性。CommPortSettings設(shè)置并返回通信端口號(hào)。以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。PortOpen

設(shè)置并返回通信端口的狀態(tài),也可以打開和關(guān)閉端口。InputOutput從接收緩沖區(qū)返回和刪除字符。向傳輸緩沖區(qū)寫一個(gè)字符串。12.3.3

MSComm控件屬性通信MSComm控件提供了27個(gè)關(guān)于通信控制方面的屬性和5個(gè)標(biāo)準(zhǔn)屬性。1.Break屬性描述:設(shè)置或清除中斷信號(hào)的狀態(tài)。該屬性在設(shè)計(jì)時(shí)無效。語法:[form

.]

MSComm.Break[:={True|False}]設(shè)置為:TrueFalse設(shè)置中斷信號(hào)狀態(tài)清除中斷信號(hào)狀態(tài)2.CDHolding屬性通過查詢Carrier

Detect

(CD)信號(hào)線的狀態(tài)確定當(dāng)前是否有傳輸。語法:[form.]MSComm.CDHolding[:={True|False}]CDHolding屬性的設(shè)置值為:TrueFalseCarrier

Detect信號(hào)線為高電平

Carrier

Detect信號(hào)線為低電平CommID屬性返回一個(gè)說明通信設(shè)備的句柄。該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。語法:[form.]MSComm.CommIDCommEvent屬性返回最近的通信事件或錯(cuò)誤。該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。語法:[form.]MSComm.CommEvent5.CommPort屬性設(shè)置并返回通信端口號(hào)。語法:[form

.]

MSComm.CommPort[:=value]6.CTSHolding屬性確定是否可通過查詢Clear

To

Send

(CTS)信號(hào)線的狀態(tài)發(fā)送數(shù)據(jù)。語法:[form

.]

MSComm.CTSHolding[:={True|False}]CTSHolding屬性的設(shè)置值為:TrueFalseClear

To

Send信號(hào)線為高電平

Clear

To

Send信號(hào)線為低電平7.DSRHolding屬性確定Data

Set

Ready

(DSR)信號(hào)線的狀態(tài)。語法:[form.]MSComm.CSRHolding[:={True|False}]

CSRHolding屬性返回以下值:TrueFalseData

Set

Ready信號(hào)線為高電平

Data

Set

Ready信號(hào)線為低電平8.DTREnable屬性確定在通信時(shí)是否使Data

Terminal

Ready(DTR)信號(hào)線有效。語法:[form.]MSComm.DTREnable[:={True|False}]DTREnable屬性設(shè)置值:True

Data

Terminal

Ready信號(hào)線有效False

Data

Terminal

Ready信號(hào)線無效(缺?。?.EOFEnable屬性EOFEnable屬性確定在輸入過程中MSComm控件是否尋找文件結(jié)尾(EOF)字符。語法:[form.]MSComm.EOFEnable[:={True|False}]value的設(shè)置值:當(dāng)EOF字符找到時(shí)OnComm事件被激True活。False

當(dāng)EOF字符找到時(shí)OnComm事件不被激活(缺?。?。10.Handshaking屬性設(shè)置并返回硬件握手協(xié)議。語法:[form.]MSComm.Handshaking[:=value]11.InBufferCount屬性返回接收緩沖區(qū)中等待的字符數(shù)。該屬性在設(shè)計(jì)時(shí)無效。語法:[form

.]

MSComm.

InBufferCount[:=value]12.InBufferSize屬性設(shè)置并返回接收緩沖區(qū)的字節(jié)數(shù)。語法:[form.]MSComm.InBufferSize[:=value]13.Input屬性返回并刪除接收緩沖區(qū)中的數(shù)據(jù)流。該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。語法:[form.]

MSComm.Input14.InputLen屬性設(shè)置并返回Input屬性確定被Input屬性讀取的字符數(shù)。語法:[form.]MSComm.InputLen

溫馨提示

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

評(píng)論

0/150

提交評(píng)論