Советы по программированию на LabVIEW

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

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Kosist »

"Распределить" контроллы/индикаторыо одного кластера по разным табам не получится...
Мы делили апельсин - много наших полегло...
Аватара пользователя
Juri
I/O
I/O
Сообщения: 263
Зарегистрирован: 19 апр 2017, 23:06
Версия LabVIEW: 2021
Благодарил (а): 13 раз
Поблагодарили: 6 раз

Re: Советы по программированию на LabVIEW

Сообщение Juri »

Для каждой вкладки создайте отдельный кластер и поместите все кластеры в кластер
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Kosist »

Usss, а зачем все кластеры в кластер потом? Ведь работать нужно будет все равно с каждым кластером по-отдельности? Тем более, что если кластеры на табах одинаковые, то со всеми можно работать при помощи ссылок...
Мы делили апельсин - много наших полегло...
Artem.spb

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

Re: Советы по программированию на LabVIEW

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

Kosist писал(а):Usss, а зачем все кластеры в кластер потом? Ведь работать нужно будет все равно с каждым кластером по-отдельности? Тем более, что если кластеры на табах одинаковые, то со всеми можно работать при помощи ссылок...
бросайте привычку работать через ссылки, и уж тем более не стоит их всем советовать :)
Свойства менять - да, но значения записывать - только в крайнем случае. Это на 2-3 порядка замедляет программу.
на лв16 этот тест выдаёт 1400-1500, на лв 15 замедление "всего" в 500 раз
speed.PNG
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение Kosist »

Artem.spb, скорость имеет значение при большой частоте обновления данных. А если данные обновляются например раз в секунду, задержка не будет чувствоваться. И нужно иметь ввиду, что обновления юзер-интерфейса желательно делать в отдельном цикле,чтобы не тормозить цикл который эти самые данные откуда-то берет. Само собой, будь там график я бы не советовал писать данные через Property Node. Но обычные индикаторы... Скажем так: обновлять индикаторы числовыми значениями чаще секунды - занятие сомнительное, т.к. значение будут мелькать перед глазами как огоньки на гирлянде.
Но все зависит и от архитектуры, и стиля в целом. Я например вижу больше проблем в локальных переменных с точки зрения повторного использования кода. А в целом - особенно если на всех табах будет одинаковый кластер - я бы в таб поместил subpanel, и отображал там виайку который бы посылал данные; чтобы не дублировать код.
Мы делили апельсин - много наших полегло...
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение taras_33 »

Вставлю свои 5 копеек. Ну не знаю... Используя Actor Framework, я с трудом представляю как можно обойтись без property node. Никто не спорит, что обновлять напрямую быстрее. Но вот к примеру реальный проект на cDAQ, два монитора, имеет 34 Ai канала и ВСЕ! до единого обновляются через property node каждые 100 mS, т.е. 10 раз в секунду. Я даже больше скажу, на втором мониторе Chart имеет четыре плота, за одну интерацию каждый добавляет по 2500 точек, и который обновляется с той же частотой 10 Гц, и через теже property node. И проблем с задержками я не наблюдаю. Загрузка процессора около 5%​
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Artem.spb

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

Re: Советы по программированию на LabVIEW

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

Kosist писал(а):Я например вижу больше проблем в локальных переменных с точки зрения повторного использования кода.
UI в большинстве случаев - сомнительная штука с точки зрения повторного использования кода.
Даже если контролы обновляются раз в секунду, а на экране их 150 штук - будут проблемы с производительностью.
У меня в паре проектов возникли были проблемы. В первом я это не связал с PN, а во втором тест провёл и всё стало очевидно.
Artem.spb

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

Re: Советы по программированию на LabVIEW

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

taras_33 писал(а):Используя Actor Framework, я с трудом представляю как можно обойтись без property node. ​
вообще никаких проблем, я обошёлся :)
Через UE отправляю в core нужные данные, а там они уже рисуются прямо она терминалы.
Но вот к примеру реальный проект на cDAQ, ....И проблем с задержками я не наблюдаю. Загрузка процессора около 5%
я бы хотел узнать секрет этой магии. Проц мало что показывает, блокировки UI на нём не отражаются. А вот тормоза реальные наблюдаются. Повторю, у меня была пара проектов, кто возникли проблемы с отображением через ссылки.
Каналов было побольше 30, и окон с индикаторами тем более в разы больше, может, дело было в этом. Но с тех пор я избегаю записывать значения через свойства. Исключение - запись значения вместе с другими настройками. Если уж дёргаю интерфейс, то, чтоб два раза не вставать, сразу и значение пихаю.
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение taras_33 »

Вот снял видео и прямо с телефона на youtube, поэтому качество ужасное. Но проценты загрузки видны. Для демонстрации скорости сбора, я синусоиду 400 Гц вывожу на scope и на chart.


Через UE отправляю в core нужные данные, а там они уже рисуются прямо она терминалы

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

я бы хотел узнать секрет этой магии

Так нету никакой магии, просто все разнесено - каждая задача, scope, chart, индикаторы, вычисления UI и тд все по отдельности, каждый в своем потоке.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Artem.spb

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

Re: Советы по программированию на LabVIEW

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

taras_33 писал(а):Вот снял видео и прямо с телефона на youtube, поэтому качество ужасное. Но проценты загрузки видны. Для демонстрации скорости сбора, я синусоиду 400 Гц вывожу на scope и на chart.
Качество вполне, магия прям.
Нужно будет попробовать, хотя я придерживаюсь чтобы в event structure ничего кроме реакций на действия юзера небыло.
Два цикла - один ловит действия пользователя (и как ни странно - отправляет сообщения сам себе), а второй - только отображением занимается. Т.к. вычислений в нём нет, то и задержки минимальные
Так нету никакой магии, просто все разнесено - каждая задача, scope, chart, индикаторы, вычисления UI и тд все по отдельности, каждый в своем потоке.
Разноси-не разноси, а вся интерморда будет в UI, нельзя же её запрятать в "I/O".
Или если запрятать ссылочного писателя в не-UI оно быстрее работает?
rsv
advanced
advanced
Сообщения: 170
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 33 раза
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение rsv »

Доброго времени суток.
Столкнулся с такой проблемой - после изменения радиокнопок (в свойство Label прописал коды) в кластере, который TypeDef в одном модуле возникает ошибка "You have two or more enumeration data types wired together, but the enumerations are different. The list of items in the enumerations must be exactly the same." Как я понимаю, ругается на то, что радиокнопки стали разные.
Во всех используемых панелях для данного кластера стоит "Auto-update Fron Type Def". Свойство Label тоже проверил - обновилось везде.
Может есть какая-то хитрость в изменении радиокнопок в кластере и TypeDef?
Вложения
Радиокнопки.JPG
Радиокнопки.JPG (9.31 КБ) 4669 просмотров
Свойство_1.JPG
Свойство_2.JPG
Artem.spb

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

Re: Советы по программированию на LabVIEW

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

Иногда такие неизлечимые глюки лечатся только заменой куска на него же.
Попробуйте копипастом заменить глюкнувший контрол
rsv
advanced
advanced
Сообщения: 170
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 33 раза
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение rsv »

Большое спасибо, Artem.spb.
Вырезал из TypeDef, сохранил, закрыл, открыл, вставил, сохранил, закрыл. И заработало.
rsv
advanced
advanced
Сообщения: 170
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 33 раза
Контактная информация:

Re: Советы по программированию на LabVIEW

Сообщение rsv »

Рано радовался...
Теперь глюки начались с контролами, следующим за глючным из предыдущего поста. Причём в TypeDef всё правильно, а в модулях, использующих этот кластер, произошли изменения. Такое ощущение, что нарушились какие-то внутренние ссылки, которые сама :labview: использует.
В свойствах видно, что наименования контролов (label) сдвинулись вниз на 1.
Жесть... :shok:
Вложения
Так было и так есть в TypeDef
Так было и так есть в TypeDef
Правильные контролы (TypeDef).JPG (14.21 КБ) 4621 просмотр
А так стало в модулях, использующих этот TypeDef
А так стало в модулях, использующих этот TypeDef
Глючные контролы.JPG (15.11 КБ) 4621 просмотр
Artem.spb

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

Re: Советы по программированию на LabVIEW

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

rsv писал(а): 30 апр 2020, 11:54 Вырезал из TypeDef, ...
может, проблема в этом?
после вырезания всё, что осталось сдвинулось вверх. Новый вставленный элемент стал последним, и неважно, что вы его на самый верх сдвинули. Надо индексацию менять ("reorder control in cluster..")
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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