在qt中如何设计心跳检测

发布于 2022-09-02 20:59:50 字数 831 浏览 27 评论 0

我现在在编写一个数据转发系统,需要通过Modbus/TCP协议连接RTU来采集数据并且转发,现在遇到的一个问题就是我无法知道我与RTU到底连接上了没有,当我调用connecttoHost函数之后调用isOpen函数总是返回true,即使我没打开Modbus仿真软件。如果连接过程中连接中断了,也不知道是什么时间中断的,所以我就想设计一个心跳检测,每隔一段时间检测一下有没有断。现在有这样几个问题:

  1. Modbus协议不会主动向服务器发送心跳指令,必须由服务器端先向RTU发送符合Modbus协议格式的指令,RTU才会返回指令。

  2. Qt的信号与槽机制让我不能把心跳检测写在一个函数里面,假设我在HeartBeat函数里面对RTU发送了指令,我不能直接在HeartBeat函数里面读取返回的信息,必须再写一个ReadModbus槽函数与socket的readyRead信号绑定在ReadModbus函数中接收心跳返回信息。

  3. 我需要通过心跳检测来将一个bool类型赋值。

我尝试过不用心跳检测,把是否连接的检测放在正常数据通信中,即发送指令的同时startTimer,然后如果在期望时间内接收到了信息,就killTimer,如果进入timerEvent就说明连接断了,但是现在遇到一个问题就是我是在另外一个线程里面调用发送消息的函数,无法启动一个计时器。

我现在没想到什么解决办法了,有没有大神做过这种设计的?请大神解惑。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文