В одной из тем ( viewtopic.php?f=21&t=10685&p=85436#p85436 ) пытались разобраться, как в цикле записывать значения в индикаторы, идущие по порядку. В итоге пришёл к двум вариантам решения (через массив ссылок для слайдеров и через обычный кластер для цифровых полей), но в паре они работают достаточно долго по сравнению со скоростью прихода пакетов по UDP, отображение происходит с частотой примерно 10 Гц, и это при нынешних 83*2 индикаторах, которых может быть и больше. Собственно вопрос, можно ли ускорить процесс записи и отображения?
Скорость записи значений в индикаторы.
-
- assistant
- Сообщения: 118
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 4 раза
- Контактная информация:
Скорость записи значений в индикаторы.
- Вложения
-
- CLIENT_UOTP_UDP8.vi
- LabView 2018
- (103.21 КБ) 61 скачивание
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Скорость записи значений в индикаторы.
Попробовать перед записью в контролы отключать обновление панели (свойство Defer Panel Updates), а потом включать.
-
- assistant
- Сообщения: 118
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 4 раза
- Контактная информация:
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Скорость записи значений в индикаторы.
Какие я вижу варианты оптимизации кода. Насколько они подойдут вам я не знаю, так как задача дана в общем виде и нюансов я не знаю.
Конечно отображение через ссылки и узлы свойств будут многократно дольше, чем напрямую. Поэтому может быть заменить множество индикаторов на массивы или кластеры и писать в них напрямую.
Если хотите именно через узлы свойств обновлять индикаторы, то можно обновлять только те индикаторы, которые сейчас видны. Если индикаторы будут на разных вкладках, то можно считывать текущую активную вкладку и обновлять только на ней индикаторы.
Ну и обновлять индикаторы на экране даже с частотой 10 Гц это много, а уж чаще совсем странно. Какой человек сможет за это время прочитать значения и проанализировать? Мне кажется и 1-5 Гц вполне достаточно. Наоборот, частое обновление индикатора мешает прочитать текущее значение и дает лишнюю нагрузку на глаза и мозг.
Запись в файл или анализ данных можно делать в отдельном цикле с той частотой, которая требуется.
Конечно отображение через ссылки и узлы свойств будут многократно дольше, чем напрямую. Поэтому может быть заменить множество индикаторов на массивы или кластеры и писать в них напрямую.
Если хотите именно через узлы свойств обновлять индикаторы, то можно обновлять только те индикаторы, которые сейчас видны. Если индикаторы будут на разных вкладках, то можно считывать текущую активную вкладку и обновлять только на ней индикаторы.
Ну и обновлять индикаторы на экране даже с частотой 10 Гц это много, а уж чаще совсем странно. Какой человек сможет за это время прочитать значения и проанализировать? Мне кажется и 1-5 Гц вполне достаточно. Наоборот, частое обновление индикатора мешает прочитать текущее значение и дает лишнюю нагрузку на глаза и мозг.
Запись в файл или анализ данных можно делать в отдельном цикле с той частотой, которая требуется.
-
- assistant
- Сообщения: 118
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 4 раза
- Контактная информация:
Re: Скорость записи значений в индикаторы.
У меня отображение на множестве вкладок, по ~10 индикаторов на каждой, короче не получится в одном кластере это всё отображать.Andrew Lunev писал(а): ↑17 май 2021, 17:22 Поэтому может быть заменить множество индикаторов на массивы или кластеры и писать в них напрямую.
Это уже как вариант, спасибо, попробуем.Andrew Lunev писал(а): ↑17 май 2021, 17:22 Если хотите именно через узлы свойств обновлять индикаторы, то можно обновлять только те индикаторы, которые сейчас видны. Если индикаторы будут на разных вкладках, то можно считывать текущую активную вкладку и обновлять только на ней индикаторы.
Я к тому, что по сравнению со скоростью UDP, 10 Гц это очень медленно, а так конечно, будет ещё меньшая частота для отображения.Andrew Lunev писал(а): ↑17 май 2021, 17:22 Ну и обновлять индикаторы на экране даже с частотой 10 Гц это много, а уж чаще совсем странно.
P.S. Не знаю, с чем это связано, но пока всё это тестилось на одном ПК, и сервер и клиент. При передаче на другой комп скорость отображения заметно возросла.
P.P.S. Возникла ещё одна идея обхода индикаторов, это обращение к ним по их Lable'ам, возможно же через тот же case обходить по именам?
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Скорость записи значений в индикаторы.
Вам нужно пересмотреть архитектуру приложения.Sergey Puzanov писал(а): ↑18 май 2021, 10:55 У меня отображение на множестве вкладок, по ~10 индикаторов на каждой, короче не получится в одном кластере это всё отображать.
1. Отказаться от ссылок, а писать данные непосредственно в контрол.
2. Обновлять только те индикаторы, которые отображаются пользователю.
Я так гонял 320 Гц без проблем.
Набросал пример, возможно выглядит массивно, но легко читается и масштабируется.
Я инициализировал UserEvent одинаковыми кластерами, можно сделать разные типы данных, но это возни больше. Ну и вкладок 5, а не 10, но результат будет аналогичный.
Данные отображаются нормально и на 1кГ с timeout 1ms.
Но что бы очередь не накапливалась, я ее еще и очищаю, реальной необходимости нет пользователю данные с опозданием отображать.
Если данные идут в накопление, то такого делать естественно нельзя.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Скорость записи значений в индикаторы.
ну как минимум можно сделать кластеры по 10 штук :)Sergey Puzanov писал(а): ↑18 май 2021, 10:55 У меня отображение на множестве вкладок, по ~10 индикаторов на каждой, короче не получится в одном кластере это всё отображать.
А как максимум, что мешает все "сотни" терминалов руками записывать? пришёл массив/кластер данных - разобрать его руками и в терминалы записать. Да, делать долго, но не всё же автоматом :)
Хотя, вот пример утверждения "лень - двигатель прогресса"
Если искать Lable через свойства, то это те же будущие цыплята, только в профиль.P.P.S. Возникла ещё одна идея обхода индикаторов, это обращение к ним по их Lable'ам, возможно же через тот же case обходить по именам?