|
|
@ -110,7 +110,7 @@ QBitArray modBusMaster::getCoil(int startAddress, quint16 readSize) |
|
|
|
QModbusDataUnit unit = readRequest(QModbusDataUnit::RegisterType::Coils, startAddress, readSize); |
|
|
|
mutex.lock(); |
|
|
|
if(!freeThread) |
|
|
|
modBusAnswerNotReady.wait(&mutex); |
|
|
|
modBusAnswerNotReady.wait(&mutex); |
|
|
|
mutex.unlock(); |
|
|
|
|
|
|
|
|
|
|
@ -186,30 +186,35 @@ QModbusDataUnit modBusMaster::readRequest(QModbusDataUnit::RegisterType registe |
|
|
|
if (auto *reply =modbusDevice->sendReadRequest(QModbusDataUnit(table, startAddress, readSize), _slaveAddress)) |
|
|
|
{ |
|
|
|
QFuture<void> future = QtConcurrent::run([this, reply]() { |
|
|
|
// while(!reply->isFinished())
|
|
|
|
// {
|
|
|
|
// qDebug() << "reply->isFinished() " << reply->isFinished();
|
|
|
|
// qDebug() << "Hello from thread " << QThread::currentThread();
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// qDebug() << "reply->isFinished() " << reply->isFinished();
|
|
|
|
while(!reply->isFinished()) |
|
|
|
{ |
|
|
|
qDebug() << "reply->isFinished() " << reply->isFinished(); |
|
|
|
qDebug() << "Hello from thread " << QThread::currentThread(); |
|
|
|
} |
|
|
|
freeThread=true; |
|
|
|
mutex.lock(); |
|
|
|
if (freeThread) |
|
|
|
modBusAnswerNotReady.wakeAll(); |
|
|
|
mutex.unlock(); |
|
|
|
|
|
|
|
if(!checkForError(reply)) |
|
|
|
if (!freeThread) |
|
|
|
{ |
|
|
|
const QModbusDataUnit unit = reply->result(); |
|
|
|
return unit; |
|
|
|
if (!reply->isFinished()) |
|
|
|
{ |
|
|
|
qDebug() << "1reply->isFinished() " << reply->isFinished(); |
|
|
|
connect(reply, &QModbusReply::finished, this, &modBusMaster::modbusReplyRecieved, Qt::ConnectionType::BlockingQueuedConnection); |
|
|
|
qDebug() << "2reply->isFinished() " << reply->isFinished(); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// freeThread=true;
|
|
|
|
mutex.lock(); |
|
|
|
if (freeThread) |
|
|
|
modBusAnswerNotReady.wakeAll(); |
|
|
|
mutex.unlock(); |
|
|
|
|
|
|
|
if(!checkForError(reply)) |
|
|
|
{ |
|
|
|
const QModbusDataUnit unit = reply->result(); |
|
|
|
return unit; |
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
else |
|
|
@ -218,7 +223,7 @@ QModbusDataUnit modBusMaster::readRequest(QModbusDataUnit::RegisterType registe |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//reply->deleteLater();
|
|
|
|
reply->deleteLater(); |
|
|
|
} |
|
|
|
bool modBusMaster::checkForError(QModbusReply *_reply) |
|
|
|
{ |
|
|
@ -239,6 +244,20 @@ bool modBusMaster::checkForError(QModbusReply *_reply) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
void modBusMaster::modbusReplyRecieved() |
|
|
|
{ |
|
|
|
|
|
|
|
// auto reply = qobject_cast<QModbusReply *>(sender());
|
|
|
|
// if (!reply)
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// modbusReplyFromClient = reply;
|
|
|
|
freeThread=true; |
|
|
|
|
|
|
|
// reply->deleteLater();
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
void modBusMaster::writeRequest(QModbusDataUnit::RegisterType registerType, int startAddress, quint16 writeSize) |
|
|
|
{ |
|
|
|
qDebug() << " ---- setSingleCoil coilFlag writeRequest "; |
|
|
|