国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - VB - 關于MSCOMM控件的一些說明

關于MSCOMM控件的一些說明

2021-10-06 20:26VB教程網 VB

VB5.0/6.的MSComm通信控件提供了一系列標準通信命令的接口,它允許建立串口連接,可以連接到其他通信設備(如Modem).

關于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屬性為通信事件或錯誤返回下列值之一。在該控件的對象庫中也可以找到這些常量。
常量           值        描述
ComEventBreak   1001    收到了斷開信號
ComEventCTSTO   1002    Clear To Send Timeout。在發送字符時,在系統指定的事1件內,CTS(Clear To Send)線是低電平
ComEventDSRTO   1003    Data Set Ready Timeout。在發送字符時,在系統指定的事件內,DSR(Data Set Ready)線是低電平
ComEventFrame   1004    數據幀錯誤。硬件檢測到一個數據幀錯誤
ComEventOverrun 1006    端口溢出。硬件中的字符尚未讀,下一個字符又到達,并且丟失
ComEventCDTO    1007    Carrier Detect Time。在發送字符時,在系統指定的事件內,CD(Carrier Detect)線是低電平。CD
                        也稱為RLSD(Receive Line Singal Detect,接收線信號檢測)
ComEventRxOver  1008    接收緩沖區溢出。在接收緩沖區中沒有空間
ComEventRxParity 1009   奇偶校驗錯。硬件檢測到奇偶校驗錯誤7
ComEventTxFull  1010    發送緩沖區滿。在對發送字符排隊時,發送緩沖區滿
ComEventDCB     1011    檢取端口DCB(Device Control Blick)時發生了沒有預料到的錯誤

通信事件包含了下面的設置:
 常量         值        描述
ComEvSend      1    發送緩沖區中的字符數比Sthreshold值低
ComEvReceive   2    接收到了Rthreshold個字符。持續產生該事件,直到使用了Input屬性刪除了接收緩沖區中的數據
ComEvCTS       3    CTS(Clear To Send)線改變
ComEvDSR       4    DSR(Data Set Ready)線改變。當DSR從1到0改變時,該事件發生
ComEvCD        5    CD(Carrier Detect)線改變ComEvRing6檢測到響鈴信號。一些URAT(Universal AsynchronousReciver-
                    -Transmitters,通用異步收發器)不支持該事件
ComEvEOF       7    收到了EOF字符(ASCII字符26)

Error消息(MSComm控件)下表列出了MSComm控件可捕獲的錯誤消息:
常量                       值      描述
ComInvalidPropertyValue    380   無效的屬性值
ComSetNotSupported         383   屬性只讀
ComGetNotSupported         394   屬性只讀
ComPortOpen               8000   端口打開時該存在無效
                          8001   超時設置必須比0值大
ComPortInvalid            8002   無效的端口號
                          8003   屬性只在運行時有效
                          8004   屬性在運行時是只讀的
ComPortAleadyOpen         8005   端口已經打開
                          8006   設備標識符無效或不支持
                          8007   不支持設備的波特率
                          8008   指定的字節大小無效
                          8009   缺省參數錯誤
                          8010   硬件不可用(被其他設備鎖住)
                          8011   函數不能分配隊列
ComNoOpen                 8012   設備沒有打開
                          8013   設備已經打開
                          8014   不能使用通信通知
ComSetCommStateFailed     8015   不能設置通信狀態
                          8016   不能設置通信事件屏蔽
ComPortNotOpen            8018   該存在只在端口打開是有效
                          8019   設備忙
ComReadError              8020   通信設備讀錯誤
ComDCBError               8021   檢取端口設備控制塊時出現內部錯誤

搞清楚以上基本屬性后,就可以開始編寫通信許程序了。在VB5.0/6.0中新建一個工程文件。添加Microsoft Comm Control 5.0組
件,在簡體Form1中加入Command命令按鈕并取名為CmdTest,MSComm控件取名為MSComm1,加入如下程序代碼。
Private Sub cmdTestClick ( )            '打開串口
MSComml.CommPort =2                     '設定Com2
If MSComml.PortOpen = False Then
MSComm1.Settings = "9600,n,8,1"         '9600波特率,無校驗,8位數據位,1位停止位
MSComm1.PortOpen = True                 '打開串口
End if
MSComm1.OutBufferCount = 0              '清空發送緩沖區
MSComm1.InBufferCount = 0               '滑空接收緩沖區

'發送字符數據時注意必須用回車符(vbcr)結束
MSComm1.Output="This is a qood book ! " &vbCr

'潑打電話號碼或發送AT命令
MSComm1.Output = "ATDT 05778191898 , & vbCr

'發送字符數組數據時注意ByteArray必須事先定義賦值
Dim ByteArray as byte( )

'定義動態數組
ReDim ByteArray(1)

'重定義數組大小
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
'接收二進制數據
MSComm1.InputMode= ComInputModeBinary
Buffer=MSComm1.Input
'接收字符數據
MSComm1.InputMode=comInputModeText
Buffer = MSComml.Input
Case else
End Select
End sub 
( 程序1)

二、中文Win 95/98下的通信問題與解決方法
1.接收的數據少于發送的數據
    如果通過MSComm控件一次性傳送較多的二進制數據,那么,很可能收到的數據不足。例如在設置為24oobps傳輸率的情況下,
一次性可以傳輸2048個字符數據 那么在大多數情況下。一次只能收到1200個字符左右,這址出為新版的MSComm32.OCX中存在一
個影響傳輸二進制數據的臭蟲(bug).注意這不是特性。
    32位Windows API函數(以下簡稱API)使用了幾個用COMMTIMEOUTS結構表示的限時變量,WriteTotalTimeOutConstant 即是其
中的一個,它被Windows內部設定為5000(即5秒),這個常量決定了在通信驅動程序停止傳輸之前花費在發送緩沖區中數據的時間
的長短,5秒鐘意味著通信速度為1200bps情況下僅能發送600個字符,24oobps情況下僅能發送1200個左右的字符。事實上,在一個
緩沖區內一次性發送更多的數據是非常可能的。這個bug同樣也能引發問題,甚至在高速串口門通信情況下,即使系統在使用流控
制,無論叢軟件流(Xon/XofI)還是硬件流(CTS/RTS)。假如數據在發送緩沖區中時,流控制停止了傳輸,如果停止時間超過5
秒鐘.則數據就會丟失。在某些環境下,5秒鐘可能相當短.不過也不必擔心, VB 5.0/6.0版本的MSComm控件有一個新增的重要的
屬性稱為CommID, CommID指的是當串口被打開時,被API所調用的串口句柄或稱標志,這也意味著能利用API接口函數去修改這個
常量。每次串口關閉后,Windows會自動將之恢復為5000,所以,每次打開串口后需要重斬設定以下API聲明,其代碼見下程序。
Type COMMTIMEOUTS
ReadIntervalTimeout As Long
ReadTotalTimeoutMultiplier As Long
ReadTotalTimeoutConstant As Long
WriteTotalTimeoutMultiplier As Long
WriteTotalTimeoutConstant As Long
End Type
Declare Function SetCommTimeouts Lib "Kernel32"
(BYVal hFile As Long, lpComm TimeoutsAs COMMTIMEOUTS) As Long
Declare Function GetCommTimeouts Lib "Kernel32"
(ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long
Dim timeouts As COMMEOUTS
Dim Ret As Long
If Comm1.PortOpen = False Then
Comm1.PortOpen = True
End if
Ret=GetCommTimeouts ( Comm1.CommID , timeouts )
'Set some default timeouts
timeOuts.ReadIntervalTimeout = 1
timeouts.ReadTotalTimeoutMultiplier =1
timeouts.ReadTotalTimeoutConstant =1
timeouts.WriteTotalTimeoutMultiplier =1
timeouts.WriteTotalTimeoutConstant=
( Comm1.OutBufferSize\Val(Comm1.Settings))*10000+1000
Ret=SetCommTimeouts( Comm1.CommID , timeouts )
( 程序2)

2.如何發送大于128的字符數據
    在通信程序中,以單字符方式逐個發送數據時,每一個數據范圍 0-255(即十六進制的00-FF)。在單字符版本的英文Win95或
DOS版的BASIC程序中,只需要將相應的數據轉換成相應的字符發送到通信端口即可。但在中文Win95/98下卻行不通,假設在中文
Win95/98下運行以下程序:
Dim i
For i=0 to 255
MSComm1.Output=chr(i)
Next i

    希望在接收端得到預期的0-255之間的數據,結果卻是:前129個數據接收正確,為0-128,后面127個數據為126個0和一個255,
造成這種給果的原因在于中文Windows使用的是雙字節字符集(DBCS)系統。DBCS系統使用0-128之間的數字表示ASCII字符,大于
128的數字僅作為前導字符,它只是顯示是一個非拉丁語系的字符,而并不代表實際意義。上述程序在調用CHR()函數時用到了
DBCS字符集,岡此產生了此類錯誤。那么,如何發送人于128的數據呢?答案是使用字符數組,將以上程序改為:
Dim cc(255) As Byte
For i = 0 To 255
cc(i) = i
Next i
MSComm1.Output = cc
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0
'接收過程 MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Dim Buffer As Variant, b1,i
MSComm1.InputMode=comInputModeBinery
MSComm1.InputLen = 0
Buffer = MSComm1.Input
For i=LBound (Buffer) To UBound (Buffer )
Debug.Print Buffer ( i ) ;
Next i
Case . . . . . 

    3.如何發送0字符(00H,NULL)
在VisuaI C++中使用串口控件發送0字符有些麻煩,但在VB5.0/6.0中只要注意以下兩點即可:
(1)設置MSComm控件的屬性 NullDiscard=False;。
(2)使用二進制接收,即用 MSComm1.InputMode=ComInputModeBinary便可以解決問題;

    4.如何發送遞中文字符串(DBcS字符)
VB5.0/6.0的各種參考書上均指明MSComm通信控件不能發送或接收雙字節字符集系統DBCS)的二進制數據,這對于我國及亞洲一些
使用DBCS字符集的國家不能不說是一大人遺憾。但是我在實踐中發現,用MSComm控件也可以發送中文字符,具體方法有以下兩種:
(1)直接發送
    直接發送即把中文字符等同于英文字符。如:MSComm1.Intput= " 這是一行中文數據!" ,但這種方法發送的中文數據不能太
長,發送緩沖區和接收緩沖區的大小需設定為中文字符的兩倍以上,而且發送與接收系統所處的操作系統版本最好要一致,否則會
出現接收或發送緩沖區溢出之類的錯誤。這種方法時用于一般要求不太高的場合。
(2)間接發送
    在發送端將漢字或字符轉換為機器內碼或區位碼數據數組,然后將詠轉換后的數據發送到串口,在接收端接收到數據后,按照
相反的順序得到的數據轉換為相應的漢字或字符,在轉換過程中.要用到位運算,如取得漢字的內碼后需要將高字節和低字節分開,
而VB5.0/6.0中并沒有提供此類函數,以下是求整數高、低字節的函數。

Public Function HiByte(a As Integer ) 
Dim b
b= a And &HFF00
b = b / 256
If b<0 Then b = b + 256
HiByte = b
End Function

Public Function LowByte(a As Integ`er)
Dim b
b = a And &HFF
LowByte = b
End Function

5.如何用單機進行通信測試
    通常在寫好了通信程序后需要兩臺PC或一臺Pc、一臺單片機.將通信口連接后進行測試,但很多時侯因條件限制僅有單臺PC機,
測試項目很簡單,那么能否測試呢?當然可以,而且方法也很簡單。對于九針的串口,找一個廢棄的串口鼠標,剝外鼠標線,將連
接2、3針的線對接即可;對于25針的串口,找一枚曲別針(最好有塑料外套的)將它扯直,剝削去兩頭的塑料后在兩頭各彎一個圓
圈,中間對忻后直接套接在串口的2、3針上即可。如果但心不夠安全,則可以將5針按地。 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
關于mscomm的用法,提高篇......[mgwmj]©

MSCOMM控件是個好東西,如果您能夠充分了解他,他會為您衷心的效勞。

    大致看了一下下午有關討論MSCOMM的話題,覺得有必要說說我的心得,我一般只做硬件,沒有系統的學過軟件,只是業余時間
學學用用,多少掌握了一點,也在此拿出來玩玩,不知有錯沒有,我可是以為我已經做的很好了^_^

這是一個VB通用串口事件驅動接收程序。一次性接收一個數據包,數據包可以為任意字節,保證不會丟失一個數據!
Private Sub MSComm_OnComm()
    Dim S() As Byte
    Dim SS(1024) As Byte
    Static N As Long
    Static T As Variant

    If (MSComm.CommEvent = comEvReceive) Then
        S = MSComm.Input                      '只要有數據就收進來,哪怕只是一個
        If (Timer - T > 0.01) Then            '間隔10MS以上就認為是一個新的包
            text1=""                          'text1用于搜集和顯示接收(HEX格式)
            N = 0
        End If
        T = Timer
        For i = 0 To UBound(S)               '一個數據包可能產生若干個oncomm事件
            Text1.Text = Text1.Text & Right("0" & Hex(S(i)) & "H", 3) + " "
            SS(N+i)=S(i)                     '接收數據包緩存于SS()
            N=N+UBound(S)
        Next i
    End If
End Sub

延伸 · 閱讀

精彩推薦
  • VB分享如何在VB中調用VC編寫的DLL

    分享如何在VB中調用VC編寫的DLL

    一般來說,VB和VC共同編程有3種方式:一種是VC生成DLL,在VB中調用DLL;一種是VC生成ActiveX控件(.ocx),在VB中插入;還有一種是在VC中生成ActiveX Automation服務器...

    VB教程網4452021-10-07
  • VBVB6實現連接Access數據庫的ADODB代碼實現方法

    VB6實現連接Access數據庫的ADODB代碼實現方法

    這篇文章主要介紹了VB6實現連接Access數據庫的ADODB代碼實現方法,對于初學者掌握VB鏈接access數據庫有著很好的借鑒價值,需要的朋友可以參考下...

    VB教程網9832021-10-11
  • VBVB實現的16位和32位md5加密代碼分享

    VB實現的16位和32位md5加密代碼分享

    這篇文章主要介紹了VB實現的16位和32位md5加密代碼分享,需要的朋友可以參考下...

    VB.NET教程網8592021-10-08
  • VBVB的TextBox文本框實現垂直居中顯示的方法

    VB的TextBox文本框實現垂直居中顯示的方法

    這篇文章主要介紹了VB的TextBox文本框實現垂直居中顯示的方法,比較實用的功能,需要的朋友可以參考下...

    VB教程網15092021-10-11
  • VBVB關機惡搞小程序

    VB關機惡搞小程序

    本文給大家匯總了一些使用VB實現的關機惡搞小程序,大家娛樂一下就行了,千萬別做壞事哦...

    VB教程網10142021-10-16
  • VBVB獲取文件大小的方法

    VB獲取文件大小的方法

    這篇文章主要介紹了VB獲取文件大小的方法,可實現準確獲取文件大小的功能,需要的朋友可以參考下...

    小卒過河13192021-10-15
  • VBVB返回記錄集結果到HTML表格的方法

    VB返回記錄集結果到HTML表格的方法

    這篇文章主要介紹了VB返回記錄集結果到HTML表格的方法,實例分析了VB獲取記錄集與HTML表格生成的相關技巧,需要的朋友可以參考下...

    小卒過河10682021-10-15
  • VBVB鍵盤鼠標無動作調用程序的嘗試

    VB鍵盤鼠標無動作調用程序的嘗試

    這篇文章主要介紹了VB鍵盤鼠標無動作調用程序的嘗試,記錄下整個思路和過程,有需要的小伙伴可以參考下。...

    VB教程網4452021-10-15
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 羞羞视频免费观看网站 | 在线激情视频 | 亚洲视频二区 | 精品福利视频网站 | 三级黄色片在线免费观看 | 亚洲精品自拍 | 懂色av中文一区二区三区天美 | 免费毛片网站 | 亚洲精品乱码久久久久久金桔影视 | 欧美日韩一区二区视频在线观看 | 中文字幕av亚洲精品一部二部 | 自拍一区视频 | 天堂欧美城网站网址 | 国产999精品久久久久久 | 国产精品久久久久久 | 日韩精品一二三区 | 美女视频黄色 | 成人av片在线观看 | 91久久精品一区二区二区 | 国产精品久久久久久久久久新婚 | 日韩在线观看视频一区二区三区 | 日本视频网 | 一区二区三区精品视频免费看 | 国产性猛交xxxx免费看久久 | 伊人色私人影院蜜桃va | 日韩a电影 | 国产免费自拍 | 伊人网视频 | 日本久久精品 | 成人免费观看视频 | 一区二区国产在线观看 | 综合久久综合久久 | 久久久久久免费精品 | 欧美精品入口蜜桃 | 久久高清精品 | 啪啪网站免费 | 中文字幕av一区二区三区 | 91成人短视频在线观看 | 亚洲精品视频大全 | 久久手机视频 | 成年人视频免费在线看 |