Home > Mobile >  Qt register read and write PLC program Stack Overflow problem in a row, a great god give some ideas
Qt register read and write PLC program Stack Overflow problem in a row, a great god give some ideas

Time:12-18

Void CModbusTcpClientWorker: : onWriteHoldingRegisters (int iStartAddr, quint16 uValue, int iServerId)
{
QModbusDataUnit writeUnit (QModbusDataUnit: : HoldingRegisters iStartAddr, 1);
WriteUnit. SetValue (0, uValue);

Bool bWriteResult=false;
The QEventLoop loop;
QModbusReply * pReply=m_pModbusDevice - & gt; SendWriteRequest (writeUnit iServerId);

If (NULL!=pReply)
{
QMetaObject: : Connection con=connect (pReply, & amp; QModbusReply: : finished, this, [& amp;] {
If (pReply - & gt; Error ()==QModbusDevice: : NoError)
{
BWriteResult=true;
}
Else if (pReply - & gt; Error ()==QModbusDevice: : ProtocolError)
{
//a QString strErrorMsg=QString (" Write HoldingRegisters response error: % 1 (Modbus exception: 0 x % 2) ").
//arg (pReply - & gt; ErrorString ()).
//arg (pReply - & gt; RawResult (.) exceptionCode (), 1, 16);
//m_Savelog writeLog (m_Savelog path, strErrorMsg);
}
The else
{
//a QString strErrorMsg=QString (" Write HoldingRegisters response error: % 1 (code: 0 x % 2) ").
//arg (pReply - & gt; ErrorString ()).
//arg (pReply - & gt; Error (), 1, 16);
}
Loop. The quit ();

}

);

The connect (pReply, & amp; QModbusReply: : finished, pReply, & amp; QModbusReply: : deleteLater);
QTimer timer;
The timer. SetSingleShot (true);
The connect (& amp; The timer, SIGNAL (timeout ()), & amp; Loop, SLOT (the quit ()));
The timer. Start (RW_TIMEOUT_MS);

Loop. The exec ();

QObject: : disconnect (con);
//pReply - & gt; DeleteLater ();
}

Emit writeHoldingRegistersResult (bWriteResult iStartAddr, uValue);
}


This function is to write values in registers, I continuously to write value, the memory will gradually increase, the last program crash 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);

great god give some ideas how to solve,,,,,,,

CodePudding user response:

Memory will gradually increase, the last program crash Stack Overflow -- seems illogical!!!!!!
  •  Tags:  
  • Qt
  • Related