Вопрос по TabControl
-
- beginner
- Сообщения: 17
- Зарегистрирован: 02 июл 2020, 10:39
- Версия LabVIEW: 17
- Контактная информация:
Вопрос по TabControl
Всем привет!
Пишу программу, в которой будет несколько вкладок на лицевой панели. Мне нужно, чтобы при переключении между вкладками начинал выполняться код в них. В том числе, чтобы выводилась строка, содержащая подсказки для пользователя ("Помощь"). Проблема в том, при переключении на вторую вкладку ничего не происходит. Для наглядности у меня там (во второй вкладке) есть индикатор, ну и сама строка. Ни то ни другое не начинает работать при переключении TabControla, т.е. не выводится строка "установите переключатель "режим работы" в любое положение" и индикатор не загорается. Более того, пробовал ставить во второй вкладке кнопку, нажатие на которую зажигает индикатор. Тоже не работает.
Что я делаю не так?
Пишу программу, в которой будет несколько вкладок на лицевой панели. Мне нужно, чтобы при переключении между вкладками начинал выполняться код в них. В том числе, чтобы выводилась строка, содержащая подсказки для пользователя ("Помощь"). Проблема в том, при переключении на вторую вкладку ничего не происходит. Для наглядности у меня там (во второй вкладке) есть индикатор, ну и сама строка. Ни то ни другое не начинает работать при переключении TabControla, т.е. не выводится строка "установите переключатель "режим работы" в любое положение" и индикатор не загорается. Более того, пробовал ставить во второй вкладке кнопку, нажатие на которую зажигает индикатор. Тоже не работает.
Что я делаю не так?
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вопрос по TabControl
«Even Structure» является элементом обработки событий, поэтому всегда должен располагаться на активной странице. Опасно располагать «Even Structure» внутри «Case Structure».
Если «Case Structure» не активна, то и события не будут отрабатываться. А если переключение страницы произойдёт в момент обработки события, то произойдёт зависание программы.
Если «Case Structure» не активна, то и события не будут отрабатываться. А если переключение страницы произойдёт в момент обработки события, то произойдёт зависание программы.
- Favorit
- interested
- Сообщения: 4
- Зарегистрирован: 09 дек 2016, 19:22
- Версия LabVIEW: 8-15
- Контактная информация:
Re: Вопрос по TabControl
miklo писал(а): ↑03 авг 2020, 08:29 Всем привет!
Пишу программу, в которой будет несколько вкладок на лицевой панели. Мне нужно, чтобы при переключении между вкладками начинал выполняться код в них. В том числе, чтобы выводилась строка, содержащая подсказки для пользователя ("Помощь"). Проблема в том, при переключении на вторую вкладку ничего не происходит. Для наглядности у меня там (во второй вкладке) есть индикатор, ну и сама строка. Ни то ни другое не начинает работать при переключении TabControla, т.е. не выводится строка "установите переключатель "режим работы" в любое положение" и индикатор не загорается. Более того, пробовал ставить во второй вкладке кнопку, нажатие на которую зажигает индикатор. Тоже не работает.
Что я делаю не так?
-
- beginner
- Сообщения: 17
- Зарегистрирован: 02 июл 2020, 10:39
- Версия LabVIEW: 17
- Контактная информация:
Re: Вопрос по TabControl
Да, действительно, если исключить эвент-структуру, то таб контрол управляет кейсами как положено. Но мне нужно использовать эвенты в моей программе... Нужно ведь как-то отслеживать действия пользователя, нажатия на кнопки. Как же мне "подружить" таб контрол, управляющий кейсами, с эвент-структурами, входящими в кейсы?kiparym писал(а): ↑03 авг 2020, 12:19 «Even Structure» является элементом обработки событий, поэтому всегда должен располагаться на активной странице. Опасно располагать «Even Structure» внутри «Case Structure».
Если «Case Structure» не активна, то и события не будут отрабатываться. А если переключение страницы произойдёт в момент обработки события, то произойдёт зависание программы.
Favorit,
Не понимаю, как работает ваша идея :(
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вопрос по TabControl
Для каждой страницы формируйте таблицу истинности (http://www.labviewportal.org/viewtopic. ... 485#p83485) для «Control» расположенных на данной странице. Применяя «Enqueue Element» создаём очередь команд, которая исполняётся на параллельном цикле, при этом не забываем про сигнализацию при затяжных по времени команд.
Если не требуется контролировать комбинации нескольких «Control_N», то программу можно упростить:
p.s. Имя очереди произвольное. Stop отрабатывается как отдельная команда.
Последний раз редактировалось kiparym 07 авг 2020, 12:24, всего редактировалось 7 раз.
-
- beginner
- Сообщения: 17
- Зарегистрирован: 02 июл 2020, 10:39
- Версия LabVIEW: 17
- Контактная информация:
Re: Вопрос по TabControl
kiparym
Спасибо, буду пробовать.
Есть вопрос: что писать в строку Comand в блоке Obtain queue? В помощи сказано, что эта строка задает имя очереди. Оно может быть произвольным? Ведь у меня же в итоге должна получиться одна единственная очередь на всю программу?
Спасибо, буду пробовать.
Есть вопрос: что писать в строку Comand в блоке Obtain queue? В помощи сказано, что эта строка задает имя очереди. Оно может быть произвольным? Ведь у меня же в итоге должна получиться одна единственная очередь на всю программу?
-
- professor
- Сообщения: 3393
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Вопрос по TabControl
где ж вы нашли такой терминал?
может быть любым включая пустое.В помощи сказано, что эта строка задает имя очереди. Оно может быть произвольным?
тут два варианта: или один раз создать и везде протянуть провода.Ведь у меня же в итоге должна получиться одна единственная очередь на всю программу?
или создавать в разных местах с одним и тем же именем.
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вопрос по TabControl
В программах на параллельных циклах есть существенный недостаток:
при возникновении ошибки в одном цикле – нарушается нормальная работа всей программы и исправные циклы зависают.
Для решения этой проблемы, я предлагаю установить в конце каждого цикла принудительный выход. Второе предложение - отказаться от Shift по ошибкам, тогда каждый новый цикл начнётся с «чистого» листа, это поможет только при случайных ошибках. Необходим обработчик ошибок. Возможно, существуют более «красивые» решения?
при возникновении ошибки в одном цикле – нарушается нормальная работа всей программы и исправные циклы зависают.
Для решения этой проблемы, я предлагаю установить в конце каждого цикла принудительный выход. Второе предложение - отказаться от Shift по ошибкам, тогда каждый новый цикл начнётся с «чистого» листа, это поможет только при случайных ошибках. Необходим обработчик ошибок. Возможно, существуют более «красивые» решения?
-
- professor
- Сообщения: 3393
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Вопрос по TabControl
Для решения этой проблемы вы предлагаете создать другую проблему :)
Это очень и очень плохой вариант вообще, а особенно при работе с оборудованием. Если вы рубите программу от незначительной ошибки, то все выходы останутся как есть.
Этот вариант применяется в т.н. наступательном программировании, когда вы останавливаете проограмму при любой ошибке, но ТОЛЬКО при написании/отладке. В конечном релизе это должно отключаться автоматом. Такое "издевательство" над самим собой делается только с одной целью - чтобы было большое желание исправить ошибку, а не пропустить сообщение и тут же забыть о нём.
именно так. Эго вид и действия зависят в том числе и от релиза. Если это дебаг, то он должен материться как можно громче. Если это релиз, то максимум лог ошибок, ну и по возможности обходить/исправлять такие ситуации на ходу автоматом.Необходим обработчик ошибок.
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вопрос по TabControl
Схема построения программы с обработкой ошибок. Модуль «Stop_k.vi» обеспечивает принудительное завершение циклов.
-
- beginner
- Сообщения: 17
- Зарегистрирован: 02 июл 2020, 10:39
- Версия LabVIEW: 17
- Контактная информация:
Re: Вопрос по TabControl
Ну, в ЛабВью этот терминал называется "name", просто у Kiparym на скрине туда подходит строчная константа "comand".
Понятно, спасибоможет быть любым включая пустое.
-
- doctor
- Сообщения: 2210
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 26 раз
Re: Вопрос по TabControl
Нельзя таким образом глобальную переменную "стоп" инициализировать. Нет НИКАКОЙ гарантии, что она будет проинициализирована ПЕРЕД выполнением функций в циклах. Очередность сброса переменной и выполнение циклов должна быть обозначена ЯВНО.
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вопрос по TabControl
Правильно!Нельзя таким образом глобальную переменную "стоп" инициализировать.
Сброс глобальной «Стоп» должен (логично) располагаться в обработчике ошибок. Расположив сброс во внешнем цикле – я указал на необходимость проведение сброса. Предложенный вариант (не явно выражен) работоспособен! Транслятор LabView не начнёт обработку внутренних циклов, пока не закончит обработку локальных значений внешнего цикла.
-
- doctor
- Сообщения: 2210
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 26 раз
Re: Вопрос по TabControl
Это неправда. Я ЛИЧНО натыкался, на заре своего опыта, на то, что цикл может начать выполняться раньше, чем не связанные с ним вычисления. В том числе в подобной ситуации. Притом, что последовательность выполнения может меняться, в зависимости от того, в режиме отладки или скомпилированного приложения выполняется код. И первое правило программирования на LabView - это установление явных зависимостей последовательности выполнения кода.Транслятор LabView не начнёт обработку внутренних циклов, пока не закончит обработку локальных значений внешнего цикла.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 347 Просмотры
-
Последнее сообщение ujin1
-
- 7 Ответы
- 916 Просмотры
-
Последнее сообщение dadreamer
-
- 10 Ответы
- 761 Просмотры
-
Последнее сообщение Zloydj
-
- 14 Ответы
- 690 Просмотры
-
Последнее сообщение Vladimir_T