Собственный элемент для размещения на фронтальной панеле

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

Собственный элемент для размещения на фронтальной панеле

Postby engineer_7 on 03 Aug 2017, 11:21

Добрый день! Подскажите, пожалуйста.

Есть несколько tabcontrol по две страницы. Каждую страницу нужно переключать в зависимости от нажатия кнопок. Сам код для переключения страниц очень маленький, но когда размещаешь в главной программе порядка 10 контролов, код получается плохо читаемым. Есть какой нибудь вариант реализовать что то вроде cluster'a в :labview: для подобных случаев, то есть создать свой элемент(в данном случае tabcontrol с двумя страницами, индикатором а так же кнопкой переключения), чтобы при добавлении в основую программу на front panel не загромождать все кодом элемента, а получать только свойства.
Attachments
codelm201.jpg
Тот самый код
lm201.jpg
А так выглядит элемент на front panel
engineer_7
beginner
beginner
 
Posts: 27
Joined: 20 Jul 2017, 12:35
LabVIEW Version: 14
Karma: 0

Re: Собственный элемент для размещения на фронтальной панеле

Postby Borjomy_1 on 03 Aug 2017, 12:44

Три варианта
1. вы создаете массив Refoв ваших табов (ПКМ на контроле->Create->Reference, далее обращаетесь к их свойствам по индексу
2. вы берете текущий список Refов на вашей панели и в них ищете нужный вам (например поиском по Label)
3. вы кидаете на прозрачный таб ваши маленькие табы и обращаетесь к текущему списку Refов на вкладке, в отличие от п.2 в этом списке будут только ваши табы и к ним можно обращаться по индексу.
Но первый контролировать лучше всего и неожиданностей (в виде подвисания из-за некорректного поиска в массивах) не будет
и да, динамически создать контрол и поместить его на переднюю панель штатными средствами нельзя.
Attachments
Методы доступа к множеству контролов.png
Borjomy_1
expert
expert
 
Posts: 1754
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

Re: Собственный элемент для размещения на фронтальной панеле

Postby engineer_7 on 03 Aug 2017, 16:26

Borjomy_1 wrote:Три варианта
1. вы создаете массив Refoв ваших табов (ПКМ на контроле->Create->Reference, далее обращаетесь к их свойствам по индексу
2. вы берете текущий список Refов на вашей панели и в них ищете нужный вам (например поиском по Label)
3. вы кидаете на прозрачный таб ваши маленькие табы и обращаетесь к текущему списку Refов на вкладке, в отличие от п.2 в этом списке будут только ваши табы и к ним можно обращаться по индексу.
Но первый контролировать лучше всего и неожиданностей (в виде подвисания из-за некорректного поиска в массивах) не будет
и да, динамически создать контрол и поместить его на переднюю панель штатными средствами нельзя.
Попробовал реализовать вашу идею но немного в другой форме, вместо создания массива ссылок создал кластер ссылок всех tabControl. После чего попытался через функцию unbundle by name по имени выбрать нужный ref, и через свойство value выбрать нужную page. Но во время выполнения этой части кода возникает ошибка "object reference is invalid". Не могу понять с чем это может быть связанно?
engineer_7
beginner
beginner
 
Posts: 27
Joined: 20 Jul 2017, 12:35
LabVIEW Version: 14
Karma: 0

Re: Собственный элемент для размещения на фронтальной панеле

Postby Artem.spb on 03 Aug 2017, 17:02

engineer_7 wrote:
Borjomy_1 wrote:ссылок создал кластер ссылок всех tabControl. После чего попытался через функцию unbundle by name по имени выбрать нужный ref, и через свойство value выбрать нужную page. Но во время выполнения этой части кода возникает ошибка "object reference is invalid". Не могу понять с чем это может быть связанно?

а как создаётся кластер?
Artem.spb
expert
expert
 
Posts: 1188
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 213
CLD hardware I/O VIP freelance

Re: Собственный элемент для размещения на фронтальной панеле

Postby engineer_7 on 04 Aug 2017, 10:25

В общем, вероятнее всего ошибки были с именами переменных в кластере, сейчас реализовал все в отдельной программе, все работает.
Attachments
temp12.jpg
Главный VI
temp13.jpg
Так выглядит подприбор куда мы отправляем команду управления
engineer_7
beginner
beginner
 
Posts: 27
Joined: 20 Jul 2017, 12:35
LabVIEW Version: 14
Karma: 0

Re: Собственный элемент для размещения на фронтальной панеле

Postby engineer_7 on 04 Aug 2017, 10:40

Но вот проблема, при добавлении такого же кода в мой проект, при нажатии на кнопку при выполнении команды смены значения индикатора, а так же страницы tabControl, выскакивает окно подприбора(того самого куда я отправляю значение из Enum), и открывшаяся программа ждет нажатия кнопки "Run" для продолжения, но после нажатия на данную кнопку, никаких изменений с моими элементами в главной программе не происходит. Какие причины могут быть данной ошибки?
engineer_7
beginner
beginner
 
Posts: 27
Joined: 20 Jul 2017, 12:35
LabVIEW Version: 14
Karma: 0

Re: Собственный элемент для размещения на фронтальной панеле

Postby Borjomy_1 on 04 Aug 2017, 13:02

Ну она скорее всего уже выполнилась один раз. Проверьте свойства VI Properties/Window Appearance/Show Front Panel When Called, если галка стоит, то при каждом вызове будет показываться это окно.
Borjomy_1
expert
expert
 
Posts: 1754
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

Re: Собственный элемент для размещения на фронтальной панеле

Postby engineer_7 on 04 Aug 2017, 15:11

Не выполняется, просто сразу открывается, и все, кликаешь "Run", срабатывает, после чего снова переходит в режим ожидания..
Attachments
temp44.jpg
temp44.jpg (9.91 KiB) Viewed 561 times
engineer_7
beginner
beginner
 
Posts: 27
Joined: 20 Jul 2017, 12:35
LabVIEW Version: 14
Karma: 0

Re: Собственный элемент для размещения на фронтальной панеле

Postby engineer_7 on 04 Aug 2017, 15:13

Borjomy_1 Сегодня, 14:02

Ну она скорее всего уже выполнилась один раз. Проверьте свойства VI Properties/Window Appearance/Show Front Panel When Called, если галка стоит, то при каждом вызове будет показываться это окно.


Свойства проверил, все установлено так, как вы написали.
engineer_7
beginner
beginner
 
Posts: 27
Joined: 20 Jul 2017, 12:35
LabVIEW Version: 14
Karma: 0

Re: Собственный элемент для размещения на фронтальной панеле

Postby Borjomy_1 on 04 Aug 2017, 15:19

Картинка означает, что VI находится в связке с работающими в данный момент другими VI и его нельзя редактировать.
Свойства проверил, все установлено так, как вы написали.
Как именно?
Borjomy_1
expert
expert
 
Posts: 1754
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

Re: Собственный элемент для размещения на фронтальной панеле

Postby engineer_7 on 04 Aug 2017, 15:26

Borjomy_1 wrote:Картинка означает, что VI находится в связке с работающими в данный момент другими VI и его нельзя редактировать.
Свойства проверил, все установлено так, как вы написали.
Как именно?
Attachments
winprop.jpg
engineer_7
beginner
beginner
 
Posts: 27
Joined: 20 Jul 2017, 12:35
LabVIEW Version: 14
Karma: 0

Re: Собственный элемент для размещения на фронтальной панеле

Postby engineer_7 on 04 Aug 2017, 17:04

Не знаю с чем была связанна ошибка, в общем создал точно такой же ВПП, и все заработало.
engineer_7
beginner
beginner
 
Posts: 27
Joined: 20 Jul 2017, 12:35
LabVIEW Version: 14
Karma: 0


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

Who is online

Users browsing this forum: Baidu, Yandex and 10 guests

cron