Ожидание полного паке с com порта, как реализовать?
Есть весы, валят в ком-порт пакеты данных 12 байт. Написал программу + морду на pyqt5, проблема в том, что программа при загрузке начинает сразу слушать порт и пытаться разобрать эти пакеты, иногда бывает такое, что в момент открытия порта происходит, что-то типа рассинхронизации, хотя есть указатель конца пакета, и начинает валить неправильные пакеты, такое ощущение, что конец от предыдущего пакета и начало текущего пакета.
Необходимо как-то при открытии дождаться полного пакета и начать слушать именно так как надо, хотя по моей логике указатели четности, стоп-бита, размера пакета, в настройках ком-порта должны как раз пресекать такое на аппаратном уровне, или я неправильно рассуждаю ?
Настройки ком-порта (скорость, четность и т.д.) согласно мануалу к весам.
старт-стоп биты по идее должны четко разграничивать каждый байт. и проблем с неправильным считыванием символов сталкивался редко.
у тебя проблема с кривыми байтами или определением начала пакета ??
если у тебя проблема только с определением начала пакета, то просто жди символы начала пакета, потом пиши пакет в буфер и отправляй на обработку.
вот и я думаю, что все эти настройки (стар-стоп, четность, скорость, количество бит данных) как раз подразумевает под собой правильное получение пакета, но почему иногда так получается не понимаю, надо попробовать шнур поменять может помехи/длина, ну и попробовать с буфером
неправильно :) с информацией большей чем байт модуль уарта просто не работает и даже не подозревает что там и как.
старт-стоп четность и все остальное лишь гарантируют правильность доставки слова(или байта). т.е. передатчик послал 0xA и приемник выявил начало слова, запустил прием слова, разобрал последовательность изменения состояния уровня напряжения записал получившиеся биты в прегистр приема и, после отработки, сгенерировал прерывание и переключился на поиск начала и прием следующего байта.
всё, дальше его судьба принятого не интересует, а уж правильность пакета обрабатываешь программой.
к примеру в режиме RTU протокола modbus разделение пакета делается через паузу в передаче байтиков. а в режиме ASCII через символ начала и конца пакета.
в более сложные модули может входить программная или аппаратная обработка пакета (тот же Ethernet-интерфейс) и все такое, но не в уарте.