Russian Qt Forum
Май 05, 2024, 18:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSerialPort мусор при открытии  (Прочитано 3979 раз)
sidsukana
Гость
« : Май 06, 2015, 12:19 »

Есть контроллер, есть софт на Qt5 который к нему подсоединяется по COM порту.
При открытии порта, автоматически на контроллер сыпется непонятный мусор в виде числа -2 (0xFE) несколько раз подряд, при последующих соединениях постоянно по 2 раза при открытии.

Вот типа такого
Цитировать
06-05-2015 14:03:19 Connected!
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:19 -2
06-05-2015 14:03:20 -2
06-05-2015 14:03:20 -2
06-05-2015 14:14:14 Disonnected!
06-05-2015 14:14:15 Connected!
06-05-2015 14:14:15 -2
06-05-2015 14:14:15 -2

Может быть неверные настройки порта указываю?

Код открытия порта.
Код:
void OpAS::slotConnect()
{
    // set default port
    if (m_portNames.size())
        m_serial->setPortName(m_portNames.at(0));

    if (!m_serial->isOpen())
    {
        if (m_serial->open(QIODevice::ReadWrite))
        {
            m_serial->setBaudRate(QSerialPort::Baud57600);
            m_serial->setParity(QSerialPort::NoParity);
            m_serial->setStopBits(QSerialPort::OneStop);
            m_serial->setDataBits(QSerialPort::Data8);
            log("Connected!");
        }
        else
            log("Error: " + m_serial->errorString());
    }
    else
        log("Error: Port already open!");
}
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Май 06, 2015, 12:40 »

А при открытии сторонними программами ничего в контроллер не сыплется? Похоже на то, что проблема на стороне контроллера.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
sidsukana
Гость
« Ответ #2 : Май 06, 2015, 12:48 »

Если открыть монитор порта (Arduino контроллер) то ему в ответ ничего не сыпется. Только если подрубаюсь из своей софтины.
Записан
Bepec
Гость
« Ответ #3 : Май 06, 2015, 13:23 »

sidsukana покажи код приёма данных на стороне программы пожалуйста Улыбающийся

PS и сразу как решение - установи сниффер com порта и посмотри, откуда эти двойки. Фантомные ли они, или же посылаются твоим контроллером как признак коннекта?
Записан
sidsukana
Гость
« Ответ #4 : Май 06, 2015, 14:56 »

Вот кусок чтения

Код:
if (Serial.available())                                         // Check if user entered a command this round
    {
        ch = Serial.read();
        Serial.println(ch, DEC);
    }

Этот кусок находится в void loop()

А серийник инициализируется в void setup()

Код:
Serial.begin(57600);
Записан
sidsukana
Гость
« Ответ #5 : Май 06, 2015, 15:03 »

Извиняюсь, на стороне программы вот, остальное отрезал но это то что выполняется при чтении с контроллера если команда неизвестна (тупо выводит в лог данные).

Код:
void OpAS::slotReadData()
{
    while (m_serial->bytesAvailable())
    {
        m_buffer.append(m_serial->readAll());

        if (!m_buffer.size())
            continue;

        quint8 opcode = m_buffer.at(0);
        switch (opcode)
        {
             ...
            default:
            {
                int end = -1;

                while ((end = m_buffer.indexOf("\r\n")) != -1)
                {
                    log(m_buffer.left(end));
                    m_buffer.remove(0, end + 2);
                }
                break;
            }
        }
    }
}
Записан
sidsukana
Гость
« Ответ #6 : Май 06, 2015, 17:44 »

Проблема решилась снижением скоростного режима до 9600 б/сек.
Видимо провод очень длинный Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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