Использование Typedef в LabVIEW

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

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

Использование Typedef в LabVIEW

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

Одной из очень интерессных фичей имеющихся в LabVIEW является Typedef.

Где это применить?
Если вы используете какой либо элемент (будь то контрол, индикатор или просто константа) в нескольких местах программы, при этом вы хотите например менять тип, свойства или содержание этого элемента только в одном месте и чтобы изменения повлияли на элементы сразу во всех местах программы, где этот элемент используется.

Я часто использую Typedef в своих программах, потому что это очень удобно.
Сейчас мы посмотрим на примере как можно использовать Typedef на примере показаном в этой теме:
/viewtopic.php?f=23&t=153

Для начала скачайте оттуда вложеный прибор или смастерите сами такой же. Постарайтесь понять о чём там речь и как этот прибор работает.

Идея такая:
заменить строки "type 1" и "type 2" на Typedef-Enumerator.

Зачем?
Чтобы можно было использовать этот элемент в обоих потоках, оставляя за собой возможность изменять названия на другие, а так же с лёгкостью добавлять новые типы данных, например "type 3".
Аватара пользователя
Eugen Graf

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

Использование Typedef в LabVIEW

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

Приступаем:
создаём на лицевой панели контрол типа Enum
EnumPalette.PNG
Выбираем в меню Advanced->Customize
CustomizeMenue.PNG
CustomizeMenue.PNG (11.15 КБ) 17879 просмотров
В новом открытом окне выбираем Typedef и сохраняем этот контрол под названием например "Command.ctl"
Теперь внесём наши две команды "type 1" и "type 2" в список энюмератора. Нажимаем правой кнопкой мыши на контрол и выбираем из меню "Edit Items..."
EditItemsMenue.PNG
В открытом диалоговом окне вписываем наши две команды.
EditItemsDlg.PNG
И сохраняем наш Typedef-Control.
Аватара пользователя
Eugen Graf

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

Re: Использование Typedef в LabVIEW

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

Теперь приступаем к применению его в нашей программе.

Для начала уберём контрол находящийся на данный момент в блок диаграмме и на лицевой панели нашей основной программы. Он нам не понадобится, зато понадобится константа нами созданного Typedef.

Заменяем использованные в нашей программе строки "type 1" и "type 2" на созданый только что Typedef. Для этого нажимаем правой кнопкой мыши на строковую константу выбираем из меню Replace->Select A VI..
ReplaceMenue.PNG
Заменяем наши константы в трёх местах программы, что бы получилось вот так
Type1.PNG
Type2.PNG
Аватара пользователя
Eugen Graf

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

Re: Использование Typedef в LabVIEW

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

Теперь можете убедится в работоспособности программы, а так же попробуйте внести в список ещё одну команду, ну или поменяйте название в списке комманд например с "type 1" на "stop" например. Заметьте что при этом название меняется во всех местах программы и даже что очень очень интересно - автоматически меняется название свитч-кейса в нижнем цикле.
Main.vi
(19.38 КБ) 559 скачиваний
Command.ctl
(4.43 КБ) 540 скачиваний
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Использование Typedef в LabVIEW

Сообщение crashwork »

А можно все вышенаписанное применить, например, к numeric control и таким образом менять обычную числовую константу?
Аватара пользователя
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: Использование Typedef в LabVIEW

Сообщение mzu2006 »

crashwork писал(а):А можно все вышенаписанное применить, например, к numeric control и таким образом менять обычную числовую константу?
Т.е. сделать так, чтобы меняешь константу в одном месте и она менялась бы во всех сразу?
НЯЗ, нет. Разве что через typedef и ring. Но в случае с ring не будет меняться селектор case структуры.
Аватара пользователя
crashwork

Activity Silver
adviser
adviser
Сообщения: 205
Зарегистрирован: 17 фев 2009, 19:57
Награды: 2
Версия LabVIEW: 8.5, 9.0
Откуда: Украина. Кременчуг
Контактная информация:

Re: Использование Typedef в LabVIEW

Сообщение crashwork »

mzu2006 писал(а):
crashwork писал(а):А можно все вышенаписанное применить, например, к numeric control и таким образом менять обычную числовую константу?
Т.е. сделать так, чтобы меняешь константу в одном месте и она менялась бы во всех сразу?
НЯЗ, нет. Разве что через typedef и ring. Но в случае с ring не будет меняться селектор case структуры.
Спасибо, то то оно и не получилось.
Аватара пользователя
maxgod145

Activity
user
user
Сообщения: 87
Зарегистрирован: 28 окт 2008, 20:40
Награды: 1
Версия LabVIEW: 8,5;8.6
Откуда: Киев
Контактная информация:

Re: Использование Typedef в LabVIEW

Сообщение maxgod145 »

Да без энума сейчас проги тяжело представить, особенно если использовать стецт машину на базе очереди!
Аватара пользователя
Sergey Ivanov

Activity Professionalism Gold Автор
expert
expert
Сообщения: 1217
Зарегистрирован: 01 мар 2009, 20:54
Награды: 5
Версия LabVIEW: 2018
Откуда: Санкт-Петербург, Кронштадт
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Использование Typedef в LabVIEW

Сообщение Sergey Ivanov »

подскажите, пожалуйста, в данном примере осуществлена односторонняя передача данных, то есть из одного цикла в другой. а возможна ли двухсторонняя передача из 1цикла во 2 цикл и из 2 цикла в 1 цикл ?

или если 3 цикла, то из 1 в 2 и 3, из 2 в 1 и 3, из 3 в 1 и 2 ?

спасибо !
Добро пожаловать на http://rk-stud.ru/
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Использование Typedef в LabVIEW

Сообщение IvanLis »

Sergey Ivanov писал(а):подскажите, пожалуйста, в данном примере осуществлена односторонняя передача данных, то есть из одного цикла в другой. а возможна ли двухсторонняя передача из 1цикла во 2 цикл и из 2 цикла в 1 цикл ?

или если 3 цикла, то из 1 в 2 и 3, из 2 в 1 и 3, из 3 в 1 и 2 ?

спасибо !
Я передавал в очереди кластер, один из его элементов определял адресата.
В каждом цикле делал Preview Queue Element, если он предназначен этому циклу, то Dequeue Element.
Иначе он нам не предназначен и мы его пропускаем.
Только размер очереди посмотри какой нужен, чтобы и потерь не было и лишнего.

Ну и соответственно в цикле можно отправить послание одному из адресатов :D .
Можно самому себе послать на i итрерации, а на i+1 обработать.

Может это и не верно :dntknw: , а Академиях :labview: не изучал :wink:
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Использование Typedef в LabVIEW

Сообщение IvanLis »

Сделал пример.
Снимок.png
Queue.vi
lv2010
(27.63 КБ) 370 скачиваний
В лабораторных условиях работает не очень стабильно.
Но на сколько помню, в реальных все было нормально.
Аватара пользователя
Eugen Graf

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

Re: Использование Typedef в LabVIEW

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

Sergey Ivanov писал(а):подскажите, пожалуйста, в данном примере осуществлена односторонняя передача данных, то есть из одного цикла в другой. а возможна ли двухсторонняя передача из 1цикла во 2 цикл и из 2 цикла в 1 цикл ?

или если 3 цикла, то из 1 в 2 и 3, из 2 в 1 и 3, из 3 в 1 и 2 ?

спасибо !
Я использую массив очередей, каждому циклу предназначена своя очередь, адресация цикла происходит через номер очереди.
Аватара пользователя
Sergey Ivanov

Activity Professionalism Gold Автор
expert
expert
Сообщения: 1217
Зарегистрирован: 01 мар 2009, 20:54
Награды: 5
Версия LabVIEW: 2018
Откуда: Санкт-Петербург, Кронштадт
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Использование Typedef в LabVIEW

Сообщение Sergey Ivanov »

вот так сделал. работает, вроде как.
Безымянный.jpg
очередь.vi
(13.41 КБ) 362 скачивания
Добро пожаловать на http://rk-stud.ru/
Аватара пользователя
Sergey Ivanov

Activity Professionalism Gold Автор
expert
expert
Сообщения: 1217
Зарегистрирован: 01 мар 2009, 20:54
Награды: 5
Версия LabVIEW: 2018
Откуда: Санкт-Петербург, Кронштадт
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Использование Typedef в LabVIEW

Сообщение Sergey Ivanov »

вопросик такой, как сделть так, чтобы вычисление в верхнем цикле обновлялись с частотой 10 Гц ?

то есть один раз получаем число из нижнего цикла, а в верхнем прибавляем к этому (полученному внизу) новое число 10 раз
Безымянный.jpg
очередь.vi
(14.26 КБ) 356 скачиваний
Добро пожаловать на http://rk-stud.ru/
Аватара пользователя
Sergey Ivanov

Activity Professionalism Gold Автор
expert
expert
Сообщения: 1217
Зарегистрирован: 01 мар 2009, 20:54
Награды: 5
Версия LabVIEW: 2018
Откуда: Санкт-Петербург, Кронштадт
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Использование Typedef в LabVIEW

Сообщение Sergey Ivanov »

спасибо всем, разобрался

вот так будет работать
123.jpg
Добро пожаловать на http://rk-stud.ru/
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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