Страница 1 из 1

Как сортировать данные хаотичного порядка

Добавлено: 25 сен 2018, 23:22
Валерон
Приветствую всех!
Помогите ЧАЙНИКУ реализовать свой ВП.
Суть: Поступают данные по com-порту. Информационные слова состоят из 4 байтов. В каждом слове в младшем байте есть свой адрес, в соответствии с котором по определенному алгоритму в каждом слове вычисляются различные значения и выводятся на график. В потоке может быть и 2 слова , и 3 слова, и 4 слова, т.е. может поступить по com-порту от 16 байт до 32 байта. Проблем по обработке как-бы нет, но застопорился я в направлении определенного слова как-бы в свое "русло"для дальнейшей обработки. Пробовал разные варианты и массивы и строки, но никак не получается. С кейсами как в поговорке: кейс на кейсе и кейсом погоняет.
Пример: 1 поток данных - слово_1, слово_2;
2 поток данных - слово_1, слово_4, слово_3, слово_2;
3 поток данных - слово_1, слово_2; и т.д.
Информация в Hex формате.
Уважаемые программисты подскажите какой-нибудь алгоритм или примерчик, а то мои скудные знания пока не позволяют решить задачу. Буду очень благодарен.

Re: Как сортировать данные хаотичного порядка

Добавлено: 26 сен 2018, 13:33
Валерон
После многодневного раздумья набросал вариант сортировки. Может и сделал по чайниковски, но лучше пока не могу. Если кто может, то поправьте или подскажите другой алгоритм.

Re: Как сортировать данные хаотичного порядка

Добавлено: 26 сен 2018, 13:42
Artem.spb
После второго поста уже можно что-то сказать. До этого мало был понятен вопрос.
Я так понимаю, "идентификатор слова" это и есть адрес? почему он 3 байта? куда делся четвёртый?
Чем кейсы не устроили? Если адрес постоянной длины, то без всяких поисков взять 3 (4) байта и по кейсу дальше. Из порта логично вычитать всё, а дальше можно разбить строку на массив по 7 (8) байт и всё в цикле.
str.png
str.png (18.61 КБ) 3157 просмотров

Re: Как сортировать данные хаотичного порядка

Добавлено: 26 сен 2018, 14:49
Валерон
Может я непонятно рассказал или вы меня не так поняли. Попробую еще раз. И так, поступает информация например 8 байтов. Полная информация содержится в 32-х битах. Слова 32-х разрядные, то значит поступило 2 слова (8 байт = 64 бит/32 бита = 2 слова). Если пришло 16 байтов, то значит пришло 4 слова. В каждом слове младшие 3 бита!!! это его адрес, в соответствие с которым свой алгоритм обработки. Если бы слова приходили в одинаковом количестве и порядке, вопросов бы не было. А так как слова приходят в разном порядке и в разном количестве - это поставило меня в тупик. В своем примере я 32-х разрядные числа перевел в строку и впереди присвоил строковый идентификатор (который можно присвоить в соответствии с определенным адресом), чтобы потом выбирать определенное слово из любого места в строке. Ну и дальше обрабатывать.

Re: Как сортировать данные хаотичного порядка

Добавлено: 26 сен 2018, 16:17
Artem.spb
Вопрос-то в чём?
Если пакет 32 бита, разделите посылку на пакеты, а дальше циклом. Будет не "подстрока", а "три бита". суть не меняется.
u32.PNG

Re: Как сортировать данные хаотичного порядка

Добавлено: 26 сен 2018, 16:25
Blackman
:wink:

Re: Как сортировать данные хаотичного порядка

Добавлено: 26 сен 2018, 17:26
Валерон
Спасибо за примеры, но по картинкам мне пока трудно судить. Надо пробовать в живую.

Re: Как сортировать данные хаотичного порядка

Добавлено: 26 сен 2018, 17:56
Artem.spb
Мой код оживлять придётся руками, код Blackman-а это snippet, который оживить гораздо проще

Re: Как сортировать данные хаотичного порядка

Добавлено: 26 сен 2018, 21:04
Валерон
Дорогие господа! Вы не до конца уловили суть! Пример код Blackman-а мне по сути не подходит, т.к. мне не надо накапливать данные. Мне нужно обработать данные за один общий цикл, пришедшие в одной посылке. А пример Artem.spb делает половину, то что надо, обрабатывает посылки. Обработку данных я сделал, только примитивным образом. Ваши примеры более продвинутые. Я их включу в свой проект! Теперь вторая половина дела. Пакеты размещаются в массиве по порядку поступления, т.е. пакет с адресом № 0 пришел первым, далее пришел пакет с адресом №4. В массиве они разместились соответственно ячейка 0 - пакет с адресом №0, ячейка №1 - пакет с адресом №4. Далее пришла вторая посылка: первым пришел пакет с адресом №4, вторым пришел пакет с адресом №0, соответственно они разместились в массиве - ячейка №0-пакет с адресом №4, ячейка №1-пакет с адресом №0. Они поменялись местами. Здесь как в математической формуле, если поменять местами неизвестные то результат будет другой. Другими словами, пришедшие пакеты должны размещаться каждый в своей ячейке массива независимо в каком порядке они придут в посылке. Когда придет посылка со всеми пакетами мне нужно окончательно их обработать, т.е. выполнить как говорится в математике второе действие.

Re: Как сортировать данные хаотичного порядка

Добавлено: 27 сен 2018, 08:10
Валерон
Пардон! Пример Blackman-а может и подойдет.

Re: Как сортировать данные хаотичного порядка

Добавлено: 27 сен 2018, 20:13
Валерон
Проверил пример Blackman-а, то что надо. Но не могу разобраться. Засунул его в цикл, данные не обновляются. Смотрел в отладке, такое ощущение что данные не выходят из For Loop. Прогонял пример отдельно, все отлично, а в While Loop не идет. Подскажите чайнику!