|
1Qter豆
主机发送“0x55 0xaa”,设备返回"0x01"后确认连接。
“紧接着”主机发送“0x55 0x10”,请求设备返回0x10 (16)个参数。
目前的状况是,主机发送"0x55 0xaa"并正确接收了设备返回的"0x01",接收是在readyRead()触发的槽slot_readyRead()中处理的。问题来了,在slot_readyRead()中判断正确接收0x01之后顺便把"0x55 0x10"发送给设备了,结果是主机没有收到设备返回的16个参数。(通过另外一个串口监控通信过程发现:设备收到了0x55 0x10,并且正确返回了16个参数)。
以上的通信过程基本没有什么时间间隔,如下:
时间轴:---------------------------------------------------------------------------------------
主机发送:0x55 0xaa--------0x55 0x10--------------------------------------------------
设备返回:--------------0x01---------------0x00 0x01 0x02 ......0x0e 0x0f----------
伪代码如下:
slot_pushButton()
{
flagRead = 0x01;
MyCom->write(0x55, 0xaa);
}
slot_readyRead()
{
QByteArray byte;
byte = MyCom->readAll();
/* 确认连接部分 */
if(flagRead == 0x01)
{
if(byte == 0x01)
{
flagRead = 0x02;
MyCom->write(0x55, 0x10);
}
}
/* 参数读取部分 */
if(flagRead == 0x02)
{
将读取到的数据输出到textEdit
}
}
目前是参数返回后,主机错过了接收,我的想法是:在slot_readRead()中发送"读取参数"指令是不合适的,但是不知道该怎么处理,请大家帮忙出出主意,谢谢!
|
最佳答案
查看完整内容
你吧读到的数据放到一个专门的函数去处理?用一个变量装起来试试
|