Eu tenho uma única thread QQuick aplicação com uma janela principal e uma classe que lida com Modbus de Leitura/Escrita de funções. Tudo está funcionando bem até agora, mas quando eu coloco um BusyIndicator na minha qml janela para mostrar que o Ônibus está ocupado recebo diferenças CRC de resposta e tempos de espera, por exemplo:
- "Descartando resposta errada CRC, recebido: 64580 , CRC calculado: 55067"
- "Resposta de leitura de erro: tempo limite de Resposta. (código: 0 x 5)" - qt.modbus: (RTU cliente) podem Não corresponder à resposta, com pedido de abertura, ignorando
O ReadRequest é enviado via
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();
}
Se não há animação correndo em minha janela, os dados são recebidos sem erros.
- Isso pode ser corrigido por meio de um thread separado para executar o modbus de leitura/gravação de métodos e de como implementar isso? Ou será que eu só aumentar o interpretam mal colocando o Serial funções em um Thread separado?
Pelo que entendi até agora, devido ao fato de que a minha candidatura é até agora rodando em um único segmento, a atualização permanente do GUI é, de alguma forma, interferir com a recepção de Dados Seriais.
Eu usei o linux ferramenta de linha de comando "stress" para ver se eu perder dados em alta a carga da cpu como bem, mas que não é o caso.
Com os melhores cumprimentos