Использование Typedef в LabVIEW
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Использование Typedef в LabVIEW
Одной из очень интерессных фичей имеющихся в LabVIEW является Typedef.
Где это применить?
Если вы используете какой либо элемент (будь то контрол, индикатор или просто константа) в нескольких местах программы, при этом вы хотите например менять тип, свойства или содержание этого элемента только в одном месте и чтобы изменения повлияли на элементы сразу во всех местах программы, где этот элемент используется.
Я часто использую Typedef в своих программах, потому что это очень удобно.
Сейчас мы посмотрим на примере как можно использовать Typedef на примере показаном в этой теме:
/viewtopic.php?f=23&t=153
Для начала скачайте оттуда вложеный прибор или смастерите сами такой же. Постарайтесь понять о чём там речь и как этот прибор работает.
Идея такая:
заменить строки "type 1" и "type 2" на Typedef-Enumerator.
Зачем?
Чтобы можно было использовать этот элемент в обоих потоках, оставляя за собой возможность изменять названия на другие, а так же с лёгкостью добавлять новые типы данных, например "type 3".
Где это применить?
Если вы используете какой либо элемент (будь то контрол, индикатор или просто константа) в нескольких местах программы, при этом вы хотите например менять тип, свойства или содержание этого элемента только в одном месте и чтобы изменения повлияли на элементы сразу во всех местах программы, где этот элемент используется.
Я часто использую Typedef в своих программах, потому что это очень удобно.
Сейчас мы посмотрим на примере как можно использовать Typedef на примере показаном в этой теме:
/viewtopic.php?f=23&t=153
Для начала скачайте оттуда вложеный прибор или смастерите сами такой же. Постарайтесь понять о чём там речь и как этот прибор работает.
Идея такая:
заменить строки "type 1" и "type 2" на Typedef-Enumerator.
Зачем?
Чтобы можно было использовать этот элемент в обоих потоках, оставляя за собой возможность изменять названия на другие, а так же с лёгкостью добавлять новые типы данных, например "type 3".
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Использование Typedef в LabVIEW
Приступаем:
создаём на лицевой панели контрол типа Enum Выбираем в меню Advanced->Customize В новом открытом окне выбираем Typedef и сохраняем этот контрол под названием например "Command.ctl"
Теперь внесём наши две команды "type 1" и "type 2" в список энюмератора. Нажимаем правой кнопкой мыши на контрол и выбираем из меню "Edit Items..." В открытом диалоговом окне вписываем наши две команды. И сохраняем наш Typedef-Control.
создаём на лицевой панели контрол типа Enum Выбираем в меню Advanced->Customize В новом открытом окне выбираем Typedef и сохраняем этот контрол под названием например "Command.ctl"
Теперь внесём наши две команды "type 1" и "type 2" в список энюмератора. Нажимаем правой кнопкой мыши на контрол и выбираем из меню "Edit Items..." В открытом диалоговом окне вписываем наши две команды. И сохраняем наш Typedef-Control.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Использование Typedef в LabVIEW
Теперь приступаем к применению его в нашей программе.
Для начала уберём контрол находящийся на данный момент в блок диаграмме и на лицевой панели нашей основной программы. Он нам не понадобится, зато понадобится константа нами созданного Typedef.
Заменяем использованные в нашей программе строки "type 1" и "type 2" на созданый только что Typedef. Для этого нажимаем правой кнопкой мыши на строковую константу выбираем из меню Replace->Select A VI.. Заменяем наши константы в трёх местах программы, что бы получилось вот так
Для начала уберём контрол находящийся на данный момент в блок диаграмме и на лицевой панели нашей основной программы. Он нам не понадобится, зато понадобится константа нами созданного Typedef.
Заменяем использованные в нашей программе строки "type 1" и "type 2" на созданый только что Typedef. Для этого нажимаем правой кнопкой мыши на строковую константу выбираем из меню Replace->Select A VI.. Заменяем наши константы в трёх местах программы, что бы получилось вот так
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Использование Typedef в LabVIEW
Теперь можете убедится в работоспособности программы, а так же попробуйте внести в список ещё одну команду, ну или поменяйте название в списке комманд например с "type 1" на "stop" например. Заметьте что при этом название меняется во всех местах программы и даже что очень очень интересно - автоматически меняется название свитч-кейса в нижнем цикле.
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Re: Использование Typedef в LabVIEW
А можно все вышенаписанное применить, например, к numeric control и таким образом менять обычную числовую константу?
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Использование Typedef в LabVIEW
Т.е. сделать так, чтобы меняешь константу в одном месте и она менялась бы во всех сразу?crashwork писал(а):А можно все вышенаписанное применить, например, к numeric control и таким образом менять обычную числовую константу?
НЯЗ, нет. Разве что через typedef и ring. Но в случае с ring не будет меняться селектор case структуры.
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
crashwork
- adviser
- Сообщения: 205
- Зарегистрирован: 17 фев 2009, 19:57
- Награды: 2
- Версия LabVIEW: 8.5, 9.0
- Откуда: Украина. Кременчуг
- Контактная информация:
Re: Использование Typedef в LabVIEW
Спасибо, то то оно и не получилось.mzu2006 писал(а):Т.е. сделать так, чтобы меняешь константу в одном месте и она менялась бы во всех сразу?crashwork писал(а):А можно все вышенаписанное применить, например, к numeric control и таким образом менять обычную числовую константу?
НЯЗ, нет. Разве что через typedef и ring. Но в случае с ring не будет меняться селектор case структуры.
-
maxgod145
- user
- Сообщения: 87
- Зарегистрирован: 28 окт 2008, 20:40
- Награды: 1
- Версия LabVIEW: 8,5;8.6
- Откуда: Киев
- Контактная информация:
Re: Использование Typedef в LabVIEW
Да без энума сейчас проги тяжело представить, особенно если использовать стецт машину на базе очереди!
-
Sergey Ivanov
- expert
- Сообщения: 1217
- Зарегистрирован: 01 мар 2009, 20:54
- Награды: 5
- Версия LabVIEW: 2018
- Откуда: Санкт-Петербург, Кронштадт
- Благодарил (а): 11 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Использование Typedef в LabVIEW
подскажите, пожалуйста, в данном примере осуществлена односторонняя передача данных, то есть из одного цикла в другой. а возможна ли двухсторонняя передача из 1цикла во 2 цикл и из 2 цикла в 1 цикл ?
или если 3 цикла, то из 1 в 2 и 3, из 2 в 1 и 3, из 3 в 1 и 2 ?
спасибо !
или если 3 цикла, то из 1 в 2 и 3, из 2 в 1 и 3, из 3 в 1 и 2 ?
спасибо !
Добро пожаловать на http://rk-stud.ru/
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Использование Typedef в LabVIEW
Я передавал в очереди кластер, один из его элементов определял адресата.Sergey Ivanov писал(а):подскажите, пожалуйста, в данном примере осуществлена односторонняя передача данных, то есть из одного цикла в другой. а возможна ли двухсторонняя передача из 1цикла во 2 цикл и из 2 цикла в 1 цикл ?
или если 3 цикла, то из 1 в 2 и 3, из 2 в 1 и 3, из 3 в 1 и 2 ?
спасибо !
В каждом цикле делал Preview Queue Element, если он предназначен этому циклу, то Dequeue Element.
Иначе он нам не предназначен и мы его пропускаем.
Только размер очереди посмотри какой нужен, чтобы и потерь не было и лишнего.
Ну и соответственно в цикле можно отправить послание одному из адресатов .
Можно самому себе послать на i итрерации, а на i+1 обработать.
Может это и не верно , а Академиях не изучал
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Использование Typedef в LabVIEW
Сделал пример.
Но на сколько помню, в реальных все было нормально.
В лабораторных условиях работает не очень стабильно.Но на сколько помню, в реальных все было нормально.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Использование Typedef в LabVIEW
Я использую массив очередей, каждому циклу предназначена своя очередь, адресация цикла происходит через номер очереди.Sergey Ivanov писал(а):подскажите, пожалуйста, в данном примере осуществлена односторонняя передача данных, то есть из одного цикла в другой. а возможна ли двухсторонняя передача из 1цикла во 2 цикл и из 2 цикла в 1 цикл ?
или если 3 цикла, то из 1 в 2 и 3, из 2 в 1 и 3, из 3 в 1 и 2 ?
спасибо !
-
Sergey Ivanov
- expert
- Сообщения: 1217
- Зарегистрирован: 01 мар 2009, 20:54
- Награды: 5
- Версия LabVIEW: 2018
- Откуда: Санкт-Петербург, Кронштадт
- Благодарил (а): 11 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Использование Typedef в LabVIEW
вот так сделал. работает, вроде как.
Добро пожаловать на http://rk-stud.ru/
-
Sergey Ivanov
- expert
- Сообщения: 1217
- Зарегистрирован: 01 мар 2009, 20:54
- Награды: 5
- Версия LabVIEW: 2018
- Откуда: Санкт-Петербург, Кронштадт
- Благодарил (а): 11 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Использование Typedef в LabVIEW
вопросик такой, как сделть так, чтобы вычисление в верхнем цикле обновлялись с частотой 10 Гц ?
то есть один раз получаем число из нижнего цикла, а в верхнем прибавляем к этому (полученному внизу) новое число 10 раз
то есть один раз получаем число из нижнего цикла, а в верхнем прибавляем к этому (полученному внизу) новое число 10 раз
Добро пожаловать на http://rk-stud.ru/
-
Sergey Ivanov
- expert
- Сообщения: 1217
- Зарегистрирован: 01 мар 2009, 20:54
- Награды: 5
- Версия LabVIEW: 2018
- Откуда: Санкт-Петербург, Кронштадт
- Благодарил (а): 11 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Использование Typedef в LabVIEW
спасибо всем, разобрался
вот так будет работать
вот так будет работать
Добро пожаловать на http://rk-stud.ru/
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 2078 Просмотры
-
Последнее сообщение PozhiloyGoblin
-
- 0 Ответы
- 348 Просмотры
-
Последнее сообщение maxim_MA
-
- 23 Ответы
- 2439 Просмотры
-
Последнее сообщение dadreamer
-
- 2 Ответы
- 392 Просмотры
-
Последнее сообщение ujin1
-
- 5 Ответы
- 848 Просмотры
-
Последнее сообщение dadreamer