Скорость записи значений в индикаторы.

Простейшие вопросы в области инженерной разработки
Ответить
Sergey Puzanov
assistant
assistant
Сообщения: 118
Зарегистрирован: 05 ноя 2020, 08:26
Версия LabVIEW: 18, 20.0f1
Благодарил (а): 23 раза
Поблагодарили: 4 раза
Контактная информация:

Скорость записи значений в индикаторы.

Сообщение Sergey Puzanov »

В одной из тем ( viewtopic.php?f=21&t=10685&p=85436#p85436 ) пытались разобраться, как в цикле записывать значения в индикаторы, идущие по порядку. В итоге пришёл к двум вариантам решения (через массив ссылок для слайдеров и через обычный кластер для цифровых полей), но в паре они работают достаточно долго по сравнению со скоростью прихода пакетов по UDP, отображение происходит с частотой примерно 10 Гц, и это при нынешних 83*2 индикаторах, которых может быть и больше. Собственно вопрос, можно ли ускорить процесс записи и отображения?
Screenshot_1.png
Вложения
CLIENT_UOTP_UDP8.vi
LabView 2018
(103.21 КБ) 61 скачивание
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Скорость записи значений в индикаторы.

Сообщение Borjomy_1 »

Попробовать перед записью в контролы отключать обновление панели (свойство Defer Panel Updates), а потом включать.
Sergey Puzanov
assistant
assistant
Сообщения: 118
Зарегистрирован: 05 ноя 2020, 08:26
Версия LabVIEW: 18, 20.0f1
Благодарил (а): 23 раза
Поблагодарили: 4 раза
Контактная информация:

Re: Скорость записи значений в индикаторы.

Сообщение Sergey Puzanov »

Borjomy_1 писал(а): 17 май 2021, 16:18 Попробовать перед записью в контролы отключать обновление панели (свойство Defer Panel Updates), а потом включать.
Попробовал, никакой разницы не появилось
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Скорость записи значений в индикаторы.

Сообщение Andrew Lunev »

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

Если хотите именно через узлы свойств обновлять индикаторы, то можно обновлять только те индикаторы, которые сейчас видны. Если индикаторы будут на разных вкладках, то можно считывать текущую активную вкладку и обновлять только на ней индикаторы.

Ну и обновлять индикаторы на экране даже с частотой 10 Гц это много, а уж чаще совсем странно. Какой человек сможет за это время прочитать значения и проанализировать? Мне кажется и 1-5 Гц вполне достаточно. Наоборот, частое обновление индикатора мешает прочитать текущее значение и дает лишнюю нагрузку на глаза и мозг.
Запись в файл или анализ данных можно делать в отдельном цикле с той частотой, которая требуется.
Sergey Puzanov
assistant
assistant
Сообщения: 118
Зарегистрирован: 05 ноя 2020, 08:26
Версия LabVIEW: 18, 20.0f1
Благодарил (а): 23 раза
Поблагодарили: 4 раза
Контактная информация:

Re: Скорость записи значений в индикаторы.

Сообщение Sergey Puzanov »

Andrew Lunev писал(а): 17 май 2021, 17:22 Поэтому может быть заменить множество индикаторов на массивы или кластеры и писать в них напрямую.
У меня отображение на множестве вкладок, по ~10 индикаторов на каждой, короче не получится в одном кластере это всё отображать.
Andrew Lunev писал(а): 17 май 2021, 17:22 Если хотите именно через узлы свойств обновлять индикаторы, то можно обновлять только те индикаторы, которые сейчас видны. Если индикаторы будут на разных вкладках, то можно считывать текущую активную вкладку и обновлять только на ней индикаторы.
Это уже как вариант, спасибо, попробуем.
Andrew Lunev писал(а): 17 май 2021, 17:22 Ну и обновлять индикаторы на экране даже с частотой 10 Гц это много, а уж чаще совсем странно.
Я к тому, что по сравнению со скоростью UDP, 10 Гц это очень медленно, а так конечно, будет ещё меньшая частота для отображения.

P.S. Не знаю, с чем это связано, но пока всё это тестилось на одном ПК, и сервер и клиент. При передаче на другой комп скорость отображения заметно возросла.

P.P.S. Возникла ещё одна идея обхода индикаторов, это обращение к ним по их Lable'ам, возможно же через тот же case обходить по именам?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Скорость записи значений в индикаторы.

Сообщение IvanLis »

Sergey Puzanov писал(а): 18 май 2021, 10:55 У меня отображение на множестве вкладок, по ~10 индикаторов на каждой, короче не получится в одном кластере это всё отображать.
Вам нужно пересмотреть архитектуру приложения.
1. Отказаться от ссылок, а писать данные непосредственно в контрол.
2. Обновлять только те индикаторы, которые отображаются пользователю.

Я так гонял 320 Гц без проблем.

Набросал пример, возможно выглядит массивно, но легко читается и масштабируется.
Я инициализировал UserEvent одинаковыми кластерами, можно сделать разные типы данных, но это возни больше. Ну и вкладок 5, а не 10, но результат будет аналогичный.
Данные отображаются нормально и на 1кГ с timeout 1ms.
Но что бы очередь не накапливалась, я ее еще и очищаю, реальной необходимости нет пользователю данные с опозданием отображать.
Если данные идут в накопление, то такого делать естественно нельзя. :wink:
Untitled 1.vi
lv2016
(43.59 КБ) 64 скачивания
1.png
Artem.spb

Activity Автор
professor
professor
Сообщения: 3403
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Скорость записи значений в индикаторы.

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

Sergey Puzanov писал(а): 18 май 2021, 10:55 У меня отображение на множестве вкладок, по ~10 индикаторов на каждой, короче не получится в одном кластере это всё отображать.
ну как минимум можно сделать кластеры по 10 штук :)
А как максимум, что мешает все "сотни" терминалов руками записывать? пришёл массив/кластер данных - разобрать его руками и в терминалы записать. Да, делать долго, но не всё же автоматом :)
Хотя, вот пример утверждения "лень - двигатель прогресса"

P.P.S. Возникла ещё одна идея обхода индикаторов, это обращение к ним по их Lable'ам, возможно же через тот же case обходить по именам?
Если искать Lable через свойства, то это те же будущие цыплята, только в профиль.
Ответить

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