void CModbusTcpClientWorker::onWriteHoldingRegisters(int iStartAddr, quint16 uValue, int iServerId)
{
QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, iStartAddr, 1);
writeUnit.setValue(0, uValue);
bool bWriteResult = false;
QEventLoop loop;
QModbusReply* pReply = m_pModbusDevice->sendWriteRequest(writeUnit, iServerId);
if(NULL != pReply)
{
QMetaObject::Connection con = connect(pReply, &QModbusReply::finished, this, [&] {
if (pReply->error() == QModbusDevice::NoError)
{
bWriteResult = true;
}
else if (pReply->error() == QModbusDevice::ProtocolError)
{
//QString strErrorMsg = QString("Write HoldingRegisters response error: %1 (Modbus exception: 0x%2)").
// arg(pReply->errorString()).
// arg(pReply->rawResult().exceptionCode(), -1, 16);
//m_Savelog.writeLog(m_Savelog.path, strErrorMsg);
}
else
{
//QString strErrorMsg = QString("Write HoldingRegisters response error: %1 (code: 0x%2)").
// arg(pReply->errorString()).
// arg(pReply->error(), -1, 16);
}
loop.quit();
}
);
connect(pReply, &QModbusReply::finished, pReply, &QModbusReply::deleteLater);
QTimer timer;
timer.setSingleShot(true);
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
timer.start(RW_TIMEOUT_MS);
loop.exec();
QObject::disconnect(con);
//pReply->deleteLater();
}
emit writeHoldingRegistersResult(bWriteResult, iStartAddr, uValue);
}
此函数是写数值进去寄存器,我连续不断的往里面写值时,内存会慢慢增加,最后程序奔溃 Stack Overflow
emit writeCoils(M5031, 1);
Sleep(10);
emit writeHoldingRegisters(D5010, strDataResult.toInt());
Sleep(10);
emit writeHoldingRegisters(D5014, strDataX.toDouble() * 1000);
Sleep(10);
emit writeHoldingRegisters(D5015, strDataY.toDouble() * 1000);
求大神给点思路怎么解决。。。。。