Mám jednu niť QQuick aplikácií s jedným hlavným oknom a jedna trieda, ktorá spracováva Modbus Písanie/Čítanie funkcie. Všetko je v poriadku tak ďaleko, ale keď som dal BusyIndicator v mojom program na okno ukazujú, že Autobus je obsadené som si CRC nesúlad a odpoveď časové limity, napr.:
- "Zahodenie reakcia zlé CRC, prijaté: 64580 , vypočítaná CRC: 55067"
- "Prečítajte si odpoveď chyba: timeout Odozvy. (kód: 0x5)" - qt.modbus: (RTU klienta) Nemôže zápas reakcia otvorte žiadosť, ignorovanie
Na ReadRequest je odoslaná prostredníctvom
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();
}
Ak nie je animácie beží v mojom okno, údaje sa dostali bez chyby.
- Môže to byť stanovená pomocou samostatné vlákno spustiť modbus čítanie/zápis metódy a ako by som sa implementovať, že? Alebo by som len zvýšiť misreads vložením Sériového funkcie v samostatnom Vlákne?
Ako som pochopil tak ďaleko, vzhľadom k tomu, že moja aplikácia je zatiaľ beží v jednom vlákne, neustále aktualizovať GUI je nejako zasahovať príjem Sériové Údaje.
Použil som linux nástroj príkazového riadka "stres", aby videl, keby som sa stratiť údaje, na základe vysokej cpu zaťaženie rovnako, ale že to nie je tento prípad.
S pozdravom