伊利安慕希保质期:关于MSComm的问题

来源:百度文库 编辑:高校问答 时间:2024/05/08 18:56:39
请问要如何用MSComm控件发送和接收大于128的字符?
我发送给串行接口一个命令,它本来应该回给我这样的字符"0,17,0,16,0,15,0,14,0,13,0,12,0,3,89,0"(是十六进制的),但是它却回的是"0,17,0,16,0,15,0,14,0,13,0,12,0,3,0,0",89变成了0,因为十六进制的89是137.
可以把程序写给我吗?谢谢了

如何发送大于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 . . . . .

我也碰到了这个问题.....用WAVECOM的MODEM发送大于128字的短信就出错..后来查了问题..和楼主的一样,然后不得已只能写分段发送了......

搭个车方便日后查看答案.谢谢

从编程角度来看这个问题,如果客户端和服务器端都是自己写的话问题是可以解决的,从你的问题看出是客户端回复出的错,应该修改客户的部分那,如果是调试设备,只能修改自己写的那端了,不了解你写的程序和设备之见的通讯协议啊,如果仅仅通过修改接受数据的模式又或者改变通讯比特率是否能解决问题呢,有待您的实验。