ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
22 февраля
1500072 Топик полностью
Eddy_Em (20.02.2025 21:23, просмотров: 79) ответил Бapбoc на Бусхунд это кто? Были у меня частотники импортные, там порядок байт был описан в инструкциях. А вот к манометру пришлось искать подход методом научного тыка. Его (манометр) делали знатные олдскулы. Круглый копус, молотковая эмаль, в протоколе сначала передаются два байта 0хАА. Но штука годная тем не менее.
Меня всегда напрягали протоколы, где данные могут идти непрерывным потоком, а разделяются лишь одним-двумя "магическими" символами. 

Читаешь ты такой поток - о, "старт вроде", прочитал из буфера сколько нужно, считаешь CRC - фигня какая-то (а у некоторых CRC - 1 байт, так что, может даже и совпасть), начинаешь во входном буфере следующую старт-комбинацию искать…

Сейчас как раз пишу нижний уровень системы управления мелким телескопом. И там с энкодеров данные именно так приходят, ну хоть CRC о четырех байтах (правда, последний всегда 0 - зато можно ориентироваться на "стартовый символ" из двух байт, а не одного). Но, судя по дампу, там данные не непрерывно идут, а с небольшими паузами. Т.е. хотя бы при считывании можно будет посредством select'а с нужным таймаутом брать ровно по одному пакету (а дальше уж по длине смотреть - если меньше, ждем следующий пакет).

С модбасом все куда проще: можно побольше поставить таймаут селекта (байтов на 5-8), чтобы уж наверняка. Все равно это - не CAN, и покуда мастер не спросит, никто ничего не пошлет. На передаче данных тоже пофиг, т.к. комп - мастер. А чтобы слейва на компе реализовать, придется перед отправкой сообщения выдержать usleep - мало ли какой с той стороны капризный мастер, вдруг он хочет после отправки своего сообщения четко не менее 3.5 символов выждать?

eddy-em.livejournal.com github.com/eddyem