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

Простейшие вопросы в области инженерной разработки

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

Postby Валерон on 25 Sep 2018, 23:22

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

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

Postby Валерон on 26 Sep 2018, 13:33

После многодневного раздумья набросал вариант сортировки. Может и сделал по чайниковски, но лучше пока не могу. Если кто может, то поправьте или подскажите другой алгоритм.
Attachments
Sort_Data.vi
(11.73 KiB) Downloaded 11 times
Валерон
beginner
beginner
 
Posts: 16
Joined: 28 May 2017, 17:20
LabVIEW Version: 14.0
Karma: 0

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

Postby Artem.spb on 26 Sep 2018, 13:42

После второго поста уже можно что-то сказать. До этого мало был понятен вопрос.
Я так понимаю, "идентификатор слова" это и есть адрес? почему он 3 байта? куда делся четвёртый?
Чем кейсы не устроили? Если адрес постоянной длины, то без всяких поисков взять 3 (4) байта и по кейсу дальше. Из порта логично вычитать всё, а дальше можно разбить строку на массив по 7 (8) байт и всё в цикле.
str.png
str.png (18.61 KiB) Viewed 345 times
Artem.spb
expert
expert
 
Posts: 1401
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 239
CLD hardware I/O VIP freelance

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

Postby Валерон on 26 Sep 2018, 14:49

Может я непонятно рассказал или вы меня не так поняли. Попробую еще раз. И так, поступает информация например 8 байтов. Полная информация содержится в 32-х битах. Слова 32-х разрядные, то значит поступило 2 слова (8 байт = 64 бит/32 бита = 2 слова). Если пришло 16 байтов, то значит пришло 4 слова. В каждом слове младшие 3 бита!!! это его адрес, в соответствие с которым свой алгоритм обработки. Если бы слова приходили в одинаковом количестве и порядке, вопросов бы не было. А так как слова приходят в разном порядке и в разном количестве - это поставило меня в тупик. В своем примере я 32-х разрядные числа перевел в строку и впереди присвоил строковый идентификатор (который можно присвоить в соответствии с определенным адресом), чтобы потом выбирать определенное слово из любого места в строке. Ну и дальше обрабатывать.
Валерон
beginner
beginner
 
Posts: 16
Joined: 28 May 2017, 17:20
LabVIEW Version: 14.0
Karma: 0

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

Postby Artem.spb on 26 Sep 2018, 16:17

Вопрос-то в чём?
Если пакет 32 бита, разделите посылку на пакеты, а дальше циклом. Будет не "подстрока", а "три бита". суть не меняется.
u32.PNG
Artem.spb
expert
expert
 
Posts: 1401
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 239
CLD hardware I/O VIP freelance

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

Postby Blackman on 26 Sep 2018, 16:25

:wink:
Attachments
Sort Array by Address.PNG
Blackman
leader
leader
 
Posts: 783
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 225
VIP

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

Postby Валерон on 26 Sep 2018, 17:26

Спасибо за примеры, но по картинкам мне пока трудно судить. Надо пробовать в живую.
Валерон
beginner
beginner
 
Posts: 16
Joined: 28 May 2017, 17:20
LabVIEW Version: 14.0
Karma: 0

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

Postby Artem.spb on 26 Sep 2018, 17:56

Мой код оживлять придётся руками, код Blackman-а это snippet, который оживить гораздо проще
Artem.spb
expert
expert
 
Posts: 1401
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 239
CLD hardware I/O VIP freelance

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

Postby Валерон on 26 Sep 2018, 21:04

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

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

Postby Валерон on 27 Sep 2018, 08:10

Пардон! Пример Blackman-а может и подойдет.
Валерон
beginner
beginner
 
Posts: 16
Joined: 28 May 2017, 17:20
LabVIEW Version: 14.0
Karma: 0

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

Postby Валерон on 27 Sep 2018, 20:13

Проверил пример Blackman-а, то что надо. Но не могу разобраться. Засунул его в цикл, данные не обновляются. Смотрел в отладке, такое ощущение что данные не выходят из For Loop. Прогонял пример отдельно, все отлично, а в While Loop не идет. Подскажите чайнику!
Валерон
beginner
beginner
 
Posts: 16
Joined: 28 May 2017, 17:20
LabVIEW Version: 14.0
Karma: 0


Return to Для чайников

Who is online

Users browsing this forum: Bing [Bot] and 10 guests

cron