Назад к списку

Работа с протоколами передачи данных или как создать свой протокол

Добрый день. 

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

Начнем с самого простого это символьный или тестовый вид передачи данных, в основном такие протоколы имеют признак конца и начала, уникальный символ например #. Когда в начале и в конце он ставится и обозначает начала и конец передачи данных. Либо есть только в начале, чтобы было понимание, что вам прилетел не мусор, а данные которые нужно потом обработать. Для есп32 или АРДУИНО это обычное дело когда из за наводок или плохих контактов вы можете получать в порт мониторинга МУСОР.


Текстовые протоколы довольно легкие, и могут пониматься просто при чтении человеком. Например:#str:sdfbasdfasd;asd:sadfasdfasd;# Тут все довольно просто и понятно, есть начало и конец, которые обозначаются решеткой, есть четкий разделитель переменных и их названий, проблем тут в парсинге не много, и за частую такие протоколы похожи на JSON объекты, но принцип работы чуток по проще.

Текстовые протоколы довольно простые у них всегда есть начало и конец. есть разделители, а так же есть структура и точное описание. Например теже протоколы http / https это все тоже текстовые протоколы, там все передается в легко читаемом виде для человека, а в качестве разделителя идет символ \r - конец строки.

С бинарными протоколами гораздо сложнее, и часто они используются для передачи данных внутри машины, или в промышленности между машинами. Данные идут в бинарном виде, так, что без разбора того, что пришло не понятно, что мы получили в порт мониторинга или по шинам связи.

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

Примерная структура обычно такая: 

1. Начало пакета 

2. Адрес кому предназначен 

3. Команда 

4. Длина 

5. Данные 

6. CRC 

7. Конец пакета

Чтобы чуть больше разобраться, нужно посмотреть на промышленные стандарты протокола например на протокол MODBUS для RS485. Выше я описал основу, которая поможет тебе в понимании протоколов, чтобы не ускорить развитие. И бонус, при приятии данных, мы их обычно принимаем как строку или си массив. Команды которые мы используем для поиска совпадений, если например это просто команды без параметров: if(MSGSIM800.indexOf(">") >= 0) для строк и if(strncmp(Message, "HOST=", 5) == 0) для си массивов.

Надеюсь данная статья тебе была полезная и понятная. По вопросам написать прошивок для есп32 или ардуино можно обратиться на почту: urbannova@yandex.ru

Поиск информации по сайту мониторинга транспорта TREKBERRY
© TREKBERRY 2017-2026, Дмитрий В.М. Все права защищены.
Копирование материала без ссылки на источник запрещено. Информация размещенная на сайте не является публичной офертой. Часть текстов написано нейросетью, может содержать не точности. На сайте может быть реклама и иметь рекламные вставки. Если личный кабинет не активен более 6 месяцев подряд. Аккаунт может быть удален, а баланс потерян.