Mám jeden závit QQuick aplikace s jedním hlavním oknem a jedna třída, která zpracovává Modbus Zápis/Čtení funkce. Vše je v pořádku tak daleko, ale když jsem dal BusyIndicator v mém qml okno ukázat, že Autobus je zaneprázdněn jsem dostal CRC nesouladu a odpovědi časové limity, např.:
- "Vyřazení reakci s nesprávným CRC, obdržel: 64580 , vypočítá CRC: 55067"
- "Přečtěte si reakci chyba: Odpověď časový limit. (kód: 0x5)" - qt.modbus: (RTU klienta) Nemohou rovnat reakci s otevřenou žádost, ignorování
Na ReadRequest je odeslána prostřednictvím
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();
}
Pokud není animace spuštěna v okně, data je přijat bez chyb.
- Lze to vyřešit pomocí samostatné vlákno spustit modbus čtení/zápis metody a jak bych to mohl provést? Nebo bych pouze zvýšit špatně načte tím, že Sériové funkce v samostatném Vlákně?
Jak jsem pochopil tak daleko, vzhledem k tomu, že moje aplikace je zatím běží v jednom vlákně, průběžná aktualizace GUI je nějak ruší příjem Sériových Dat.
Já jsem použil linux příkazového řádku nástroj "stres", jestli jsem ztratit data za vysoké zatížení cpu stejně, ale to není tento případ.
Druh jde