Qt利用QTime实现sleep效果分时调用串口下发报文解决串口下发给下位机后产生的粘包问题
现象
当有多包数据需要连续下发给下位机时,比如下载数据等,下发后下位机发现数据包粘在一起了,如果没有设计包尾且包长度不固定,那么就会出现粘包问题,即一包数据实际包含了一部分下一包的数据。
解决方法
1:增加包头包尾,下位机一个字节一个字节去读,然后根据包头和包尾去组成完整的一包,否则不做处理;
2:上位机发包间隔增加一定的延时,下位机在一段时间内读取到的所有数据当成完整的一包;
当使用时间作为判断时上位机需要间隔时间发送,这个间隔发送可以使用QTime模拟sleep后串口发送写入:
QTime t;
t.start();
while(t.elapsed()<500)
QCoreApplication::processEvents();
serialPort->write(xxx);