關(guān)于MSCOMM控件的一些說明第1/2頁
更新時(shí)間:2007年03月08日 00:00:00 作者:
關(guān)于MSCOMM控件的一些說明
VB5.0/6.的MSComm通信控件提供了一系列標(biāo)準(zhǔn)通信命令的接口,它允許建立串口連接,可以連接到其他通信設(shè)備(如Modem).
還可以發(fā)送命令、進(jìn)行數(shù)據(jù)交換以及監(jiān)視和響應(yīng)在通信過程中可能發(fā)生的各種錯(cuò)誤和事件,從而可以用它創(chuàng)建全雙工 、事件驅(qū)
動(dòng)的、高效實(shí)用的通信程序。但在實(shí)際通信軟件設(shè)計(jì)過程中,MSComm控件并非像想像中那樣完美和容易控制.特別是在中文Wln
95/98下通信時(shí)更會(huì)出現(xiàn)問題。下面就從基礎(chǔ)開始介紹,然后逐步討淪MSComm控件在編程中出現(xiàn)的問題以及編程技巧。
一、用MSComm控件通信
1.串口通信基礎(chǔ)知識(shí)
一般悅來,計(jì)算機(jī)都有一個(gè)或多個(gè)串行端口,它們依次為com1、Com2、…,這些串口還提供了外部設(shè)備與pC進(jìn)行數(shù)據(jù)傳輸和
皿信的通道。這些串口在CPU和外設(shè)之間充當(dāng)解釋器的角色。當(dāng)字符數(shù)據(jù)從CPU發(fā)送給外設(shè)時(shí),這些字符數(shù)據(jù)將被轉(zhuǎn)換成串行比特
流數(shù)據(jù);當(dāng)接收數(shù)據(jù)時(shí),比特流數(shù)據(jù)被轉(zhuǎn)換為字符數(shù)據(jù)傳遞給CPU,再進(jìn)一步說,在操作系統(tǒng)方面,Windows用通信驅(qū)動(dòng)程序
(COMM.DRV)調(diào)用API函數(shù)發(fā)送和接收數(shù)據(jù),當(dāng)用通信控件或聲明調(diào)用API函數(shù)時(shí),它門由COMM. DRV解釋并傳遞給設(shè)備驅(qū)動(dòng)程序,
作為一個(gè)vB程序員,要編寫通信程序.只需知道通信控件提供給Windows通信AP1函數(shù)的接口即可.換句話說,只需設(shè)定和監(jiān)視通
信控件的屬性和事件即可。
2.使用Mscomm控件
在開始使用MSComm控件之前。需要先了解其屬性、事件或錯(cuò)誤
屬性 描述
CommPort 設(shè)置或返回通信端口號(hào)
Settings 以字符串的形式設(shè)置或返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位和停止位
PortOpen 設(shè)置或返回通信端口的狀態(tài)。也可以打開和關(guān)閉端口
Input 返回和刪除接收緩沖區(qū)中的字符
Output 將字符串寫入發(fā)送緩沖區(qū)
CommEvent屬性為通信事件或錯(cuò)誤返回下列值之一。在該控件的對(duì)象庫中也可以找到這些常量。
常量 值 描述
ComEventBreak 1001 收到了斷開信號(hào)
ComEventCTSTO 1002 Clear To Send Timeout。在發(fā)送字符時(shí),在系統(tǒng)指定的事1件內(nèi),CTS(Clear To Send)線是低電平
ComEventDSRTO 1003 Data Set Ready Timeout。在發(fā)送字符時(shí),在系統(tǒng)指定的事件內(nèi),DSR(Data Set Ready)線是低電平
ComEventFrame 1004 數(shù)據(jù)幀錯(cuò)誤。硬件檢測(cè)到一個(gè)數(shù)據(jù)幀錯(cuò)誤
ComEventOverrun 1006 端口溢出。硬件中的字符尚未讀,下一個(gè)字符又到達(dá),并且丟失
ComEventCDTO 1007 Carrier Detect Time。在發(fā)送字符時(shí),在系統(tǒng)指定的事件內(nèi),CD(Carrier Detect)線是低電平。CD
也稱為RLSD(Receive Line Singal Detect,接收線信號(hào)檢測(cè))
ComEventRxOver 1008 接收緩沖區(qū)溢出。在接收緩沖區(qū)中沒有空間
ComEventRxParity 1009 奇偶校驗(yàn)錯(cuò)。硬件檢測(cè)到奇偶校驗(yàn)錯(cuò)誤7
ComEventTxFull 1010 發(fā)送緩沖區(qū)滿。在對(duì)發(fā)送字符排隊(duì)時(shí),發(fā)送緩沖區(qū)滿
ComEventDCB 1011 檢取端口DCB(Device Control Blick)時(shí)發(fā)生了沒有預(yù)料到的錯(cuò)誤
通信事件包含了下面的設(shè)置:
常量 值 描述
ComEvSend 1 發(fā)送緩沖區(qū)中的字符數(shù)比Sthreshold值低
ComEvReceive 2 接收到了Rthreshold個(gè)字符。持續(xù)產(chǎn)生該事件,直到使用了Input屬性刪除了接收緩沖區(qū)中的數(shù)據(jù)
ComEvCTS 3 CTS(Clear To Send)線改變
ComEvDSR 4 DSR(Data Set Ready)線改變。當(dāng)DSR從1到0改變時(shí),該事件發(fā)生
ComEvCD 5 CD(Carrier Detect)線改變ComEvRing6檢測(cè)到響鈴信號(hào)。一些URAT(Universal AsynchronousReciver-
-Transmitters,通用異步收發(fā)器)不支持該事件
ComEvEOF 7 收到了EOF字符(ASCII字符26)
Error消息(MSComm控件)下表列出了MSComm控件可捕獲的錯(cuò)誤消息:
常量 值 描述
ComInvalidPropertyValue 380 無效的屬性值
ComSetNotSupported 383 屬性只讀
ComGetNotSupported 394 屬性只讀
ComPortOpen 8000 端口打開時(shí)該存在無效
8001 超時(shí)設(shè)置必須比0值大
ComPortInvalid 8002 無效的端口號(hào)
8003 屬性只在運(yùn)行時(shí)有效
8004 屬性在運(yùn)行時(shí)是只讀的
ComPortAleadyOpen 8005 端口已經(jīng)打開
8006 設(shè)備標(biāo)識(shí)符無效或不支持
8007 不支持設(shè)備的波特率
8008 指定的字節(jié)大小無效
8009 缺省參數(shù)錯(cuò)誤
8010 硬件不可用(被其他設(shè)備鎖?。?
8011 函數(shù)不能分配隊(duì)列
ComNoOpen 8012 設(shè)備沒有打開
8013 設(shè)備已經(jīng)打開
8014 不能使用通信通知
ComSetCommStateFailed 8015 不能設(shè)置通信狀態(tài)
8016 不能設(shè)置通信事件屏蔽
ComPortNotOpen 8018 該存在只在端口打開是有效
8019 設(shè)備忙
ComReadError 8020 通信設(shè)備讀錯(cuò)誤
ComDCBError 8021 檢取端口設(shè)備控制塊時(shí)出現(xiàn)內(nèi)部錯(cuò)誤
搞清楚以上基本屬性后,就可以開始編寫通信許程序了。在VB5.0/6.0中新建一個(gè)工程文件。添加Microsoft Comm Control 5.0組
件,在簡(jiǎn)體Form1中加入Command命令按鈕并取名為CmdTest,MSComm控件取名為MSComm1,加入如下程序代碼。
Private Sub cmdTestClick ( ) '打開串口
MSComml.CommPort =2 '設(shè)定Com2
If MSComml.PortOpen = False Then
MSComm1.Settings = "9600,n,8,1" '9600波特率,無校驗(yàn),8位數(shù)據(jù)位,1位停止位
MSComm1.PortOpen = True '打開串口
End if
MSComm1.OutBufferCount = 0 '清空發(fā)送緩沖區(qū)
MSComm1.InBufferCount = 0 '滑空接收緩沖區(qū)
'發(fā)送字符數(shù)據(jù)時(shí)注意必須用回車符(vbcr)結(jié)束
MSComm1.Output="This is a qood book ! " &vbCr
'潑打電話號(hào)碼或發(fā)送AT命令
MSComm1.Output = "ATDT 05778191898 , & vbCr
'發(fā)送字符數(shù)組數(shù)據(jù)時(shí)注意ByteArray必須事先定義賦值
Dim ByteArray as byte( )
'定義動(dòng)態(tài)數(shù)組
ReDim ByteArray(1)
'重定義數(shù)組大小
ByteArray ( 0 ) =0
ByteArray ( 1 ) = 1
MSComm1.Output = ByteArray
End Sub
private Sub MScommEvent( )
Select Case MSComm1.CommEvent
Case comEvReceive
Dim Buffer As Variant
MSComm1.InputLen = 0
'接收二進(jìn)制數(shù)據(jù)
MSComm1.InputMode= ComInputModeBinary
Buffer=MSComm1.Input
'接收字符數(shù)據(jù)
MSComm1.InputMode=comInputModeText
Buffer = MSComml.Input
Case else
End Select
End sub
( 程序1)
VB5.0/6.的MSComm通信控件提供了一系列標(biāo)準(zhǔn)通信命令的接口,它允許建立串口連接,可以連接到其他通信設(shè)備(如Modem).
還可以發(fā)送命令、進(jìn)行數(shù)據(jù)交換以及監(jiān)視和響應(yīng)在通信過程中可能發(fā)生的各種錯(cuò)誤和事件,從而可以用它創(chuàng)建全雙工 、事件驅(qū)
動(dòng)的、高效實(shí)用的通信程序。但在實(shí)際通信軟件設(shè)計(jì)過程中,MSComm控件并非像想像中那樣完美和容易控制.特別是在中文Wln
95/98下通信時(shí)更會(huì)出現(xiàn)問題。下面就從基礎(chǔ)開始介紹,然后逐步討淪MSComm控件在編程中出現(xiàn)的問題以及編程技巧。
一、用MSComm控件通信
1.串口通信基礎(chǔ)知識(shí)
一般悅來,計(jì)算機(jī)都有一個(gè)或多個(gè)串行端口,它們依次為com1、Com2、…,這些串口還提供了外部設(shè)備與pC進(jìn)行數(shù)據(jù)傳輸和
皿信的通道。這些串口在CPU和外設(shè)之間充當(dāng)解釋器的角色。當(dāng)字符數(shù)據(jù)從CPU發(fā)送給外設(shè)時(shí),這些字符數(shù)據(jù)將被轉(zhuǎn)換成串行比特
流數(shù)據(jù);當(dāng)接收數(shù)據(jù)時(shí),比特流數(shù)據(jù)被轉(zhuǎn)換為字符數(shù)據(jù)傳遞給CPU,再進(jìn)一步說,在操作系統(tǒng)方面,Windows用通信驅(qū)動(dòng)程序
(COMM.DRV)調(diào)用API函數(shù)發(fā)送和接收數(shù)據(jù),當(dāng)用通信控件或聲明調(diào)用API函數(shù)時(shí),它門由COMM. DRV解釋并傳遞給設(shè)備驅(qū)動(dòng)程序,
作為一個(gè)vB程序員,要編寫通信程序.只需知道通信控件提供給Windows通信AP1函數(shù)的接口即可.換句話說,只需設(shè)定和監(jiān)視通
信控件的屬性和事件即可。
2.使用Mscomm控件
在開始使用MSComm控件之前。需要先了解其屬性、事件或錯(cuò)誤
屬性 描述
CommPort 設(shè)置或返回通信端口號(hào)
Settings 以字符串的形式設(shè)置或返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位和停止位
PortOpen 設(shè)置或返回通信端口的狀態(tài)。也可以打開和關(guān)閉端口
Input 返回和刪除接收緩沖區(qū)中的字符
Output 將字符串寫入發(fā)送緩沖區(qū)
CommEvent屬性為通信事件或錯(cuò)誤返回下列值之一。在該控件的對(duì)象庫中也可以找到這些常量。
常量 值 描述
ComEventBreak 1001 收到了斷開信號(hào)
ComEventCTSTO 1002 Clear To Send Timeout。在發(fā)送字符時(shí),在系統(tǒng)指定的事1件內(nèi),CTS(Clear To Send)線是低電平
ComEventDSRTO 1003 Data Set Ready Timeout。在發(fā)送字符時(shí),在系統(tǒng)指定的事件內(nèi),DSR(Data Set Ready)線是低電平
ComEventFrame 1004 數(shù)據(jù)幀錯(cuò)誤。硬件檢測(cè)到一個(gè)數(shù)據(jù)幀錯(cuò)誤
ComEventOverrun 1006 端口溢出。硬件中的字符尚未讀,下一個(gè)字符又到達(dá),并且丟失
ComEventCDTO 1007 Carrier Detect Time。在發(fā)送字符時(shí),在系統(tǒng)指定的事件內(nèi),CD(Carrier Detect)線是低電平。CD
也稱為RLSD(Receive Line Singal Detect,接收線信號(hào)檢測(cè))
ComEventRxOver 1008 接收緩沖區(qū)溢出。在接收緩沖區(qū)中沒有空間
ComEventRxParity 1009 奇偶校驗(yàn)錯(cuò)。硬件檢測(cè)到奇偶校驗(yàn)錯(cuò)誤7
ComEventTxFull 1010 發(fā)送緩沖區(qū)滿。在對(duì)發(fā)送字符排隊(duì)時(shí),發(fā)送緩沖區(qū)滿
ComEventDCB 1011 檢取端口DCB(Device Control Blick)時(shí)發(fā)生了沒有預(yù)料到的錯(cuò)誤
通信事件包含了下面的設(shè)置:
常量 值 描述
ComEvSend 1 發(fā)送緩沖區(qū)中的字符數(shù)比Sthreshold值低
ComEvReceive 2 接收到了Rthreshold個(gè)字符。持續(xù)產(chǎn)生該事件,直到使用了Input屬性刪除了接收緩沖區(qū)中的數(shù)據(jù)
ComEvCTS 3 CTS(Clear To Send)線改變
ComEvDSR 4 DSR(Data Set Ready)線改變。當(dāng)DSR從1到0改變時(shí),該事件發(fā)生
ComEvCD 5 CD(Carrier Detect)線改變ComEvRing6檢測(cè)到響鈴信號(hào)。一些URAT(Universal AsynchronousReciver-
-Transmitters,通用異步收發(fā)器)不支持該事件
ComEvEOF 7 收到了EOF字符(ASCII字符26)
Error消息(MSComm控件)下表列出了MSComm控件可捕獲的錯(cuò)誤消息:
常量 值 描述
ComInvalidPropertyValue 380 無效的屬性值
ComSetNotSupported 383 屬性只讀
ComGetNotSupported 394 屬性只讀
ComPortOpen 8000 端口打開時(shí)該存在無效
8001 超時(shí)設(shè)置必須比0值大
ComPortInvalid 8002 無效的端口號(hào)
8003 屬性只在運(yùn)行時(shí)有效
8004 屬性在運(yùn)行時(shí)是只讀的
ComPortAleadyOpen 8005 端口已經(jīng)打開
8006 設(shè)備標(biāo)識(shí)符無效或不支持
8007 不支持設(shè)備的波特率
8008 指定的字節(jié)大小無效
8009 缺省參數(shù)錯(cuò)誤
8010 硬件不可用(被其他設(shè)備鎖?。?
8011 函數(shù)不能分配隊(duì)列
ComNoOpen 8012 設(shè)備沒有打開
8013 設(shè)備已經(jīng)打開
8014 不能使用通信通知
ComSetCommStateFailed 8015 不能設(shè)置通信狀態(tài)
8016 不能設(shè)置通信事件屏蔽
ComPortNotOpen 8018 該存在只在端口打開是有效
8019 設(shè)備忙
ComReadError 8020 通信設(shè)備讀錯(cuò)誤
ComDCBError 8021 檢取端口設(shè)備控制塊時(shí)出現(xiàn)內(nèi)部錯(cuò)誤
搞清楚以上基本屬性后,就可以開始編寫通信許程序了。在VB5.0/6.0中新建一個(gè)工程文件。添加Microsoft Comm Control 5.0組
件,在簡(jiǎn)體Form1中加入Command命令按鈕并取名為CmdTest,MSComm控件取名為MSComm1,加入如下程序代碼。
Private Sub cmdTestClick ( ) '打開串口
MSComml.CommPort =2 '設(shè)定Com2
If MSComml.PortOpen = False Then
MSComm1.Settings = "9600,n,8,1" '9600波特率,無校驗(yàn),8位數(shù)據(jù)位,1位停止位
MSComm1.PortOpen = True '打開串口
End if
MSComm1.OutBufferCount = 0 '清空發(fā)送緩沖區(qū)
MSComm1.InBufferCount = 0 '滑空接收緩沖區(qū)
'發(fā)送字符數(shù)據(jù)時(shí)注意必須用回車符(vbcr)結(jié)束
MSComm1.Output="This is a qood book ! " &vbCr
'潑打電話號(hào)碼或發(fā)送AT命令
MSComm1.Output = "ATDT 05778191898 , & vbCr
'發(fā)送字符數(shù)組數(shù)據(jù)時(shí)注意ByteArray必須事先定義賦值
Dim ByteArray as byte( )
'定義動(dòng)態(tài)數(shù)組
ReDim ByteArray(1)
'重定義數(shù)組大小
ByteArray ( 0 ) =0
ByteArray ( 1 ) = 1
MSComm1.Output = ByteArray
End Sub
private Sub MScommEvent( )
Select Case MSComm1.CommEvent
Case comEvReceive
Dim Buffer As Variant
MSComm1.InputLen = 0
'接收二進(jìn)制數(shù)據(jù)
MSComm1.InputMode= ComInputModeBinary
Buffer=MSComm1.Input
'接收字符數(shù)據(jù)
MSComm1.InputMode=comInputModeText
Buffer = MSComml.Input
Case else
End Select
End sub
( 程序1)
相關(guān)文章
VB簡(jiǎn)單實(shí)現(xiàn)防止文件被改寫
這篇文章主要介紹了VB簡(jiǎn)單實(shí)現(xiàn)防止文件被改寫的方法,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-06-06VB的32位程序在64位系統(tǒng)中出現(xiàn)文件和注冊(cè)表自動(dòng)轉(zhuǎn)向的解決方法
這篇文章主要介紹了VB的32位程序在64位系統(tǒng)中出現(xiàn)文件和注冊(cè)表自動(dòng)轉(zhuǎn)向的解決方法,需要的朋友可以參考下2014-07-07VB中使用WMI獲取系統(tǒng)硬件和軟件有關(guān)信息
WMI是英文Windows Management Instrumentation的簡(jiǎn)寫,它的功能主要是:訪問本地主機(jī)的一些信息和服務(wù),可以管理遠(yuǎn)程計(jì)算機(jī)(當(dāng)然你必須要擁有足夠的權(quán)限),比如:重啟,關(guān)機(jī),關(guān)閉進(jìn)程,創(chuàng)建進(jìn)程等2019-04-04VB使用shell函數(shù)打開外部exe程序的實(shí)現(xiàn)方法
這篇文章主要介紹了VB使用shell函數(shù)打開外部exe程序的實(shí)現(xiàn)方法,是非常實(shí)用的一個(gè)功能,需要的朋友可以參考下2014-07-07VB使用XMLHTTP實(shí)現(xiàn)Post與Get的方法
這篇文章主要介紹了VB使用XMLHTTP實(shí)現(xiàn)Post與Get的方法,有一定的借鑒價(jià)值,需要的朋友可以參考下2014-07-07