用MSCOMM 串口通信怎样避免通信错误时导致电脑死机?

fanchael 2010-02-26 01:54:21
我现在用MSCOMM 串口通信,电脑通信连接多块温度板卡,当温度板卡的数量比较多的时候,发觉用MSCOMM做通信,经常会导致电脑死机10秒针左右(鼠标可以移动,但是点击没有反应,同时键盘也失灵),然后又会恢复正常,请问高手这个问题的原因和解决方案。
...全文
276 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2010-03-01
  • 打赏
  • 举报
回复
楼主看看出现问题时CPU的利用率是多少,如果此时CPU的利用率很高(比如100%)那表明你的代码有问题或通信存在干扰。
楼主最好先用串口调试器调试一下通信。
lyguo 2010-03-01
  • 打赏
  • 举报
回复
不要在主程序中sleep或者其他等待函数
如果你的控制板是主动发送信息给PC,那么你可以用spcomm试试看,每个串口独立接收数据处理。

楼上正解。

要用多线程,
IDWB 2010-02-28
  • 打赏
  • 举报
回复
如果你是用多个串口,而每个串口连接一个控制板那么不必采用轮询方法,每个串口可以独立工作,如果一个串口连接多个控制板,而每个控制板都有一个不同的设备地址,那么你可以使用轮询方法。如果让程序不死可以让所有操作在线程中完成,也就是不要在主程序中sleep或者其他等待函数
如果你的控制板是主动发送信息给PC,那么你可以用spcomm试试看,每个串口独立接收数据处理。
fanchael 2010-02-27
  • 打赏
  • 举报
回复
正像高人IDWB所说的轮询等待结果,这个问题应该怎样在逻辑上去避免发生这样的错误呢? 迷茫中!
fanchael 2010-02-27
  • 打赏
  • 举报
回复
谢谢各位高人指点!
我设计是每个串口配置一个MSCOMM的。我是大概每2秒针一个周期对6个温度模块进行循环检测,接收信号方式我利用过OnComm来触发接收,也用过延迟等待200ms再去读取MSComm2.Input,但是两种方式都会出现:电脑死机10秒针左右(鼠标可以移动,但是点击没有反应,同时键盘也失灵),然后又会恢复正常的现象。
dd_zhouqian 2010-02-26
  • 打赏
  • 举报
回复
楼主是不是没用线程处理?
IDWB 2010-02-26
  • 打赏
  • 举报
回复
初看是因为你可能用了轮询等待结果,当其中一个或者几个设备没有返回信息,那么程序始终在waitfortimeout,应该是程序逻辑上有问题
「已注销」 2010-02-26
  • 打赏
  • 举报
回复
是一个MSCOMM控制多个串口,还是怎么做的啊?还是每个串口配置一个MSCOMM啊

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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