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);
求大神給點思路怎么解決。。。。。
uj5u.com熱心網友回復:
記憶體會慢慢增加,最后程式奔潰 Stack Overflow----好像邏輯不通!!!轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/236251.html
標籤:Qt
