Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 1
Регистрация: 07.08.2014
Сообщений: 63

Обработка непрерывного потока данных

15.08.2018, 09:30. Показов 1256. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Поставили на работе задачу организовать прием и обработку данных (построение на основе них графика) с устройства, которое шлет эти данные в режиме NON-STOP. Обмен производится через COM-порт, размер одной посылки - 4 байта. Вот только будет все это производится на скорости 115200 с частотой в идеале 2кГц. Т.е. очень быстро и много! Вот у меня и созрел вопрос к сообществу, как лучше организовать такой прием? Между собой посовещались и решили не проверять целостность пакета, т.е. не добавлять, скажем, никакой CRC-8, но это не точно Все в угоду интенсивности обмена. Как лучше принимать? Просто рубить поток по 4 байта? Как определить начало обмена, чтобы не потерять первые байты? Пока что-то ничего на ум не приходит. Может кто сталкивался уже, или есть какие-нибудь наработки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.08.2018, 09:30
Ответы с готовыми решениями:

Обработка запроса на остановку потока внутри этого потока
Нужно обрабатывать запрос на остановку потока внутри самого потока. Вопрос - как это записать?

Обработка потока данных
Здравствуйте. Возникла задача обработки данных, поступающих с некого датчика по вай-фаю. Сейчас есть программа, которая содержит класс...

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

5
 Аватар для HectorPrima
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
15.08.2018, 09:36
У устройства должен быть описан протокол, начало пакета и т.д.

Добавлено через 1 минуту
Или в попытке перебрать/декодировать первые 2-3 пакета определить смещение в байтах.
0
0 / 0 / 1
Регистрация: 07.08.2014
Сообщений: 63
15.08.2018, 10:13  [ТС]
Т.е. все-таки нет других вариантов, кроме как создать некий протокол? А как лучше задавать начало пакета, чтобы не было неоднозначностей? Каким-нибудь нулевым байтом или 0xFF? А если внутри 4-х байтового числа будет данный байт...
0
15.08.2018, 10:45

Не по теме:

Цитата Сообщение от Auratos Посмотреть сообщение
Т.е. очень быстро и много!
Фигня это. Даже тормозной USB HID прокачивает данные в 4 раза быстрее. А UART и USB VCP способны работать на мегабите. Если разработка устройства вам подконтрольна, то вы можете значительно поднять скорость, после добавив и CRC, и всё прочее для протокола обмена.

0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
15.08.2018, 11:08
Цитата Сообщение от Auratos Посмотреть сообщение
Т.е. все-таки нет других вариантов, кроме как создать некий протокол? А как лучше задавать начало пакета, чтобы не было неоднозначностей? Каким-нибудь нулевым байтом или 0xFF? А если внутри 4-х байтового числа будет данный байт...
Пусть устройство отправляет 4 байта типа 0xFFFFFFFF и затем 400 байт данных, затем опять 0xFFFFFFFF и снова пакет из 400 байт и т.д. То есть 0xFFFFFFFF будет выступать как стартовая последовательность чанка.
Принимающая программа читает входной поток пока не примет 0xFFFFFFFF. Как только стартовая последовательности принята - начинает чтение данных. Если после принятия 400 байт нет значение 0xFFFFFFFF, значит где-то произошла ошибка, и программа снова переходит в режим ожидания стартовой последовательности.
Само значение 0xFFFFFFFF конечно должно быть зарезервировано и не должно появляться в данных.
Возможен случай, когда стартовая последовательность встречается на границе между данными (например 0xabcdffff 0xffffabcd) но в таком случае через 400 байт не встретится 0xFFFFFFFF и программа поймет, что чтение идет неправильно.
Если в исходных данных такая ситуация встречается часто, то можно увеличить длину стартовой последовательности и составить ее из тех значений, которые редко встречаются в данных.
0
0 / 0 / 1
Регистрация: 07.08.2014
Сообщений: 63
15.08.2018, 12:10  [ТС]
Rius, тут загвоздка не в принимающем устройстве, а в отправляющем. Там стоит не сильно мощный контроллер PIC18F25K22, у него максимальная скорость передачи допустимая - 115200 (на деле 111709). А данные будут браться по прерыванию с АЦП, которое как раз и прерываться будет с частотой 2кГц. Т.е. процесс выглядит так: прерывание, данные забираю, отправляю на ПК, жду следующего прерывания.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.08.2018, 12:10
Помогаю со студенческими работами здесь

Обработка прерывного потока данных
Есть поток данных, который обрабатывается в цикле с засыпанием. Реализован через try while. Через какое то время (10 секунд) число...

Построение таблицы в STM32 (обработка потока данных)
Добрый день, у меня есть STM32 и несколько датчиков, которые каждые 100 мс. присылают данные, которые мне нужно обработать и сформировать...

Обработка звукового потока
В общем суть вопроса таково, есть поток http://online.radiorecord.ru:8102/brks_128 есть библиотека bass воспроизводится все отлично,...

Обработка потока ввода
Подскажите, как сделать так, чтобы поток обрезал данные, которые находятся после нужного мне значения, например ввожу два числа: 1 5 -...

Обработка видео-потока
Нужно обработать видео информацию, наподобие кодека/плагина в видео-конвертере/редакторе. Понятия не имею, как это можно сделать и к какой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru