免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9592 | 回复: 7
打印 上一主题 下一主题

[系统] Linux下串口连接状态的检测 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-01 15:07 |只看该作者 |倒序浏览
请问各位,Linux程序中能否检测串口的连接状态?当串口线断开时,Linux下的读写函数的返回值会是什么???

【问题描述】
我写了一个串口通信程序,为了测试其稳健性,在通信的过程中,有意断开串口线,希望程序能发现该问题。
串口的读写使用非阻塞式,在串口线路连接时通信正常。

不知说清楚没,请各位指点!

论坛徽章:
0
2 [报告]
发表于 2012-08-02 00:56 |只看该作者
不懂这块,纯帮顶了 ~

论坛徽章:
0
3 [报告]
发表于 2012-08-02 09:31 |只看该作者
xiyoulaoyuanjia 发表于 2012-08-02 00:56
不懂这块,纯帮顶了 ~


谢谢,感觉这个问题是不是问错了?或者问错地方了? 版主大人,你有什么建议呢?

论坛徽章:
0
4 [报告]
发表于 2012-08-02 10:28 |只看该作者
应该到 嵌入式? 你看看 cu 里面有没有这个版面~  
回复 3# adam_w


   

论坛徽章:
0
5 [报告]
发表于 2012-08-02 19:38 |只看该作者
xiyoulaoyuanjia 发表于 2012-08-02 10:28
应该到 嵌入式? 你看看 cu 里面有没有这个版面~  
回复 3# adam_w


谢了!

论坛徽章:
0
6 [报告]
发表于 2012-08-03 20:26 |只看该作者
本帖最后由 adam_w2 于 2012-08-03 20:27 编辑

临时注册了来回答这个问题:据我所知,RS232 / 485 串口没有连接状态检测机制。

这好比 udp 协议,你必须自行检测是否线路已经断开。

我没有试过,但理论上讲,串口的线路断开后,如果是阻塞式访问,由于读不到数据会阻塞在那里;如果是非阻塞式访问,会什么也读不到直接返回。

你必须每隔一段时间发送特定的心跳信号,如果收不到心跳信号就表示线路已经断开了。

论坛徽章:
0
7 [报告]
发表于 2012-08-07 16:35 |只看该作者
回复 6# adam_w2
非常感谢!!
我现在的做法是,采用非阻塞读写,同时加上超时,在规定时间内不能完成指定的读写,则表示状态ERROR。
再次感谢!

   

论坛徽章:
0
8 [报告]
发表于 2012-08-08 17:10 |只看该作者
回复 7# adam_w

6楼提到了问题的关键,RS232没有检测连接状态的功能,
通过自己对通信数据的检测来判断当前状态,比如5秒内没有数据通信,认为串口异常即可


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP