Форум русскоязычного сообщества Ubuntu


Автор Тема: QT + USB устройство QinHeng Electronics USB Serial шлет НЕ понятные символы  (Прочитано 664 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн PavelSamuraIII

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Добрые люди, помогите. 2 недели засел, не могу реализовать простое чтение с УСБ. Есть такие китайские весы QinHeng Electronics USB Serial. Они непрерывно шлют информацию на порт в таком виде: 0.00,kg,. Делал данный проект в QT под Windows, все отлично работает с таким кодом:

                    DWORD iSize;
                    char sReceivedChar;
                    QByteArray data;
                    int i = 0;
                    while (true)
                    {
                        ReadFile(hCom, &sReceivedChar, 1, &iSize, 0);

                        if (sReceivedChar>0)
                        {
                            if (sReceivedChar != '\r' && sReceivedChar != '\n' && sReceivedChar != '-')
                            {
                                data.append(sReceivedChar);
                                i++;
                            }
                        }
                        if (i == 8)
                        {
                            qDebug() << QString(data);
                            data.clear();
                            i = 0;
                        }
                    }

Но там и через HyperTerminal приходит сразу корретное значение.




В Ubuntu 20.04 LTS так же в QT проверяю подключение через cat < /dev/ttyUSB1 в ответ получаю вот такое:

怘������~�怘������~�怘
через putty /dev/ttyUSB1 -serial -sercfg 9600, 8, n, 1, N выдает точно такое же:

怘������~�怘������~�怘������~�怘������~�怘
Читаю вот так:

        char sReceivedChar;
        QByteArray dat;
        int i = 0;
        while (true)
        {
            read(fd, &sReceivedChar, 1);
            if (sReceivedChar>0)
            {
                dat.append(sReceivedChar);
                i++;
            }

            if (i == 8)
            {
                QTextCodec *codec = QTextCodec::codecForName("Windows-1251");

                QString str = codec->toUnicode(dat);
                qDebug()<<dat<<str;
                dat.clear();
                i = 0;
                sleep(1);
            }
         }

В ответ получаю вот такое:
"\x18\x18~\x18\x18~\x06\x18" "\u0018\u0018~\u0018\u0018~\u0006\u0018"
Пробовал кодировки менять в коде, попробовал все, что есть в QTextCodec, результат меняется, но как итог - непонятный текст

Помогите разобраться в кодировке, пожалуйста, проект горит.
« Последнее редактирование: 14 Август 2020, 13:13:39 от Morisson »

Оффлайн Morisson

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 4742
    • Просмотр профиля
Поправил сообщение.
Оформляйте впредь соответствующим образом согласно правил.

Оффлайн PavelSamuraIII

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Спасибо, первый раз

 

Страница сгенерирована за 0.079 секунд. Запросов: 26.