mscomm控件在中文windows下的通信问题

mscomm控件在中文windows下的通信问题

ID:25904439

大小:63.50 KB

页数:7页

时间:2018-11-23

mscomm控件在中文windows下的通信问题_第1页
mscomm控件在中文windows下的通信问题_第2页
mscomm控件在中文windows下的通信问题_第3页
mscomm控件在中文windows下的通信问题_第4页
mscomm控件在中文windows下的通信问题_第5页
资源描述:

《mscomm控件在中文windows下的通信问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、MSComm控件在中文Windows下的通信问题摘要VB5.0/6.0的MSm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,但在实际通信软件设计过程中,MSm控件并非像想像中那样完美和容易控制,特别是在中文sm控件串口通信处理1.MSm控件的基础理论一般说来,计算机都有一个或多个串行端口,它们依次为1、2、...。这些串口还提供了外部设备与PC进行数据传输和通信的通道,这些串口在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接

2、收数据时,比特流数据被转换为字符数据传递给CPU。再进一步说,在操作系统方面,icrosoftmcontrol5.0组件,在窗体Form1中加入mand命令按钮并取名为cmdTest,MSm控件取名为MSm1,写入以下代码:PrivateSubcmdTest_Click()MSm1.mPort=1'设定1口IfMSm1.PortOpen=FalseThenMSm1.Settings="9600,N,8,1"'9600波特率,无校验,8位数据位,1位停止位MSm1.PortOpen=True'打开串口

3、EndIfMSm1.OutBufferCount=0'清空发送缓冲区MSm1.InBufferCount=0'清空接收缓冲区'发送字符数据,注意必须用回车符(vbCr)结束MSm1.Output="Thisisagoodbook!"vbCr'拨打号码或发送AT命令MSm1.Output="ATDT0294563622"vbCr'发送字符数组数据,注意ByteArray必须事先定义赋值DimByteArrayasbyte()'定义动态数组ReDimByteArray(1)'重定义数组大小ByteArr

4、ay(0)=0ByteArray(1)=1MSm1.Output=ByteArray'发送字符数组数据EndSubPrivateSubMSm1_Onm()SelectCaseMSm1.mEventCaseEvReceive'接收字符数据DimBufferAsVariantMSm1.InputLen=0'当InputMode属性值为0(文本模式)时,变量中含String型数据。'当InputMode属性值为1(二进制模式)时,变量中含Byte型数组数据。MSm1.InputMode=InputMode

5、BinaryBuffer=MSm1.Input'接收二进制数据MSm1.InputMode=InputModeTextBuffer=MSm1.InputCaseelseEndSelectEndSub3.中文Sm32.OCX中存在一个影响传输二进制数据的Bug。32位ultiplierAsLongReadTotalTimeoutConstantAsLongultiplierAsLongTIMEOUTS)AsLongDeclareFunctionGetmTimeoutsLib"Kernel32"(ByV

6、alhFileAsLong,_lpmTimeoutsAsMTIMEOUTS)AsLongDimtimeoutsAsMTIMEOUTSDimRetAsLongIfm1.PortOpen=FalseThenm1.PortOpen=TrueEndIf'打开串口后重新设定串口句柄Ret=GetmTimeouts(m1.mID,timeouts)'Setsomedefaulttimeoutstimeouts.ReadIntervalTimeout=1timeouts.ReadTotalTimeoutMulti

7、plier=1timeouts.ReadTotalTimeoutConstant=1timeouts.ultiplier=1timeouts.Sm1.Output=chr(i)Nexti希望在接收端得到预期的0-255之间的数据,结果却是:前129个数据接收正确,为0-128,后面127个数据为126个0和一个255。造成这种结果的原因在于中文yData(255)AsByteFori=0To255MyData(i)=iNextiMSm1.Output=MyDataDoDoEventsLoopUnti

8、lMSm1.OutBufferCount=0'接收过程PrivateSubMSm1_Onm()SelectCaseMSm1.mEventCaseEvReceiveDimBufferAsVariantMSm1.InputMode=InputModeBinaryMSm1.InputLen=0Buffer=MSm1.InputFori=LBound(Buffer)ToUBound(Buffer)Text1.Text=Buffer(i);NextiCaseElseEndSel

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。