首页 > 在qt中如何设计心跳检测

在qt中如何设计心跳检测

我现在在编写一个数据转发系统,需要通过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就说明连接断了,但是现在遇到一个问题就是我是在另外一个线程里面调用发送消息的函数,无法启动一个计时器。

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

【热门文章】
【热门文章】