關於MSCOMM控制項的一些說明
VB5.0/6.的MSComm通訊控制提供了一系列標準通訊命令的接口,它允許建立串口連接,可以連接到其他通訊設備(如Modem).
還可以發送命令、進行資料交換以及監視和回應在通訊過程中可能發生的各種錯誤和事件,從而可以用它創建全雙工、事件驅
動的、高效實用的通訊程式。但在實際通訊軟體設計過程中,MSComm控制並非如想像中那麼完美且容易控制.特別是在中文Wln
95/98下通信時更會出現問題。以下就從基礎開始介紹,然後逐步討淪MSComm控制在程式設計中出現的問題以及程式設計技巧。
一、用MSComm控件通信
1.串口通訊基礎知識
一般悅來,電腦都有一個或多個串行端口,它們依次為com1、Com2、…,這些串口還提供了外部設備與pC進行數據傳輸和
皿信的通道。這些串列在CPU和周邊之間充當解釋器的角色。當字元資料從CPU發送給外設時,這些字元資料將會轉換成串列位元
流資料;當接收資料時,比特流資料被轉換為字元資料傳遞給CPU,再進一步說,在作業系統方面,Windows用通訊驅動程式
(COMM.DRV)呼叫API函數發送和接收數據,當用通訊控製或聲明呼叫API函數時,它門由COMM.DRV解釋並傳遞給設備驅動程序,
作為一個vB程式設計師,要編寫通訊程式.只要知道通訊控件提供給Windows通訊AP1函數的介面即可.換句話說,只需設定和監視通
信控制項的屬性和事件即可。
2.使用Mscomm控件
在開始使用MSComm控制項之前。需要先了解其屬性、事件或錯誤
屬性描述
CommPort設定或返回通訊埠號
Settings以字串的形式設定或傳回波特率、奇偶校驗、資料位元和停止位
PortOpen設定或傳回通訊埠的狀態。也可以打開和關閉端口
Input傳回並刪除接收緩衝區中的字符
Output將字串寫入傳送緩衝區
CommEvent屬性為通訊事件或錯誤傳回下列值之一。在該控制項的物件庫中也可以找到這些常數。
常量值描述
ComEventBreak1001收到了斷開訊號
ComEventCTSTO1002ClearToSendTimeout。發送字元時,在系統指定的事1件內,CTS(ClearToSend)線是低電位
ComEventDSRTO1003DataSetReadyTimeout。在傳送字元時,在系統指定的事件內,DSR(DataSetReady)線是低電平
ComEventFrame1004資料幀錯誤。硬體偵測到一個資料幀錯誤
ComEventOverrun1006埠溢位。硬體中的字元尚未讀,下一個字元又到達,並且丟失
ComEventCDTO1007CarrierDetectTime。在發送字元時,在系統指定的事件內,CD(CarrierDetect)線是低電平。 CD
也稱為RLSD(ReceiveLineSingalDetect,接收線訊號偵測)
ComEventRxOver1008接收緩衝區溢位。在接收緩衝區中沒有空間
ComEventRxParity1009奇偶校驗錯。硬體偵測到奇偶校驗錯誤7
ComEventTxFull1010發送緩衝區滿。在對發送字元排隊時,發送緩衝區滿
ComEventDCB1011檢取連接埠DCB(DeviceControlBlick)時發生了沒有預料到的錯誤
通訊事件包含了下面的設定:
常量值描述
ComEvSend1傳送緩衝區中的字元數比Sthreshold值低
ComEvReceive2接收到了Rthreshold個字元。持續產生該事件,直到使用了Input屬性刪除了接收緩衝區中的數據
ComEvCTS3CTS(ClearToSend)線改變
ComEvDSR4DSR(DataSetReady)線改變。當DSR從1到0改變時,該事件發生
ComEvCD5CD(CarrierDetect)線改變ComEvRing6偵測到響鈴訊號。一些URAT(UniversalAsynchronousReciver-
-Transmitters,通用非同步收發器)不支援此事件
ComEvEOF7收到了EOF字元(ASCII字元26)
Error訊息(MSComm控制)下表列出了MSComm控制項可擷取的錯誤訊息:
常量值描述
ComInvalidPropertyValue380無效的屬性值
ComSetNotSupported383屬性唯讀
ComGetNotSupported394屬性唯讀
ComPortOpen8000埠開啟時此存在無效
8001超時設定必須比0值大
ComPortInvalid8002無效的連接埠號
8003屬性只在運行時有效
8004屬性在運行時是唯讀的
ComPortAleadyOpen8005埠已經打開
8006設備識別碼無效或不支援
8007不支援設備的波特率
8008指定的位元組大小無效
8009缺省參數錯誤
8010硬體不可用(被其他設備鎖住)
8011函數不能分配隊列
ComNoOpen8012設備沒有打開
8013設備已經打開
8014不能使用通訊通知
ComSetCommStateFailed8015不能設定通訊狀態
8016不能設定通訊事件屏蔽
ComPortNotOpen8018此存在只在連接埠開啟是有效
8019設備忙
ComReadError8020通訊設備讀取錯誤
ComDCBError8021檢取連接埠設備控制塊時出現內部錯誤
搞清楚以上基本屬性後,就可以開始寫通訊許程序了。在VB5.0/6.0中新建一個工程文件。新增MicrosoftCommControl5.0群組
件,在簡體Form1中加入Command指令按鈕並取名為CmdTest,MSComm控制取名為MSComm1,加入下列程式碼。
PrivateSubcmdTestClick()'打開串列埠
MSComml.CommPort=2'設定Com2
IfMSComml.PortOpen=FalseThen
MSComm1.Settings="9600,n,8,1"'9600波特率,無校驗,8位元資料位,1位元停止位
MSComm1.PortOpen=True'開啟串列埠
Endif
MSComm1.OutBufferCount=0'清空發送緩衝區
MSComm1.InBufferCount=0'滑空接收緩衝區
'發送字元資料時注意必須用回車符(vbcr)結束
MSComm1.Output="Thisisaqoodbook!"&vbCr
'潑打電話號碼或發送AT命令
MSComm1.Output="ATDT05778191898,&vbCr
'發送字元數組資料時注意ByteArray必須事先定義賦值
DimByteArrayasbyte()
'定義動態數組
ReDimByteArray(1)
'重定義數組大小
ByteArray(0)=0
ByteArray(1)=1
MSComm1.Output=ByteArray
EndSub
privateSubMScommEvent()
SelectCaseMSComm1.CommEvent
CasecomEvReceive
DimBufferAsVariant
MSComm1.InputLen=0
'接收二進位數據
MSComm1.InputMode=ComInputModeBinary
Buffer=MSComm1.Input
'接收字元數據
MSComm1.InputMode=comInputModeText
Buffer=MSComml.Input
Caseelse
EndSelect
Endsub
(程序1)
1 2下一頁閱讀全文