Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2018, 12:34   #1
ддимочка
Пользователь
 
Регистрация: 30.08.2011
Сообщений: 26
По умолчанию Алгоритм выделения данных из потока байт

Здравствуйте, уважаемые программисты! У меня следующий вопрос:
Есть программа, которая принимает данные с COM-порта. Данные структурированы в соответствии с протоколом (кастомным). Со стороны отправителя формируются пакеты из нескольких байт и отправляются в адрес оговоренной программы. Так вот задача в том, чтобы из потока байт выделить эти самые пакеты, а из пакетов уже полезную информацию и эту информацию визуализировать. Весь процесс должен проходить в режиме реального времени, т.к. в пакетах передаются данные с датчиков. Как сделать весь процесс оптимальным во времени? Наверняка существуют стандартные алгоритмы выделения данных. Если кто знает, подскажите в какую сторону копать, что изучить? Данные приходят кусками (пакеты могут дробиться). Интервалы времени между посылками в общем случае переменно и может варьировать от нескольких мс, до 5 сек.
Если это важно: работаю в wxDev-C++. Байты с COM-порта принимаются в отдельном потоке.

P.S. Готового решения не прошу. Интересен сам алгоритм или какой-то общий подход. На C++ сам все реализую.
ддимочка вне форума Ответить с цитированием
Старый 18.01.2018, 13:12   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

А зачем чото выделять, когда пакеты и так сформированы?
Цитата:
Со стороны отправителя
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.01.2018, 13:27   #3
ддимочка
Пользователь
 
Регистрация: 30.08.2011
Сообщений: 26
По умолчанию

Во-первых программа может быть запущена в любой момент времени и прием байтов может начаться абсолютно хаотично (не с начала пакета). Во-вторых сами пакеты могут рваться и их куски будут приходить хаотично во времени.
ддимочка вне форума Ответить с цитированием
Старый 18.01.2018, 13:31   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Так как вы толком ничего не говорите, то я отвечу общими словами.

Цитата:
Сообщение от ддимочка Посмотреть сообщение
На C++ сам все реализую.
Считать данные записать данные в Chart. Он сам за вас всё сделает. Вот и весь алгоритм.

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

Стандартные разбор данных основан на стандартных протоколах сериализации/десериализации данных такие как протобуф, XML, JSON и на простых структурах.
Всё остальное требует написания кода в соответствии с документацией и проверки всевозможных исключений.

Цитата:
Сообщение от ддимочка Посмотреть сообщение
Данные приходят кусками (пакеты могут дробиться). Интервалы времени между посылками в общем случае переменно и может варьировать от нескольких мс, до 5 сек.
Ставьте таймаут на чтение по макаемому.

Цитата:
Сообщение от ддимочка Посмотреть сообщение
Как сделать весь процесс оптимальным во времени?
Используйте готовые компоненты или хотя бы ОС. Там уже всё настроено и сделано оптимально.

Цитата:
Сообщение от ддимочка Посмотреть сообщение
wxDev-C++.
Мышки плакали и кололись, но продолжали есть кактус. Используйте Qt Creater.
И вообще для отображения графиков лучше использовать готовый компонент. И наверно самый простое это QChart - из фреймворка Qt.
Или TChart из builder'а
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 18.01.2018, 13:38   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от ддимочка Посмотреть сообщение
Во-вторых сами пакеты могут рваться и их куски будут приходить хаотично во времени.
Раз так. То это значит что на линии есть помехи. А следовательно они будут влиять не только на начало и конец приема но и на все данные в пакете. Это значит одно что:
1) дальнейшее поведение вашей программы будет непредсказуемо.
2) Данные с датчиков будут неверными. И не будут подлежать измерению/обработке.
Так что ни в коем случае не соглашайтесь пока разработчики железа не исправят линию связи. Даже проверка контрольной суммы(КС) гарантирует только единичные сбои на протяжение всего пакета. А если там будет двойная ошибка, то КС может и пропустить пакет с ошибками в обработку.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 18.01.2018, 13:45   #6
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от ддимочка Посмотреть сообщение
Во-первых программа может быть запущена в любой момент времени и прием байтов может начаться абсолютно хаотично (не с начала пакета).
Делайте передачу по команде. Если нельзя то накапливайте данные в буфер(очерь байт) и ищите маркеры начала конца пакета. Далее войдя в синхронизацию вычитывайте пакет за пакетом уже не ищя маркеры - простой автомат как учили. И такое обычно делается на некоторой железке. А в комп уже отправляется гарантированные пакеты.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 18.01.2018, 13:57   #7
ддимочка
Пользователь
 
Регистрация: 30.08.2011
Сообщений: 26
По умолчанию

Спасибо за советы! Попробую все учесть и что-то рабочее выдать
ддимочка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм определения максимального потока. oquank Помощь студентам 0 29.05.2014 13:58
Алгоритм построения полного потока. WebbMan Фриланс 2 09.01.2013 08:07
Алгоритм построения максимального потока SergeyZuzic Помощь студентам 1 02.11.2012 18:07
Алгоритм выделения контура. TwiX Общие вопросы Delphi 0 19.08.2011 17:11
Отправка потока байт серверу мандарин Помощь студентам 2 25.04.2007 23:48