我有一个单一的线QQuick应用程序的一个主窗口和一个类处理储备读写功能。 一切工作的现迄今为止,但是当我把一个BusyIndicator在我最大似然的窗口,以显示,总是忙我CRC不匹配和应急超时,例如:
- "丢弃的反应是错误的儿童权利委员会,收到:64580,计算CRC:55067"
- "读响应错误:应超时。 (code:0x5)"噪声。储备:(不客户)无法匹配的反应与开放的请求,忽略了
该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();
}
如果没有动画运行在我的窗口,数据收到的没有错误。
- 这可以通过固定使用一个单独的线运行储备读写方法和如何,我会实现? 或者我只增加误读通过把串职能,在一个单独的线?
我的理解是迄今为止,由于这样的事实,我的应用程序是迄今为止的运行在一个单一的线,不断更新的GUI是以某种方式妨碍接收的序列数据。
我用linux命令行工具"压力"来看,如果我丢失数据,在高中央处理器装载很好,但那不是这种情况。
亲切的问候