1. 程式人生 > >MSComm控制元件屬性大揭祕

MSComm控制元件屬性大揭祕

MSComm控制元件的屬性
(必須要熟悉的幾個——CommPort:設定並返回通訊埠號;Setting:以字串的形式設定並返回資料傳輸速率、奇偶校驗、資料位元、停止位元;PortOpen:設定並返回通訊埠的狀態,也可以開啟和關閉埠;Input:從接收緩衝區返回和刪除字元;Output:向傳輸緩衝區定一個字串)
1)CommPort屬性
void SetCommPort(short nNewValue); short GetCommPort();
這一屬性設定並返回連線的串列埠號,Windows將會利用該串列埠和外界通訊。在設計時,nNewValue可以設定成從1~16的任何數(預設值為1)。但是如果用PortOpen屬性開啟一個並不存在的埠時,MSComm控制元件會產生錯誤68(裝置無效)。
注意:必須在開啟埠之前設定CommPort屬性。
2)Settings屬性
void Settings(LPCTSTR lpszNewValue); String GetSettings();
該屬性用於設定並返回資料傳輸速率、奇偶校驗、資料位元、停止位元引數。當埠開啟時,如果value非法,則MSComm控制元件產生錯誤380(非法屬性值)。其中lpszNewValue用字串表示,由四個設定值組成,有如下的組成格式:
“BBBB,P,D,S”
BBBB為資料傳輸速率,P為奇偶校驗,D為資料位元,S為停止位元。Value的預設值是:“9600,N,8,1”,資料傳輸速率合法值可以是110、300、600、1200、2400、4800、9600、14400、19200、28800、38400、56000、57600、115200、12800、25600。
奇偶校驗值可以是設定為下表的任一值。
設定值 描述
E 偶校驗(EVEN)
M 標號校驗(MARK)
N 無校驗(NONE)
O 奇校驗(ODD)
S 空格校驗(SPACE)
資料位元數可以是4、5、6、7、8。
停止位元數可以是1、1.5、2。
注意:只有當通訊的雙方的Settings屬性值都一樣時,通訊連線才能生效。
3)Handshaking屬性
這一屬性用於設定或者返回硬體握手協議,也就是PC和通訊裝置之間為了控制流速而設定的內部協議。屬性值可以設定為下表中的任一個。

設定值 值 描述
ComNone 0 預設值,無握手協議
comXOnXOff 1 XON/XOFF握手
ComRTS 2 RTS/CTS握手
comRtsXOnXOff 3 RTS/CTS和XON/XOFF握手皆可
4)RThreshold屬性
void SetRThreshold(short nNewValue); short GetRThreshold();
在MSComm控制元件設定CommEvent屬性為comEvReceive併產生OnComm之前,RThreshold屬性設定並返回的要接收的字元數。這裡nNewValue是short型引數,說明在產生OnComm事件之前要接收的字元數。
當接收字元後,若RThreshold屬性設定為0(預設值)則不會產生OnComm事件。否則,該屬性為一閾值,當接收緩衝區內位元組個數達到或超過該值後就會產生OnComm事件,例如,設定RThreshold為1,接收緩衝區收到每一個字元都會使MSComm控制元件產生OnComm事件。
5)CTSHolding屬性
void SetCTSHolding(BOOL bNewValue); BOOL GetCTSHolding();
其屬性設定值如下表所示。
設定值 功能描述
TRUE CTS線為高電平
FALSE CTS線為低電平
該屬性確定是否可通過查詢CTS線的狀態傳送資料。CTS是調變解調器傳送到相連計算機的訊號,指示傳輸可以進行。該屬性在設計時無效,在執行時為只讀。
如果CTS線為低電平(CTSHolding = FALSE)並且超時時,MSComm控制元件設定CommEvent屬性為comEventCTSTO(Clear To Send Timeout)併產生OnComm事伯。CTS線用於RTS/CTS硬體握手。如果需要確定CTS線的狀態,CTSHolding屬性給出一種手工查詢方法。
6)SThreshold屬性
void SetSThreshold(short nNewValue); short GetSThreshold();
MSComm控制元件設定CommEvent屬性為comEvSend併產生OnComm事件之前,設定並返回傳輸緩衝區中允許的最小字元數。這裡nNewValue是short型資料,代表在OnComm事件產生之前在傳輸緩衝區中的最小字元數。
若設定Sthreshold屬性為0(預設值),資料傳輸事件不會產生OnComm事件。若設定Sthreshold屬性為0,當傳輸緩衝區完全空時,MSComm控制元件產生OnComm事件。如果在傳輸緩衝區的字元數小於value,CommEvent屬性設定為comEvSend,併產生OnComm事件。comEvSend事件僅當字元數與Sthreshold交叉時被啟用一次。例如,如果Sthreshold等於5,僅當在輸出佇列中字元數從5降到4時,comEvSend才發生。如果在輸出佇列中從沒有比Sthreshold多的字元,comEvSend事件將絕不會發生。
7)InputMode屬性
void SetInputMode(long nNewValue); long GetInputMode();
訪屬性用於設定或者返回傳輸資料的型別。其取值和基本含義如下表所示。
設定值 值 描述
ComInputModeText(預設) 0 通過Input屬性以文字方式取回資料
ComInputModeBinary 1 通過Input屬性以二進位制方式取回資料

8)InputLen屬性
void SetInputLen(short nNewValue); short GetInputLen ();
該屬性用於設定並返回Input屬性從接收緩衝區讀取的字元數。nNewValue是short型數值,說明Input屬性從接收緩衝區中讀取的字元數。
InputLen屬性的預設值是0。當設定InputLen為0時,使用Input將使MSComm控制元件讀取接收緩衝區中全部的內容。若接收緩衝區中InputLen字元無效,Input屬性返回一個零長度字串(“”)。在使用Input前,使用者可以選擇檢查InBufferCount屬性來確定緩衝區中是否已有需要數目的字元。該屬性在從輸出格式為定長資料的機器讀取資料時非常有用。
9)InBuffersize屬性
void SetBufferSize(short nNewValue); short GetInBufferSize();
InBuffersize屬性用於設定或返回輸入緩衝區的大小,預設值為1024位元組。
10)InBufferCount屬性
void SetInBufferCount(short nNewValue); short GetInBufferCount();
InBufferCount屬性用於返回輸入緩衝區內的等待讀取的位元組個數,可以通過該屬性值為0來清除接收緩衝區。
11)Input屬性
VARIANT GetInput();
Input屬性表示從接收緩衝區移走一串字元,將緩衝區中收到的資料讀入變數。屬性值為VARIAN型變數。該屬性在埠未開啟時不可用,在執行時是隻讀的。
注意:當InputMode屬性值 為0時(文字模式),變數中含String型資料。當InputMode屬性值為1(二進位制模式),變數中含Byte型陣列資料。
12)PortOpen屬性
void SetPortOpen(BOOL bNewValue); BOOL GetPortOpen();
PortOpen屬性用於開啟或者關閉埠。如果bNewValue設為TRUE,可以開啟埠;設為FALSE時可以關閉埠。一般情況下在程式開始時開啟埠,在程式結束時關閉埠。當應用程式終止時,MSComm控制元件將自動關閉串列埠。在開啟埠前,確定CommPort屬性調協為正確的埠號。而且,使用者的串列埠裝置必須支援Settings屬性中的設定。如果硬體裝置不支援Settings屬性中的一些設定,則硬體工作或許不正確。
13)OutBuffersize屬性
void SetOutBufferSize(short nNewValue);
OutBuffersize屬性用於設定或者返回傳送緩衝區的大小,值為整形表示式,表示傳輸緩衝區的位元組數,預設值為512位元組。對傳送緩衝區設定得越大,應用程式可以使用的記憶體就越小。然而,如果傳送緩衝區太小,緩衝區將會溢位,除非使用握手協議。
14)OutBufferCounter屬性
void SetOutBufferSize(short nNewValue); short GetOutBufferSize();
OutBufferCounter屬性用於返回傳送緩衝區內等待發送的位元組數,可以通過設定該屬性為0來清空傳送緩衝區。
15)Output屬性
void SetOutput(const VARIANT & newValue);
Output屬性用於向傳送緩衝區寫資料流。屬性為VARIANT變數。該屬性在埠未開啟時不可用,在執行時只是寫的。
注意:Output屬性可以傳送文字資料或二進位制資料。傳輸文字資料時,應該將字元型 資料放入VARIANT變數中;傳輸二進位制資料(即按位元組傳送)時,應將位元組型資料放入VARIANT型變數中。如果通常給應用程式傳送ANSI字串,可以以文字方式傳送。如果資料包含了內嵌控制字元、NULL字元等,必須將其作為二進位制傳遞過去。
16)CommEvent屬性
short GetCommEvent();
如果在通訊過程中發生錯誤或事件,將會引發OnComm事件並且改變其屬性值。CommEvent屬性值反映錯誤或者事件型別,通訊的設計中可以根據該屬性值執行同的操作。該屬性在埠未開啟時不可用,在執行時是隻讀的。通訊錯誤及通訊事件的設定值分別如下兩表所示。
通訊錯誤設定值
設定值 值 描述
comEventBreak 1001 接收到中斷訊號
comEventCTSTO 1002 CTS超時
comEventDSRTO 1003 DSR超時
comEventFrame 1004 幀錯誤,硬體檢測到一個幀出錯,雙方設定的格式不一致時,就會引發此錯誤
comEventOverrun 1006 埠超速。一個字元沒有在下一個字元到達之前被硬體讀取,該字元丟失
comEventCDTO 1007 資料檢測超時
comEventRxOver 1008 接收緩衝區溢位
comEventRxParity 1009 奇偶校驗錯誤
comEventTxFull 1010 傳輸緩衝區溢位,表明輸出緩衝區已滿,不能再將字元輸出到緩衝區
comEventDCB 1011 檢索埠、裝置控制塊(DCB)時的意外錯誤

通訊事件設定值
設定值 值 描述
comEvSend 1 傳送事件。傳送緩衝區的內容少於SThreshold指定的值
comEvReceive 2 接收事件。接收緩衝區內字元數達到RThreshold值,該事件在緩衝區內資料被移走前將持續產生,利用此事件可編寫接收資料的過程
comEvCTS 3 CTS線變化
comEvDSR 4 DSR線變化
comEvCD 5 CD線變化
comEvRing 6 振鈴檢測
comEvEOF 7 檔案結束。接收資料中出現檔案結束(ASCII 碼26)字元

17)DTREnable屬性
void SetDTREnable(BOOL bNewValue); BOOL GetDTREnable();
DTREnable屬性確定在通訊時是否使用DTR線有效,DTR是計算機發送到調變解調器的訊號,表明計算機在等待資料傳輸。
18)RTSEnable屬性
void SetRTSEnable(BOOL bNewValue); BOOL GetRTSEnable();
RTSEnable屬性確定是否使用RTS線有效。一般情況下,由計算機發送RTS訊號到連線的調變解調器,請求允許傳送資料。
19)EOFEnable屬性
void SetEOFEnable(BOOL bNewValue); BOOL GetEOFEnable();
EOFEnable屬性確定在輸入過程中MSComm控制元件是否尋找檔案結尾(EOF)字元。如果找到EOF字元,將停止輸入並激活OnComm事件,此時CommEvent屬性設定為comEvEOF,這裡bNewValue為布林表示式,確定當找到EOF字元時,OnComm事件是否被啟用。當bNewValue的設定值TRUE時,EOF字元找到時OnComm事件被啟用。否則當VALUE值設為FALSE(預設)時,EOF字元找到時OnComm事件不被啟用。
注意:當EOFEnable屬性設定為FALSE時,OnComm控制元件將不在輸入流中尋找EOF字元。
20)CDHolding屬性
void SetCDHolding(BOOL bNewValue); BOOL GetCDHolding();
通過查詢CD線的狀態確定當前是否有傳輸。CD是從調變解調器傳送到相連計算機的一個訊號,指示調變解調器正在聯機。該屬性在設計時無效,在執行時為只讀。屬性的設定值為:當bNewValue為TRUE時,CD線為高電平;當bNewValue為FALSE時,CD線為低電平。注意當CD線為高電平(CDHolding=TRUE)且超時時,MSComm控制元件設定CommEvent屬性為comEventCDTO(CD超時錯誤),併產生OnComm事件。
注意:在主機應用程式中捕獲一個丟失的傳輸是特別重要的,例如一個公告板,因為呼叫者可以隨時掛起(放棄傳輸)。CD也被稱為Receive Line Signal Detect(RLSD)。
21)DSRHolding屬性
void SetDSRHolding(BOOL bNewValue); BOOL GetDSRHolding();
確定DSR線的狀態。DSR訊號由調變解調器傳送到相連計算機,指示作好操作準備。該屬性在設計時無效,在執行時為只讀。DSRHolding屬性返回為TRUE時,表示DSR線高,返回FALSE時,表示DSR線低。當DSR線為高電平時(DSRHolding=TRUE)超時時,MSComm控制元件設定CommEvent屬性為comEventDSRTO(資料準備超時)併產生OnComm事件。當為DTE(Data Terminal Equipment)機器寫DSR/DTR握手例程時該屬性是分有用的。

作者:blindpoint
主頁:www.blindpoint.net
注意:有任何問題到www.blindpoint.net/bbs論壇下進行諮詢探討