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

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

MSComm控件在中文Windows下的通信问题与处理方法

摘 要VB 5.0/6.0的MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,但在实际通信软件设计过程中,MSComm控件并非像想像中那样完美和容易控制,特别是在中文Windows下通信时更会出现 问题 。本文就MSComm控件在实际 应用 中可能出现的问题以及编程技巧进行探讨。关键词 MsComm控件 串口通信 处理1.MSComm控件的基础 理论 一般说来, 计算 机都有一个或多个串行端口,它们依次为Com1、Com2、...。这些串口还提供了外部设备与PC进行数据传输和通信的通道,这些串口在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU。再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据。当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。作为一个VB程序员,要编写通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换句话说,只需设定和监视通信控件的属性和事件即可。2.利用MSComm控件进行数据的接收和发送搞清楚以上基本属性和事件后就可以开始编写通信程序了:在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位数据位,1位停止位 MSComm1.PortOpen = True #39;打开串口 End If MSComm1.OutBufferCount = 0 #39;清空发送缓冲区 MSComm1.InBufferCount = 0 #39;清空接收缓冲区 #39;发送字符数据,注意必须用回车符(vbCr)结束 MSComm1.Output=“This is a good book!” & vbCr #39;拨打电话号码或发送AT命令 MSComm1.Output=“ATDT 0294563622” & vbCr #39;发送字符数组数据,注意ByteArray必须事先定义赋值 Dim ByteArray as byte() #39;定义动态数组 ReDim ByteArray(1) #39;重定义数组大小 ByteArray(0)=0 ByteArray(1)=1 MSComm1.Output = ByteArray #39;发送字符数组数据 End Sub Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive #39;接收字符数据 Dim Buffer As Variant MSComm1.InputLen = 0 #39;当InputMode 属性值为0(文本模式)时,变量中含String型数据。#39;当InputMode属性值为1(二进制模式)时,变量中含Byte型数组数据。 MSComm1.InputMode=comInputModeBinary Buffer=MSComm1.Input #39;接收二进制数据 MSComm1.InputMode=comInputModeText Buffer = MSComm1.Input Case else End Select End Sub 3.中文Windows下的通信问题与解决 方法 3.1 接收的数据少于发送的数据 如果通过MSComm控件一次性传送较多的二进制数据,那么,很可能收到的数据不足。例如在设置为2400bps传输率的情况下,一次性可以传输2048个字符数据,那么在大多数情况下一次只能收到1200个字符左右,这是因为新版的MSComm32.OCX中存在一个 影响 传输二进制数据的Bug。 32位Windows API函数使用了几个用COMMTIMEOUTS结构表示的限时变量,WriteTotalTimeOutConstant即是其中的一个,它被Windows内部设定为5000(即5秒),这个常量决定了在通信驱动程序停止传输之前花费在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值