关于串口通讯的问题,高手们救救急,很奇怪的问题。
我的电脑下面连了两个自已开发的单片机,上面接有热敏电阻。它们的功能是,我从上位机发查询指令,他们取得温度后返回结果回来。
一块编号为001,一块编号为002,485串联起来的。
我上位机的程序用vb写的,控件用的mscomm。
问题如下,我用轮询不停的查询两个板子的温度,他们都能回结果来。
但是如果002不小心断电了。我查001正常的,再查002会没有响应,反过来再查001的时候,就也没有响应了。
我得把001和002都断电,才能正常的查.
也就是说如果查了不存在的板子,再查存在的板子也会没有响应了。
如果当出现这种情况的时候,我用网上下的调试工具,直接发指令到001,第一次命令也没有响应,再查一次001就正常了。我用我的软件也能查了。不需要给板子断电重开。说明板子设计上没有问题。
为什么我的软件查了不存在的板子再查存在的板子也没有响应。而且用网上下的调试工具再查存在的板子第一次命令也没有响应,要再查一次才正常。
问题出在哪里的?我的什么缓冲这些也清空了的,比如我的软件查001没反应的时候,关了软件再开也没有响应,而且怪在我用网上下的调试工具可以查,二且必须是第二个命令才有响应。或者继续用我的软件的话,得把001断电重开才有响应。
板子没有问题,如果有问题,调试工具也会查不了。
这样的问题会出在哪里呢?麻烦高手们帮帮忙啊
[解决办法]
1)建议改变上位机主动查询方式为被动局面接收数据方式,将单片机组成交替发回数据,以不同地址号区别,且在上位机的接收代码中以地址号来处理接收数据.
接收代码模块做成在单独窗体内,同时按一定时间间隔由其它主程序将接收代码模块窗体卸载,然后由其它主程序自动加载.
2)而且应该在下位机命令前后加标识符并固定命令字长,这样可在接收代码中对标识符和字长判断,符合要求进入数据处理.
3)对MSComm控件的属性RThreshold按命令字长设置,希望是同一字长,这可避免很多麻烦.