XIAOJIASONG 2019-01-30 15:20 采纳率: 0%
浏览 1612

QT中Modbus主机调用sendReadRequest()函数,不能读取返回的数据。

QT中Modbus主机调用sendReadRequest()函数,返回指针对象不为空,也没有错误,但是却不发送finished信号,这是什么原因。

bool a = connect(Reply, &QModbusReply::finished, this, &ModbusData:: ReadReady_RemoMea);

这句信号和槽函数关联语句也被执行,a返回值为true,但是槽函数ReadReady_RemoMea()却没有执行。这是什么原因?

拜托各位大神了,小弟必有重谢,奖励50元。

1.void ModbusData::Modbus_ReadDatas_RemoMea(int serverAddress)
{
if (!ModbusMaster)
return;

QModbusDataUnit readRequest_RemoMea(QModbusDataUnit::InputRegisters,1,100);

if ( auto *Reply = ModbusMaster->sendReadRequest( readRequest_RemoMea, serverAddress))
{

    quint16 error_RemoMea = Reply->error();
    qDebug() << "error_RemoMea" << error_RemoMea;

    if ( !Reply->isFinished() )
    {
        qDebug() << "1";
        bool a =  connect(Reply, &QModbusReply::finished, this, &ModbusData:: ReadReady_RemoMea);
        qDebug() << a;
        qDebug() << "2";
    }
    else
    {
        //delete Reply;
    }

    quint16 error_RemoMea1 = Reply->error();
    qDebug() << "error_RemoMea1" << error_RemoMea1;
}
else
{
    qDebug() << "request error";
}

}

槽函数:ReadReady_RemoMea()如下

void ModbusData::ReadReady_RemoMea()

{

    qDebug() << "完成";
QModbusReply *reply = qobject_cast<QModbusReply *>(sender());

if (!reply)
    return;

if (reply->error() == QModbusDevice::NoError)
{
    RemoMea_Modbus = reply->result().values();             //返回读取的数据
}
else
{
    qDebug() << "reply error";
}

reply->deleteLater();     //delete the reply

}

  • 写回答

1条回答 默认 最新

  • MiDEu 2022-04-19 09:32
    关注

    QT中Modbus主机调用sendReadRequest()函数,不能读取返回的数据。 楼主大大解决了没?

    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站