Здравствуйте!
Столкнулся с одной интересной проблемой(особенностью): у меня есть кластер, в котором вложено еще 3 кластера с разными переменными (рис.1). Мне нужно установить в эти переменные разные значения, для этого я использовал "Bundle By Name Function" и каждое значение вызывал отдельно, используя локальные переменные(рис.2). Делал я это, чтобы код выглядел нормально и можно было вписывать комменты. Но вот беда, выполняю каждую "Bundle By Name Function", она все кластеры сбивает в дефолтные значения, т.е. по завершению кода изменилось только значение, которое последним выполнило "Bundle By Name Function"... Я не понимаю, как такое может быть, ведь локальная переменная обращается к одному и тому же кластеру, т.е. кластер меняется с каждым вызовом и эти изменения должны сохраняться при следующих вызовах функции...
перепробовал я разные варианты, чтобы это исправить, но в итоге пришел к такому (рисунок 3). Да, работает, но выглядит ужасно(((
Почему такое происходит? Кластер сделан как typeDef (.ctl)
перезапись кластера
-
- beginner
- Сообщения: 17
- Зарегистрирован: 26 сен 2018, 16:25
- Версия LabVIEW: 16
- Контактная информация:
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: перезапись кластера
У Вас на первом скрине сплошь и рядом гонка состояний (race condition). Значения кластера, считанные при помощи локальной переменной скорее всего будут дефолтными, т.к. одновременно выполнит эти ноды. Вот и все объяснение. Нужно задавать порядок записи в явном виде, т.к. в таком случае не будет знать порядок выполнения функций, и выполнит их все и сразу. Почитайте здесь - https://zone.ni.com/reference/en-XX/hel ... nd_global/, тоже есть примеры.
Мы делили апельсин - много наших полегло...
-
- beginner
- Сообщения: 17
- Зарегистрирован: 26 сен 2018, 16:25
- Версия LabVIEW: 16
- Контактная информация:
Re: перезапись кластера
Kosist, Я и не заметил при отладке, что он сначала инициализирует все локальные переменные на чтение, конечно он все перезаписал, он же инициализировал дефолтные значения) Странно, что это только сейчас проявилось, я очень давно этим пользуюсь, но спасибо, буду знать)
-
- developer
- Сообщения: 289
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: перезапись кластера
А зачем вообще столько раз использовать функцию Bundle By Name Function и плодить столько локальных переменных?
Разве нельзя один раз применить Bundle By Name Function - и просто расширить список переменных?
Разве нельзя один раз применить Bundle By Name Function - и просто расширить список переменных?
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: перезапись кластера
[quote=="rushonda"]Разве нельзя один раз применить Bundle By Name Function - и просто расширить список переменных?[/quote]
можно и нужно
можно и нужно
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 9 Ответы
- 565 Просмотры
-
Последнее сообщение Artem.spb