나는 하나의 스레드 QQuick 응용 프로그램으로 한 메인 창고 하나의 클래스로 처리하는 Modbus 읽기/쓰기 기능이 있다. 모든 것이 잘 작동하는 지금까지 그 때를 넣어 BusyIndicator 내 프로그램입니다..창을 표시하는 버스가 바쁜 나 CRC 불일치와 응답 시간 제한,예를 들어:
- "폐기 응답으로 잘못된 CRC 을 받았:64580,계산 CRC:55067"
- "읽 응답 오류:응답한다. (코드:0x5)"-qt.modbus:(RTU 클라이언트)수치의 응답으로 오픈 요청을 무시하고,
이 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();
}
이 없는 경우 애니메이션에서 실행 창 데이터를 받지 않고 오류가 있습니다.
- 할 수 있습이 될 수정을 사용하여 별도의 스레드를 실행하는 modbus 읽기/쓰기 방법과 내가 어떻게 구현하는가? 또는 나만이 증가 오판을 넣어서 직렬 기능에서 별도의 Thread?
제가 이해하기로는 지금까지 그것 때문에는 사실 내 응용 프로그램입니다 그래서 멀리에서 실행되는 하나의 스레드의 지속적인 업데이트 GUI 는 어떻게든 방해하는 리셉션의 직렬 데이터입니다.
내가 사용하는 리눅스 명령행 도구를"스트레스"를 보면 나는 데이터가 손실에서 높은 cpu 부하뿐만 아니라 하지만 그렇지 않습니다.
종류 감사