|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.01.2018, 12:34 | #1 |
Пользователь
Регистрация: 30.08.2011
Сообщений: 26
|
Алгоритм выделения данных из потока байт
Здравствуйте, уважаемые программисты! У меня следующий вопрос:
Есть программа, которая принимает данные с COM-порта. Данные структурированы в соответствии с протоколом (кастомным). Со стороны отправителя формируются пакеты из нескольких байт и отправляются в адрес оговоренной программы. Так вот задача в том, чтобы из потока байт выделить эти самые пакеты, а из пакетов уже полезную информацию и эту информацию визуализировать. Весь процесс должен проходить в режиме реального времени, т.к. в пакетах передаются данные с датчиков. Как сделать весь процесс оптимальным во времени? Наверняка существуют стандартные алгоритмы выделения данных. Если кто знает, подскажите в какую сторону копать, что изучить? Данные приходят кусками (пакеты могут дробиться). Интервалы времени между посылками в общем случае переменно и может варьировать от нескольких мс, до 5 сек. Если это важно: работаю в wxDev-C++. Байты с COM-порта принимаются в отдельном потоке. P.S. Готового решения не прошу. Интересен сам алгоритм или какой-то общий подход. На C++ сам все реализую. |
18.01.2018, 13:12 | #2 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
А зачем чото выделять, когда пакеты и так сформированы?
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
18.01.2018, 13:27 | #3 |
Пользователь
Регистрация: 30.08.2011
Сообщений: 26
|
Во-первых программа может быть запущена в любой момент времени и прием байтов может начаться абсолютно хаотично (не с начала пакета). Во-вторых сами пакеты могут рваться и их куски будут приходить хаотично во времени.
|
18.01.2018, 13:31 | #4 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Так как вы толком ничего не говорите, то я отвечу общими словами.
Считать данные записать данные в Chart. Он сам за вас всё сделает. Вот и весь алгоритм. Раз пакет, то просто вычитывайте весь этот пакет в вашу структуру. Стандартные разбор данных основан на стандартных протоколах сериализации/десериализации данных такие как протобуф, XML, JSON и на простых структурах. Всё остальное требует написания кода в соответствии с документацией и проверки всевозможных исключений. Цитата:
Используйте готовые компоненты или хотя бы ОС. Там уже всё настроено и сделано оптимально. Мышки плакали и кололись, но продолжали есть кактус. Используйте Qt Creater. И вообще для отображения графиков лучше использовать готовый компонент. И наверно самый простое это QChart - из фреймворка Qt. Или TChart из builder'а
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
18.01.2018, 13:38 | #5 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
1) дальнейшее поведение вашей программы будет непредсказуемо. 2) Данные с датчиков будут неверными. И не будут подлежать измерению/обработке. Так что ни в коем случае не соглашайтесь пока разработчики железа не исправят линию связи. Даже проверка контрольной суммы(КС) гарантирует только единичные сбои на протяжение всего пакета. А если там будет двойная ошибка, то КС может и пропустить пакет с ошибками в обработку.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
18.01.2018, 13:45 | #6 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Делайте передачу по команде. Если нельзя то накапливайте данные в буфер(очерь байт) и ищите маркеры начала конца пакета. Далее войдя в синхронизацию вычитывайте пакет за пакетом уже не ищя маркеры - простой автомат как учили. И такое обычно делается на некоторой железке. А в комп уже отправляется гарантированные пакеты.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
18.01.2018, 13:57 | #7 |
Пользователь
Регистрация: 30.08.2011
Сообщений: 26
|
Спасибо за советы! Попробую все учесть и что-то рабочее выдать
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Алгоритм определения максимального потока. | 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 |