Как вы работаете с множественным Disable/Enable

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Как вы работаете с множественным Disable/Enable

Сообщение Konstantin Sumenko »

Сравнительный вопрос. Иногда, при сложной иерархии программы требуются множественные и/или замысловатые
ф-ии отключения контролов/индикаторов/меню и т.п. (Disable/Enable), посему вопрос, кто как осуществляет данные операции; через огромное кол-во свойств, через ссылки (reference) или кластеры/массивы ссылок и т.д?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение Eugen Graf »

А что такого замысловатого? Общий кластер с настройками передаётся во все приборы имеющие ЛП. При старте передаёшь этот кластер и после показываешь ЛП.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение Konstantin Sumenko »

Ничего замысловатого нет, способы решения разные :D
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение mzu2006 »

Большой кластер со ссылками на объекты лицевой панели приложения верхнего уровня
Аватара пользователя
Chupakabra

Tutorials
professional
professional
Сообщения: 360
Зарегистрирован: 21 янв 2009, 10:50
Награды: 1
Версия LabVIEW: 2015
Откуда: Москва
Поблагодарили: 4 раза
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение Chupakabra »

Когда не было сегментной трубы в LV DSC , приходилось кучу сегментов по отдельности программировать (цвет и состояние). Для этого объединял для всех сегментов законченного участка трубы reference в массивы референсов. и работал по-массивно.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение Atom »

Вот решил поэкспериментировать.
Всегда, когда работал с большим количеством однотипных элементов, создавал на каждый свойство и записывал в них значения через "Кадры". Сейчас решил сделать это через массив ссылок. И вот какая незадача - вроде программа становится меньше по обьему, а работает в 10 раз медленнее.

1. Вот так через кадры (время выполнения от 2 до 4 мс).
через кадры.png
через кадры.png (10.01 КБ) 9979 просмотров
2. Через ссылки (время выполнения от 39 до 46 мс).
через ссылки.png
через ссылки.png (9.11 КБ) 9979 просмотров
Не подскажете в чем тут дело?

Исходник прилагаю
Сравнение скорости работы.vi
(60.4 КБ) 250 скачиваний
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение AndreyDmitriev »

Atom писал(а):Вот решил поэкспериментировать.
Всегда, когда работал с большим количеством однотипных элементов, создавал на каждый свойство и записывал в них значения через "Кадры". Сейчас решил сделать это через массив ссылок. И вот какая незадача - вроде программа становится меньше по обьему, а работает в 10 раз медленнее.

Не подскажете в чем тут дело?
Это скорее всего оттого, что во втором случае LabVIEW 64 раза переключается в UI поток, а в первом случае оптимизатор понимает, что достаточно переключиться только один раз

Вот как можно это обойти:
Вложения
defer.png
Аватара пользователя
mark
beginner
beginner
Сообщения: 39
Зарегистрирован: 18 ноя 2010, 21:35
Версия LabVIEW: 2015

Re: Как вы работаете с множественным Disable/Enable

Сообщение mark »

Я делал так:
Все референсы на элементы управления (строковые, булевые и т.д.) переводил к более общему классу, из всех создавал массив. И затем в нужном месте вызывал :vi: , который брал в себя этот массив и соответствующий ему массив булевых констант - enable/disable. Сам :vi: пробегал циклом по всем референсам и делал свое дело. Единственный минус - нужно создавать массив булевых констант для каждого режима. Но это может сделать отдельная программа, которая берет на вход тайпдеф режимов работы, а на выходе имеет этот булевый массив.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение Eugen Graf »

Немного не по теме, но почему бы не объединить 64 элемента в массив или кластер и дисейблить всё в одном? Я конечно понимаю, что это эксперимент, но мне кажется он немного бессмысленный. Ну а за Defer Panel Updates Андрею спасибо. Я всё точно не знал как его использовать, оказывается его нужно только на некоторое время отключать, а потом обратно включать.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение Atom »

AndreyDmitriev писал(а):
Вот как можно это обойти:
Это просто фантастика!!!! :crazy: :crazy: :crazy: Теперь все тормоза сняты, программа стала летать. :drink:

Спасибо огромное!!! :drink:
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение Atom »

eg писал(а):Немного не по теме, но почему бы не объединить 64 элемента в массив или кластер и дисейблить всё в одном? Я конечно понимаю, что это эксперимент, но мне кажется он немного бессмысленный.
Дело в том ,что не так все просто. Это же только эксперимент, а в программе необходима не только одновременное выключение всех элеменов , но и выключение и работа их по отдельности, а на FP еще и перемещение каждого отдельного элемента в зависимости от размеров окна :crazy:
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Как вы работаете с множественным Disable/Enable

Сообщение mzu2006 »

Atom писал(а):но и выключение и работа их по отдельности
Я бы описал набор состояний, сделал бы enum - состояние передней панели, и sub :vi: , которая бы говорила, что нужно сделать при переходе к нужному состоянию (просто case структура, на выходе - boolean массив visible, например). Что-то наподобие вот такого:
MultiDisable.png
MultiDisable.png (5.41 КБ) 9922 просмотра
Ответить

Вернуться в «Модели программирования»