직렬 포트를 사용하여 하드웨어 장치와 통신하고 싶습니다. 문서에 따르면 다음과 같은 메시지가 표시됩니다. QSerialPort를 사용하여 직렬 포트를 통해 데이터를 전송하십시오.
통신에 QSerialPort
을 사용하고 싶습니다. 여기에 내가 시도하고있는 작업은 다음과 같습니다
QByteArray bytes;
bytes.append((char) 0x6E);
bytes.append((char) 0x00);
bytes.append((char) 0x00);
bytes.append((char) 0x0B);
bytes.append((char) 0x00);
bytes.append((char) 0x00);
bytes.append((char) 0x2F);
bytes.append((char) 0x4A);
bytes.append((char) 0x00);
bytes.append((char) 0x00);
bytes.append((char) 0x00);
int transmitted = qSerialPort->write(bytes); //returns no error, transmitted = 11
QSerialPort
인은 다음과 같이 구성합니다
qSerialPort = new QSerialPort(path);
qSerialPort->setBaudRate(QSerialPort::Baud9600);
qSerialPort->setDataBits(QSerialPort::Data8);
qSerialPort->setParity(QSerialPort::NoParity);
qSerialPort->setStopBits(QSerialPort::OneStop);
qSerialPort->setFlowControl(QSerialPort::NoFlowControl);
qSerialPort->open(QIODevice::ReadWrite);
나는 HW 장치에서 올바른 응답을하지 않습니다. QSerialPort
을 사용하여 16 진수 값을 직렬 포트로 보내는데 간과 한 점이 있습니까? 감사.
예. 완전한 테스트 케이스 게시를 간과했다. 즉, 기기에서 데이터를 올바르게 읽었 음을 알리는 질문은 없습니다. –
사이드 노트 : 패킷을 문자열로 쓸 수 있습니다 :'const char data [] = "\ x6E \ x00 \ x00 ... \ x00"; transmit = qSerialPort-> write (data, sizeof (data) -1); ' –
패킷의 내용이 잘못되었을 가능성이 있습니다. 데이터 섹션으로 "\ x00"을 넣었지만 해당 섹션에 대한 적절한 CRC를 계산하지 않았습니다. 사용할 CRC에 대한 프로토콜 설명서를 참조한 다음 패킷을 보내기 전에 CRC를 계산하십시오. –