मैं एक एकल धागा QQuick आवेदन के साथ एक मुख्य विंडो और एक वर्ग को संभालती है कि Modbus पढ़ें/लिखें कार्य करता है । सब कुछ ठीक काम कर रहा है अब तक लेकिन जब मैं डाल एक BusyIndicator में qml विंडो दिखाने के लिए है कि बस है, मैं व्यस्त हो सीआरसी बेमेल और प्रतिक्रिया समय समाप्ति, जैसे:
- "Discarding प्रतिक्रिया के साथ गलत CRC, प्राप्त किया: 64580 , गणना की सीआरसी: 55067"
- "पढ़ें प्रतिक्रिया त्रुटि: प्रतिक्रिया के लिए जारी रहेगा । (कोड: 0x5)" - क्यूटी.modbus: (आरटीयू ग्राहक) से मेल नहीं कर सकते प्रतिक्रिया के साथ खुला अनुरोध की अनदेखी,
के ReadRequest माध्यम से भेजा जाता है
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();
}
अगर वहाँ कोई एनिमेशन में चल रहा है, मेरी खिड़की, प्राप्त होता है डेटा त्रुटियों के बिना.
- कर सकते हैं यह तय किया जा सकता का उपयोग करके एक अलग धागे को चलाने के लिए modbus/पढ़ने लिखने के तरीके और कैसे होगा मैं को लागू है कि? या मैं केवल वृद्धि misreads डाल द्वारा सीरियल कार्यों में एक अलग थ्रेड?
के रूप में मैं इसे समझ अब तक, इस तथ्य के कारण है कि मेरे आवेदन है अब तक चल रहा है में एक एकल धागा, निरंतर अद्यतन जीयूआई के किसी भी तरह के दखल के स्वागत के साथ धारावाहिक डेटा.
मैं linux कमांड लाइन उपकरण "तनाव" के लिए देखने के लिए अगर मैं खो डेटा के तहत उच्च cpu लोड के रूप में अच्छी तरह से, लेकिन है कि मामला नहीं है.
तरह का संबंध है