J'ai un seul thread QQuick application avec une fenêtre principale et une classe qui gère Modbus Lecture/Écriture de fonctions. Tout fonctionne bien jusqu'à présent, mais quand je mets un BusyIndicator dans mon qml fenêtre pour montrer que le Bus est occupé-je obtenir CRC les inadéquations et les délais de réponse, par exemple:
- "Rejet de l'intervention avec le mauvais CRC, reçues: 64580 , le CRC calculé: 55067"
- "Lire la réponse d'erreur: délai de Réponse. (code: 0 x 5)" - qt.modbus: (RTU client) Ne peut pas correspondre à la réponse avec demande d'ouverture, en ignorant
Le ReadRequest est envoyé via
void ModbusDevice::readData(int serveraddress, int startaddress, int cnt) {
QModbusDataUnit RxData;
if(startaddress>=HOLDING_BASE) RxData.setRegisterType(QModbusDataUnit::HoldingRegisters);
else RxData.setRegisterType(QModbusDataUnit::InputRegisters);
RxData.setStartAddress(startaddress);
RxData.setValueCount(cnt);
if (auto *reply = m_ModbusClient->sendReadRequest(RxData, serveraddress)) {
connect(reply, &QModbusReply::finished, this, &CellDevice::InterruptHandler);
else qDebug() << m_ModbusClient->errorString();
}
Si il n'y a pas d'animation en cours d'exécution dans ma fenêtre, de la réception des données sans erreurs.
- Cela peut-il être résolu en utilisant un thread séparé pour exécuter le modbus lecture/écriture des méthodes et comment puis-je la mettre? Ou aurais-je seulement d'augmenter les interprète mal par la mise en Série des fonctions dans un Thread séparé?
Comme je l'ai entendu jusqu'à présent, en raison du fait que ma demande est donc la mesure d'exécution dans un seul thread, la mise à jour en continu de l'interface graphique est en quelque sorte interférer avec la réception de Données en Série.
J'ai utilisé la ligne de commande linux outil de "stress" pour voir si je perdre des données en vertu de la charge élevée de l'uc, mais ce n'est pas le cas.
Cordialement