Event, While, Case и Timed

Простейшие вопросы в области инженерной разработки
Ответить
zorg25406
beginner
beginner
Сообщения: 15
Зарегистрирован: 12 апр 2016, 19:52
Версия LabVIEW: 11, 14
Благодарил (а): 1 раз
Контактная информация:

Event, While, Case и Timed

Сообщение zorg25406 »

Доброго времени суток. Стоит задача опроса 32 датчиков температуры, связанных по TCP (сервер-клиент) с компьютером через преобразователь RS-485 - LAN со своим протоколом обмена. В настоящее время могу делать стабильный опрос одного датчика (все 32 пока не пробовал) только однократно по нажатию кнопки с использованием Event Structure. Когда же пытаюсь реализовать постоянный опрос, начинается истерия циклов. Либо не останавливается внешний цикл, либо внутренний, либо вообще шляпу получаю в результате. На примере простого генератора чисел (по сути аналог моей ситуации с постоянным опросом) хочу разобраться раз и навсегда с циклами в labview. Ниже приведен пример того, что хочу реализовать:
1. Запускаю программу - жмем Run.
2. Налаживаем связь с устройством - жмем кнопку "Включение/Выключение". Кнопка переходит в состояние "Включено".
3. Запускаем опрос датчика температуры - жмем кнопку "Датчик Т1". Кнопка переходит в состояние "Включено".
4. Идет опрос датчика (генерация случайных чисел) с выводом один раз в секунду (для примера) полученного значения.
4. При повторном нажатии кнопки "Датчик Т1" цикл опроса конкретно этого датчика (генерации случайных чисел) должен остановится. Кнопка должна перейти в состояние "Выключено". При этом другие вкладки структуры Event Structure должны работать как и работали. Если снова нажать кнопку "Датчик Т1" опрос должен возобновиться. И так далее.
Как это реализовать теоретически понимаю, но по факту выходит не то, что должно. В приложенном примере при нажатии "Включение/Выключение" и "Датчик Т1" опрос запускается, но остановить я его не могу кнопками, только принудительно самим Labview. Если изменить Loop Condition внутри Timed Loop на выключение при "True" на входе, то опрос идет только по нажатию кнопки (однократно). Что мне надо поменять, подскажите. :help: :help: :help:
Пример.png
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Event, While, Case и Timed

Сообщение Borjomy_1 »

Нельзя цикл опроса датчика заводить в Event Node. В нем можно делать только управление другими циклами.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 174 раза
Контактная информация:

Re: Event, While, Case и Timed

Сообщение Artem.spb »

zorg25406 писал(а): 09 фев 2021, 21:28 4. При повторном нажатии кнопки "Датчик Т1" цикл опроса конкретно этого датчика (генерации случайных чисел) должен остановится.
При такой архитектуре он не остановится в принципе. Провод - это не ссылка на кнопку, это само значение в первый момент. И дальше оно "навечно" останется таким в этом проводе. Поэтому цикл будет работать вечно.
Более того, пока не остановится цикл (= никогда), остальные события не будут работать.
dataflow.PNG
Что мне надо поменять, подскажите.
Для начала надо поменять фундаментальное представление о LabVIEW :)
Не знаю, что у вас в других циклах, но судя по описанию что-то такое же. И если вы ожидаете, что все кейсы работают параллельно, то вы коренным образом заблуждаетесь.
Цикл он на то и цикл, что следующая итерация начнётся только после того, как полностью завершится предыдущая. Если нужно, чтобы несколько циклов работали параллельно, то и надо их располагать "параллельно", т.е. рядом, а не внутри другого цикла.
zorg25406
beginner
beginner
Сообщения: 15
Зарегистрирован: 12 апр 2016, 19:52
Версия LabVIEW: 11, 14
Благодарил (а): 1 раз
Контактная информация:

Re: Event, While, Case и Timed

Сообщение zorg25406 »

Artem.spb писал(а): 09 фев 2021, 22:41 Для начала надо поменять фундаментальное представление о LabVIEW :)
Я пока с TCP не начал работать, много чего не использовал и обходился более простыми и очевидными решениями. Я понимаю, что мне в данном случае лучше уйти от Event Structure, но при этом я не понимаю, как мне запускать по нажатию разных кнопок разные циклы опроса 32-х датчиков! При этом не отключаясь от сервера и, соответственно, не останавливая другие части кода. Пока я вижу, что нужно 32 Case в каждом из которых будет Timed Loop. Но опять же, как выйти из бесконечного опроса.. Можете простенький примерчик набросать? Ну или на пальцах объяснить хотя бы. Либо литературу подходящую. Хотя в принципе я несколько имеющихся в наличии книжек прочитал, подходящего не нашел.
zorg25406
beginner
beginner
Сообщения: 15
Зарегистрирован: 12 апр 2016, 19:52
Версия LabVIEW: 11, 14
Благодарил (а): 1 раз
Контактная информация:

Re: Event, While, Case и Timed

Сообщение zorg25406 »

Так, в принципе получился нижеприведенный вариант. Жду критики :suicide:
Единственно напрягает, что неудобно без Event Structure. До этого раскидывал разные фрагменты кода на разные кнопки, как мне этого хотелось. И подключение к устройствам производилась по нажатию на кнопку. А сейчас приходится перед запуском кода (Run) активировать кнопку для нормального запуска Case (в данном случае кнопка "Опрос") и только потом запускать код.
Рабочий вариант.png
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 174 раза
Контактная информация:

Re: Event, While, Case и Timed

Сообщение Artem.spb »

zorg25406 писал(а): 10 фев 2021, 06:52 как мне запускать по нажатию разных кнопок разные циклы опроса 32-х датчиков! При этом не отключаясь от сервера и, соответственно, не останавливая другие части кода.
Вот ту совершено непонятно, как идёт опрос, и что такое сервер.
И от этого зависит архитектура. Потому что если всё идёт с одного сервера, то это один цикл, если на каждый датчик отдельное соединение, то придётся делать 32 цикла.
А в целом изучите Producer/Consumer Architecture
zorg25406
beginner
beginner
Сообщения: 15
Зарегистрирован: 12 апр 2016, 19:52
Версия LabVIEW: 11, 14
Благодарил (а): 1 раз
Контактная информация:

Re: Event, While, Case и Timed

Сообщение zorg25406 »

Всего 32 датчика (16 приборов, каждый имеет два датчика). Связаны они по одной шине и информация от них поступает последовательно. Меняем в посылке адрес датчика (01, 02, 03 и т.д.). Я понимаю как делать опрос, выстраиваю очереди и т.д. Но получается слишком много циклов и условий, из-за чего и идет путаница. Я выше уже писал ведь алгоритм работы. Пока не надо смотреть на количество датчиков. Мне надо с циклами разобраться, как правильно запускать и выключать. Тот вариант примера, что я привел вроде бы рабочий. Но мне кажется есть что-то правильнее и оптимальнее
Artem.spb

Activity Автор
professor
professor
Сообщения: 3404
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 174 раза
Контактная информация:

Re: Event, While, Case и Timed

Сообщение Artem.spb »

zorg25406 писал(а): 11 фев 2021, 18:21 Но получается слишком много циклов и условий, из-за чего и идет путаница.
Именно это и не правильно.
Зачем много циклов? Если все сидят на одной шине, то опрашивать надо последовательно в одном цикле. Иначе посыпятся конфликты запросов-ответов.
Levashovea
beginner
beginner
Сообщения: 24
Зарегистрирован: 27 окт 2019, 21:21
Версия LabVIEW: 17,20,nxg5
Благодарил (а): 7 раз
Контактная информация:

Re: Event, While, Case и Timed

Сообщение Levashovea »

zorg25406 писал(а): 11 фев 2021, 18:21 Всего 32 датчика (16 приборов, каждый имеет два датчика). Связаны они по одной шине и информация от них поступает последовательно. Меняем в посылке адрес датчика (01, 02, 03 и т.д.). Я понимаю как делать опрос, выстраиваю очереди и т.д. Но получается слишком много циклов и условий, из-за чего и идет путаница. Я выше уже писал ведь алгоритм работы. Пока не надо смотреть на количество датчиков. Мне надо с циклами разобраться, как правильно запускать и выключать. Тот вариант примера, что я привел вроде бы рабочий. Но мне кажется есть что-то правильнее и оптимальнее
Я сделал так 9 приборов по 2 сенсора на каждом приборе
Схема рабочая, но не совсем правильная (делалась быстро, для эксперимента), идея думаю будет понятна.
опрос 9 датчиков.PNG
Аватара пользователя
IvanLis

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

Re: Event, While, Case и Timed

Сообщение IvanLis »

Вам же написали, что нужно уходить от множества циклов и структур.
Представьте, что Вам нужно сделать опрос 150 устройств, на каждом из которых разное количество датчиков от 3 до 10, а еще если и у каждого параметра своя схема преобразования.
Что Вы делать будете? Так в любом случае не нужно делать :wink: : viewtopic.php?f=35&t=10378
Особенно когда Вам потребуется сделать перезапрос или переподключение, с циклами вообще никак не получится, там все жестко.

Должно быть примерно так:
1.png
Здесь постоянно, по кругу датчики опрашиваются, а в массиве данные обновляются.
zorg25406
beginner
beginner
Сообщения: 15
Зарегистрирован: 12 апр 2016, 19:52
Версия LabVIEW: 11, 14
Благодарил (а): 1 раз
Контактная информация:

Re: Event, While, Case и Timed

Сообщение zorg25406 »

Спасибо всем за советы, дальше буду думать :think:
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»