版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《數(shù)據(jù)圖示餅》課件
- 沿海工程防護(hù)設(shè)備采購合同三篇
- 內(nèi)部激勵(lì)措施的年度優(yōu)化計(jì)劃
- 《通信技術(shù)原理》課件
- 冷拔鋼相關(guān)行業(yè)投資方案
- 合結(jié)鋼行業(yè)相關(guān)投資計(jì)劃提議
- 食品加工合同三篇
- 《液壓與氣動(dòng)》課件 1氣動(dòng)系統(tǒng)概述
- 急診科醫(yī)護(hù)人員培訓(xùn)計(jì)劃
- 蘇教版四年級(jí)上冊(cè)簡(jiǎn)單的周期
- QC080000培訓(xùn)講義課件
- 《玉米合理密植技術(shù)》課件
- 科技興國未來有我主題班會(huì)教學(xué)設(shè)計(jì)
- 《不穩(wěn)定型心絞痛》課件
- 房子管護(hù)合同范例
- 光伏施工安全措施
- 2024-2025華為ICT大賽(網(wǎng)絡(luò)賽道)高頻備考試題庫500題(含詳解)
- 汽車智能制造技術(shù)課件
- 江蘇省揚(yáng)州市邗江中學(xué)2025屆物理高一第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- 自媒體宣傳采購項(xiàng)目競(jìng)爭(zhēng)性磋商招投標(biāo)書范本
- “很多”、“大量”的英語表達(dá)法
評(píng)論
0/150
提交評(píng)論