关于串口通讯的问题,高手们救救急,很奇怪的问题。跪求帮助 点击:1872 | 回复:11



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2007-01-08 13:46:00
楼主

我的电脑下面连了两个自已开发的单片机,上面接有热敏电阻。它们的功能是,我从上位机发查询指令,他们取得温度后返回结果回来。

一块编号为001,一块编号为002,485串联起来的。

我上位机的程序用vb写的,控件用的mscomm。

问题如下,我用轮询不停的查询两个板子的温度,他们都能回结果来。

但是如果002不小心断电了。我查001正常的,再查002会没有响应,反过来再查001的时候,就也没有响应了。

我得把001和002都断电,才能正常的查.

也就是说如果查了不存在的板子,再查存在的板子也会没有响应了。

如果当出现这种情况的时候,我用网上下的调试工具,直接发指令到001,第一次命令也没有响应,再查一次001就正常了。我用我的软件也能查了。不需要给板子断电重开。说明板子设计上没有问题。

为什么我的软件查了不存在的板子再查存在的板子也没有响应。而且用网上下的调试工具再查存在的板子第一次命令也没有响应,要再查一次才正常。

问题出在哪里的?我的什么缓冲这些也清空了的,比如我的软件查001没反应的时候,关了软件再开也没有响应,而且怪在我用网上下的调试工具可以查,二且必须是第二个命令才有响应。或者继续用我的软件的话,得把001断电重开才有响应。

板子没有问题,如果有问题,调试工具也会查不了。


这样的问题会出在哪里呢?麻烦高手们帮帮忙啊




Marine97

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 9回
  • 年度积分:0
  • 历史总积分:79
  • 注册:2004年3月04日
发表于:2007-02-25 16:35:00
1楼
你应该是使用了MSCOMM通讯控件开发的软件吧,如果自己用API或者其他底层封装类就不会出现这样的情况的,我以前也遇到过,应该是Active控件的某个资源没有被正确释放掉,所以就不能继续通讯了,这个时候你可以检测你的机器COM口,没有正确的字符输出的!情况乐观一点的话,你在程序中把串口关了再打开试试!

恨水

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 43回
  • 年度积分:0
  • 历史总积分:50
  • 注册:2007年2月07日
发表于:2007-03-19 19:11:00
2楼
http://www.kitsnet.cn/blog/post/138.html


用这个软件测试下

云飘渺

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 46回
  • 年度积分:0
  • 历史总积分:338
  • 注册:2003年10月17日
发表于:2007-03-20 09:13:00
3楼
我想会不会是485转232的问题所致?你是用的485转232以后接到电脑上的吧?

万信

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2007年4月01日
发表于:2007-04-13 21:24:00
4楼

万信

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2007年4月01日
发表于:2007-04-13 21:25:00
5楼
成都博控科技有限公司

万信

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2007年4月01日
发表于:2007-04-13 21:26:00
6楼
http:www.cdbocon.com

黑色的眼睛

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 393回
  • 年度积分:0
  • 历史总积分:505
  • 注册:2007年2月26日
发表于:2007-04-27 16:40:00
7楼
用MSCOMM通讯控件很容易出现一些问题,除非你对这个控件非常的精通,因为控件底层的一些东西很难搞的清楚,一般情况下只是为了用的方便而已。最好用底层封装类(比如很好使的“Open”)来编写通讯程序,就不会出现类似的问题

gougunsk

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 113回
  • 年度积分:0
  • 历史总积分:273
  • 注册:2007年2月24日
发表于:2007-05-06 16:40:00
8楼
问题解决了吗?


如果没有解决,问题出现在你的VB的程序上,你用的COMM控件没有处理好,你用的485通信,在给没有电的终端发查询命令时,应是接到了了刚发出的信息,(不知你用的何种通信电路或设备,也可能接收到数据已不是你刚发出的数据了).所以,在接收的部分已存在着某种状态.


可以如下试一次:

1.
每次查询一台新设备时,都读空接收缓冲区

如果不行则试验下:
2.将接收出错时引起的接收事件都作处理,且处理的结果都一样,清接收缓冲并读空接收缓冲共

如果不行:

3.修改引起接收事件的hold字节数,确定接收缓冲区内仅有一个字节时是不是能产生接收事件,如果不能,应将hold的数设为1,也就是说只要接收缓冲区内有一个字节就会引起接收事件,

不用在意,这对接收没有影响,当你用9600的速率连续接收几十个字节的数据时他不会产生几十次接收事件,除非你是不连续的发送的.COMM控制产生接收事件的频率大约是每秒一次,所以不会对你的程序造成什么效率上影响.

如果这些都还不能解决,请回www.gougunsk.com上查个信箱,发个信给李照书,我可以再给你想点别的方法.不过,我认为这样应能解决了.

我最近也不用COMM控件写通讯了,只因闲他反应太慢,但以前写的程序还是很稳定的.

水边清浅横枝瘦

  • 精华:0帖
  • 求助:4帖
  • 帖子:78帖 | 3488回
  • 年度积分:8
  • 历史总积分:5664
  • 注册:2006年7月11日
发表于:2007-05-08 08:18:00
9楼
学习

心烦意乱

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 10回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2004年8月25日
发表于:2007-07-24 23:17:00
10楼
好,学习

Madara

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2007年10月31日
发表于:2007-10-31 16:55:00
11楼
串口通讯最好不用控件,建议按文件方式打开COM口,这样操作起来方便。

热门招聘
相关主题

官方公众号

智造工程师