LINUX.ORG.RU

обработка инфы с com-port

 , ,


1

1

есть прибор с которым общаемся через ttySB0.
если посылать элементарные команды «ref» то в ответ ловлю «OK\r\n». все в порядке
но когда запускаю стрим и ловлю через

connect(serial, &QSerialPort::readyRead, this, &mw::readD)
...
void mw::readD() {
    QByteArray rD = serial->readAll();
    qDebug() << rD << QString::fromLocal8Bit(rD) << rD.toHex();
}
получаю:
«\x14\xA1""a\xA2)@\r» «\u0014�a�)@\r» «14a161a229400d»
«\x13\xD1""a\x84.@\r» «\u0013�a�.@\r» «13d161842e400d»
«OK\r\n» «OK\r\n» «4f4b0d0a»
а обещали такое:
06BD,1B000774CRLF

где и что я делаю не так?

Deleted

проверь за одно скорость на которой общается прибор. по дефолту в qt вроде как 9600, по хорошему этот параметр должен быть конфигурируемым без перекомпеляния.

system-root ★★★★★
()
Ответ на: комментарий от RazrFalcon

я отсылаю данные так:

QString sendData = "\r\n";
QByteArray sendByte = sendData.toLocal8Bit();
serial->write(sendByte);
ничего о типе кодировки не нашел.
через moserial все тоже самое приходит.

Deleted
()
Ответ на: комментарий от RazrFalcon

исправил.
но это не решает основной проблемы...

Deleted
()
Ответ на: комментарий от Deleted

но это не решает основной проблемы...

для начала убедись, что это так, а не кривая интерпретация тобою вывода.
например настрой телнет терминал, залей подготовленный файл с командой и полученный результат сохрани в файл.
иначе может оказаться, что это твоя IDE или ещё чего портит выхлоп.

system-root ★★★★★
()
Последнее исправление: system-root (всего исправлений: 2)
Ответ на: комментарий от system-root

moserial и qt-костыль выдают однo и тoже (после декодировки):

Type = 1 Radiometer
Max Lambda = 440000
Min Lambda = 10600
Cal Lambda = 10600
Sensitivity = 1.097E+02
Firmware Version = 1.02.08
Head Area = 7.070E-01
Min Range = 22
Max Range = 27

такой выхлоп прилетает везде. а когда стрим... то, что описал выше

Deleted
()
Ответ на: комментарий от imb

так оно же построчно (с разделителем) и бросает (\r)?
+ куда я его только не писал... даже в файл, по совету выше.

Deleted
()

Да дохрена всего ты можешь делать не так. Контроль передачи какой (аппаратный/XON/XOFF)? Буферизация используется? Буфер чистится?

asaw ★★★★★
()
Ответ на: комментарий от asaw

bit per second - 921600
data bits - 8
parity - none
stop bits - 1
flow control - none

поменял Local8Bit на Utf8.
теперь считываю до последнего байта:

    QByteArray rD = serial->readAll();
    while (serial->bytesAvailable()) {
        rD.append(serial->readAll());
    }
Deleted
()
Ответ на: комментарий от system-root

да. есть у меня подозрение... что все команды идут через utf8, а именно эта делает декодировку в US-ASCII...
документация на счет этого молчит.
есть советы как это исправить?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.