2016-04-25 9 views
0

Есть ли способ получить уведомление, когда мое последовательное устройство готово получить больше данных?Как узнать, когда QSerialPort готов для получения дополнительных данных в Qt5?

Я реализует программу, которая подает команды на контроллер сервомотора через последовательное использование асинхронный API из QSerialPort. Программа работает, но кажется, что я испытываю перегруженность.

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

Мой вопрос: могу ли я получать уведомление, когда последовательный интерфейс готов принимать новые данные каким-то образом при использовании QSerialPort в asynchronous режим?

Единственный другой вариант, который я вижу, заключается в использовании синхронного режима и звоните waitForBytesWritten() Но я действительно не хочу этого делать.

ПРИМЕЧАНИЕ: Я внимательно изучил serial port examples in the Qt5 documentation, но example for asynchronous write не предоставляет необходимую мне информацию, поскольку он выполняет одноразовую передачу перед выходом из системы.

ответ

1

Вы можете прослушивать сигнал bytesWritten и проверить bytesToWrite, чтобы определить, пуст ли буфер записи пуст. Оба наследуются от QIODevice.

+0

Вы имеете в виду проверку bytesToWrite из обработчиков bytesWritten? –

+0

Да. Обработчик bytesWritten можно вызывать несколько раз, но только когда значение bytesToWrite достигает нуля, буфер записи будет пустым. –

+0

Я сделал свой счетчик, не зная о bytesWritten(), но это не сработало. просто заменив мою переменную этим вызовом, и все денди. –