日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在 Wi ndows,MSComm控件在中文Wi的ndows下的通信问题与处理方法.doc

發(fā)布時間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在 Wi ndows,MSComm控件在中文Wi的ndows下的通信问题与处理方法.doc 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MSComm控件在中文Wi的ndows下的通信問題與處理方法

MSComm控件在中文Windows下的通信問題與處理方法

摘 要VB 5.0/6.0的MSComm通信控件提供了一系列標準通信命令的接口,它允許建立串口連接,但在實際通信軟件設計過程中,MSComm控件并非像想像中那樣完美和容易控制,特別是在中文Windows下通信時更會出現(xiàn) 問題 。本文就MSComm控件在實際 應用 中可能出現(xiàn)的問題以及編程技巧進行探討。關鍵詞 MsComm控件 串口通信 處理1.MSComm控件的基礎 理論 一般說來, 計算 機都有一個或多個串行端口,它們依次為Com1、Com2、...。這些串口還提供了外部設備與PC進行數(shù)據(jù)傳輸和通信的通道,這些串口在CPU和外設之間充當解釋器的角色。當字符數(shù)據(jù)從CPU發(fā)送給外設時,這些字符數(shù)據(jù)將被轉換成串行比特流數(shù)據(jù);當接收數(shù)據(jù)時,比特流數(shù)據(jù)被轉換為字符數(shù)據(jù)傳遞給CPU。再進一步說,在操作系統(tǒng)方面,Windows用通信驅動程序(COMM.DRV)調(diào)用API函數(shù)發(fā)送和接收數(shù)據(jù)。當用通信控件或聲明調(diào)用API函數(shù)時,它們由COMM.DRV解釋并傳遞給設備驅動程序。作為一個VB程序員,要編寫通信程序,只需知道通信控件提供給Windows通信API函數(shù)的接口即可,換句話說,只需設定和監(jiān)視通信控件的屬性和事件即可。2.利用MSComm控件進行數(shù)據(jù)的接收和發(fā)送搞清楚以上基本屬性和事件后就可以開始編寫通信程序了:在VB 5.0/6.0中新建一個工程文件,添加Microsoft Comm control 5.0組件,在窗體Form1中加入Command命令按鈕并取名為cmdTest,MSComm控件取名為MSComm1,寫入以下代碼:Private Sub cmdTest_Click() MSComm1.CommPort = 1 #39;設定Com1口 If MSComm1.PortOpen = False The n MSComm1.Settings = “9600,N,8,1” #39;9600波特率,無校驗,8位數(shù)據(jù)位,1位停止位 MSComm1.PortOpen = True #39;打開串口 End If MSComm1.OutBufferCount = 0 #39;清空發(fā)送緩沖區(qū) MSComm1.InBufferCount = 0 #39;清空接收緩沖區(qū) #39;發(fā)送字符數(shù)據(jù),注意必須用回車符(vbCr)結束 MSComm1.Output=“This is a good book!” & vbCr #39;撥打電話號碼或發(fā)送AT命令 MSComm1.Output=“ATDT 0294563622” & vbCr #39;發(fā)送字符數(shù)組數(shù)據(jù),注意ByteArray必須事先定義賦值 Dim ByteArray as byte() #39;定義動態(tài)數(shù)組 ReDim ByteArray(1) #39;重定義數(shù)組大小 ByteArray(0)=0 ByteArray(1)=1 MSComm1.Output = ByteArray #39;發(fā)送字符數(shù)組數(shù)據(jù) End Sub Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive #39;接收字符數(shù)據(jù) Dim Buffer As Variant MSComm1.InputLen = 0 #39;當InputMode 屬性值為0(文本模式)時,變量中含String型數(shù)據(jù)。#39;當InputMode屬性值為1(二進制模式)時,變量中含Byte型數(shù)組數(shù)據(jù)。 MSComm1.InputMode=comInputModeBinary Buffer=MSComm1.Input #39;接收二進制數(shù)據(jù) MSComm1.InputMode=comInputModeText Buffer = MSComm1.Input Case else End Select End Sub 3.中文Windows下的通信問題與解決 方法 3.1 接收的數(shù)據(jù)少于發(fā)送的數(shù)據(jù) 如果通過MSComm控件一次性傳送較多的二進制數(shù)據(jù),那么,很可能收到的數(shù)據(jù)不足。例如在設置為2400bps傳輸率的情況下,一次性可以傳輸2048個字符數(shù)據(jù),那么在大多數(shù)情況下一次只能收到1200個字符左右,這是因為新版的MSComm32.OCX中存在一個 影響 傳輸二進制數(shù)據(jù)的Bug。 32位Windows API函數(shù)使用了幾個用COMMTIMEOUTS結構表示的限時變量,WriteTotalTimeOutConstant即是其中的一個,它被Windows內(nèi)部設定為5000(即5秒),這個常量決定了在通信驅動程序停止傳輸之前花費在

總結

以上是生活随笔為你收集整理的在 Wi ndows,MSComm控件在中文Wi的ndows下的通信问题与处理方法.doc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。