Qt PROGRAM - QModBus čítať poškodené PROGRAM BusyIndicator/Animácie - SingleThread

0

Otázka

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

c++ modbus multithreading qml
2021-10-27 11:45:23
1

Najlepšiu odpoveď

1

Našiel som otázka:

Ako som si myslel, že program na vykreslenie motora, scéna graf alebo čokoľvek, čo vám hovoria, spôsobené neprijaté rámov modbus príjem. Myslím, že nejako threading by pomohli, ale nebol som schopný opraviť tým, že modbusInterface beží v samostatnom vlákne.

Na konci riešenie bolo umožniť závitových vykreslenie slučky scény graf, ako je uvedené tu: https://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph.html#threaded-render-loop-threaded

I. e. tým, že

qputenv("QSG_RENDER_LOOP","threaded");

v mojom main().

2021-10-28 12:49:29

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................