Tengo un solo hilo QQuick aplicación con una ventana principal y una clase que se encarga de Modbus Lectura/Escritura de funciones. Todo funciona bien hasta ahora, pero cuando pongo un BusyIndicator en mi qml ventana para mostrar que el Bus está ocupado puedo obtener diferencias CRC de respuesta y los tiempos de espera, por ejemplo:
- "Desechando la respuesta con mal CRC, recibido: 64580 , calcula el CRC: 55067"
- "Leer la respuesta de error: timeout de Respuesta. (código: 0x5)" - qt.modbus: (RTU cliente) No coincide con la respuesta con la solicitud de apertura, ignorando
El ReadRequest se envía a través de
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();
}
Si no hay ninguna animación se ejecuta en mi ventana, se reciben los datos sin errores.
- Esto puede ser corregido mediante el uso de un subproceso independiente para ejecutar el modbus lectura/escritura de métodos y cómo puedo implementar? O solo me aumento la lectura poniendo la Serie de funciones en un Hilo separado?
Como yo lo entiendo hasta el momento, debido al hecho de que mi solicitud es hasta el momento que se ejecuta en un solo hilo, la continua actualización de la interfaz de usuario es de alguna manera interferir con la recepción de Datos en Serie.
He utilizado la línea de comandos de linux herramienta de "estrés" a ver si puedo perder los datos bajo alta carga de cpu así, pero ese no es el caso.
Saludos