用57600的波特率出现的问题?谁能帮手?

applewheal 2003-12-02 10:29:38
我在用VB做一个串口接收程序,用串口调试器可以完全正确的接收到串口的数据,但是我做的就不行.我用的串口设置是"57600,E,8,1",即波特率为57600BPS,偶校验.我用MSCOMM_ONCOMM这个事件接收信息的,收到的一部分字符被校验错代替字符"?"所代替了.我用二进制的方式接收的内容也完全一样,一部分是"?"的ASCII编码.这个程序的串口如果用"9600,N,8,1"的串口设置就一点问题都没有.请问有谁可以告诉我这是为什么,怎样解决吗?


...全文
442 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
applewheal 2003-12-06
  • 打赏
  • 举报
回复
hehe...........不好意思,原来是终端设备的开发人员给错了校验的方式,是用"S",而不是"E".还是要多谢大家落力帮我手.给分了!
applewheal 2003-12-05
  • 打赏
  • 举报
回复
of123(),可以详细的告诉我用代码怎样实现吗?谢谢!
of123 2003-12-04
  • 打赏
  • 举报
回复
你的程序有问题。
1 设置成二进制接收方式
2 用一个Variant类型读回一个字节,再转存到Byte类型的数组中。如果是文字,用Chr()函数转换一下;否则,用Hex()函数转成十六进制字符串(注意不足10h的补0)。
AresChen 2003-12-04
  • 打赏
  • 举报
回复
我怎么想也觉得问题是属于你的粗心导致的,如果别人的程序可以,但你的程序死活不行,你最好在仔细检查一下属性的设置,尤其是MsComm控件的几个在运行时一般不设置的属性,比如什么接收缓冲啊什么的,我记不住名字了。
建议你,1、把代码中没用的属性设置去调;2、把窗体上的MsComm控件删掉,重新放一个上来;3、再次根据MSDN中的参考,仔细检查自己的代码,仔细想想,看看是不是有什么东西你想的过于复杂了。
AresChen 2003-12-04
  • 打赏
  • 举报
回复
你用别人写的程序可以接收到你需要通信的设备的信息吗?不是让别人写的程序之间进行通信,而是和你目标设备之间进行通信。
applewheal 2003-12-04
  • 打赏
  • 举报
回复
我试过各种波特率和变换校验位,什么都收不到.只有在57600波特率,使用偶校验的时候才可以收到信息.使用超级终端和别人写的串口调试程序都可以正确的收到信息,但是我的程序还是不能完全正确的收到信息.我好苦恼哦.
AresChen 2003-12-03
  • 打赏
  • 举报
回复
仔细检查双方在串口上的设置,如果你说已经检查过了,那就再检查一遍,当然,包括和你通信的那个设备的设置。你也可以设置成其他通信模式试试。
"57600,E,8,1",这是你的端口配置信息吗?
applewheal 2003-12-02
  • 打赏
  • 举报
回复
你好,通信距离不足一米.只是从电脑主机到桌面上的一个外接串口设备之间.用CSDN上下载的人家写好的串口调试器就接收完全正确,所有的设备完全不变,只是换成我的接收程序的话,串口设置也完全一样,每一条收到的信息里就会有一部分是校验错代替字符"?".如果是我的串口或连接线有问题的话,为什么别人的程序接收又完全无误呢?
海牛 2003-12-02
  • 打赏
  • 举报
回复
波特率为:57600,只适合非常段的距离通信。
海牛 2003-12-02
  • 打赏
  • 举报
回复
是不是通信距离太长了啊!如果通信距离太长,就不能用太高的波特率。如果通信距离较远,那就要使用相当低的波特率了!
AresChen 2003-12-02
  • 打赏
  • 举报
回复
试试是不是你的串口或者对方的串口芯片有毛病,你可以逐步的提高比特率,看看道多少开始发生这种情况。
另外就是,可以重新换一根连接线,早些年我些串口程序的时候,在高比特率的情况下也发生过类似的情况,后来发现是属于信号的干扰造成的。
另外就是,你可以观察一下接收道的数据,是没有一点正确的数,还是掺杂着部分乱码。如果有部分正确的数据的话,那很有可能是两方的串口芯片中有一方或两方都有毛病;如果一点都没有的话,你可以先检查一下,双方的比特率、校验位等设置的是否完全一致。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧