使用CSerialPort串口编程,如何判断没有收到字符?

brk1985 2012-06-01 11:19:22

有字符收到触发OnCommunication函数,如果没有收到字符,OnCommunication函数收不到字符信息,怎么判断?

希望实现这样的功能:如果在规定的时间范围(比如5分钟)内,没有收到字符,就假定串口断开、重新发送串口连接命令。

PS:貌似串口有设置超时,一点没起到作用。。。
...全文
270 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2012-07-11
  • 打赏
  • 举报
回复
设置一个类似看门狗的东西。
它不停的计时,到指定的时候,就认为串口断开。
而当接受到任何一个数据的时候,就把它的计数器置0,这就是通常所说的喂狗。
FrankieWang008 2012-07-11
  • 打赏
  • 举报
回复
自己手写一个Ontimer事件处理函数,来处理超时处理吧
brk1985 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
可以这么用:
当发送数据后,用
DWORD dwEnd = ::GetTickCount() ;
得到当前时间,ms级

然后实时判断是否超时即可。
1、用For/While判断
2、在OnTimer()里比较发送时时间
[/Quote]

还以为没人回复了!!!
我后来使用定时器完成了该功能,用定时器设置间隔时间、比如5s,设置一个接收标志位,如果定时器执行的时候仍为“未收到”状态,则判断串口未连接(无收到字符)。

和你所讲的还是有所区别。。。你的思路还是让人觉得有点模糊。。。
fronz 2012-07-07
  • 打赏
  • 举报
回复
不知道你说的串口类的组成,一般来说是没有超时事件触发的,自己设置读超时和读间隔超时事件,改大到5分钟。
elautoctrl 2012-07-05
  • 打赏
  • 举报
回复
用状态机+定时器应该可以解决吧
我就是这么做的
tomyi 2012-07-05
  • 打赏
  • 举报
回复
可以这么用:
当发送数据后,用
DWORD dwEnd = ::GetTickCount() ;
得到当前时间,ms级

然后实时判断是否超时即可。
1、用For/While判断
2、在OnTimer()里比较发送时时间
一条晚起的虫 2012-06-26
  • 打赏
  • 举报
回复
PS:貌似串口有设置超时,一点没起到作用。。。
// 串口超时设置肯定有作用的。
// CSerialPort是用Comm Event出发的,看看Comm Event注册了哪几个?超时的标志注册了没?
brk1985 2012-06-01
  • 打赏
  • 举报
回复
期待高手的出现啊。。。
brk1985 2012-06-01
  • 打赏
  • 举报
回复
继续求助中。。。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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