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

Простейшие вопросы в области инженерной разработки
Ответить
Валерон
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 май 2017, 17:20
Репутация: 0
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение Валерон »

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

Валерон
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 май 2017, 17:20
Репутация: 0
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение Валерон »

После многодневного раздумья набросал вариант сортировки. Может и сделал по чайниковски, но лучше пока не могу. Если кто может, то поправьте или подскажите другой алгоритм.
Вложения
Sort_Data.vi
(11.73 КБ) 37 скачиваний

Artem.spb

Activity Автор
expert
expert
Сообщения: 1942
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

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

Сообщение Artem.spb »

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

Валерон
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 май 2017, 17:20
Репутация: 0
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение Валерон »

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

Artem.spb

Activity Автор
expert
expert
Сообщения: 1942
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

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

Сообщение Artem.spb »

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

Blackman

Activity
leader
leader
Сообщения: 930
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Репутация: 0
Версия LabVIEW: 6.1,8.5,20
Контактная информация:

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

Сообщение Blackman »

:wink:
Вложения
Sort Array by Address.PNG

Валерон
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 май 2017, 17:20
Репутация: 0
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение Валерон »

Спасибо за примеры, но по картинкам мне пока трудно судить. Надо пробовать в живую.

Artem.spb

Activity Автор
expert
expert
Сообщения: 1942
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

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

Сообщение Artem.spb »

Мой код оживлять придётся руками, код Blackman-а это snippet, который оживить гораздо проще

Валерон
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 май 2017, 17:20
Репутация: 0
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение Валерон »

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

Валерон
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 май 2017, 17:20
Репутация: 0
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение Валерон »

Пардон! Пример Blackman-а может и подойдет.

Валерон
beginner
beginner
Сообщения: 16
Зарегистрирован: 28 май 2017, 17:20
Репутация: 0
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение Валерон »

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

Ответить

Вернуться в «Для чайников»